国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32-觸摸屏實驗

STM32-觸摸屏實驗

作者: 時間:2016-11-23 來源:網絡 收藏
void Touch_Init(void);//初始化

u8 Read_ADS(u16 *x,u16 *y); //帶舍棄的雙方向讀取
u8 Read_ADS2(u16 *x,u16 *y); //帶加強濾波的雙方向坐標讀取
u16 ADS_Read_XY(u8 xy); //帶濾波的坐標讀取(單方向)
u16 ADS_Read_AD(u8 CMD); //讀取AD轉換值
void ADS_Write_Byte(u8 num); //向控制芯片寫入一個數(shù)據(jù)
void Drow_Touch_Point(u8 x,u16 y);//畫一個坐標叫準點
void Draw_Big_Point(u8 x,u16 y); //畫一個大點
void Touch_Adjust(void); //觸摸屏校準
void Save_Adjdata(void); //保存校準參數(shù)
u8 Get_Adjdata(void);//讀取校準參數(shù)
void Pen_Int_Set(u8 en);//PEN中斷使能/關閉
void Convert_Pos(void); //結果轉換函數(shù)

本文引用地址:http://www.ljygm.com/article/201611/320451.htm

以上是touch.c里面的主要函數(shù):

1.void Touch_Init(void); //初始化

包含時鐘初始化、EXTI1中斷設置,開啟了line1上的中斷,設置了下降沿觸發(fā)

2.u8 Read_ADS(u16 *x,u16 *y); //帶舍棄的雙方向讀取

單次讀取坐標函數(shù)

3.u8 Read_ADS2(u16 *x,u16 *y); //帶加強濾波的雙方向坐標讀取

二次讀取坐標

4.u16 ADS_Read_XY(u8 xy); //帶濾波的坐標讀取(單方向)

連續(xù)讀取READ_TIMES次數(shù)據(jù),對這些數(shù)據(jù)升序排列,然后去掉最低和最高LOST_VAL個數(shù),取平均值

5.u16 ADS_Read_AD(u8 CMD); //讀取AD轉換值

6.void ADS_Write_Byte(u8 num); //向控制芯片寫入一個數(shù)據(jù)

7.void Drow_Touch_Point(u8 x,u16 y);//畫一個坐標叫準點

8.void Draw_Big_Point(u8 x,u16 y); //畫一個大點

繪圖寫字函數(shù)

9.void Touch_Adjust(void); //觸摸屏校準

10.void Save_Adjdata(void); //保存校準參數(shù)

校準出來的坐標參數(shù)保存在2401里面

11.void Pen_Int_Set(u8 en);//PEN中斷使能/關閉

觸摸屏被按下即觸發(fā)中斷,可以使用這個函數(shù)暫時關掉中斷,等待繪圖完畢再打開

12.void Convert_Pos(void); //結果轉換函數(shù)

觸摸屏讀出的坐標是物理坐標,程序中使用的坐標是LCD像素坐標,用這個函數(shù)作為轉換

main函數(shù)中有一個問題,看了論壇里好多人問了這個問題:

[cpp]view plaincopy
  1. while(1)
  2. {
  3. key=KEY_Scan();
  4. if(Pen_Point.Key_Sta==Key_Down)//觸摸屏被按下
  5. {
  6. Pen_Int_Set(0);//關閉中斷
  7. do
  8. {
  9. Convert_Pos();
  10. Pen_Point.Key_Sta=Key_Up;
  11. if(Pen_Point.X0>216&&Pen_Point.Y0<16)Load_Drow_Dialog();//RST區(qū)域,點擊這個區(qū)域將執(zhí)行清屏
  12. else
  13. {
  14. Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//畫圖
  15. GPIOC->ODR|=1<<1;//PC1上拉
  16. }
  17. }while(PEN==0);//如果PEN一直有效,則一直執(zhí)行
  18. Pen_Int_Set(1);//開啟中斷
  19. }elsedelay_ms(10);
  20. if(key==1)//KEY0按下,則執(zhí)行校準程序
  21. {
  22. LCD_Clear(WHITE);//清屏
  23. Touch_Adjust();//屏幕校準
  24. Save_Adjdata();
  25. Load_Drow_Dialog();
  26. }
  27. i++;
  28. if(i==20)
  29. {
  30. i=0;
  31. LED0=!LED0;
  32. }
  33. }

這個是論壇里的提問帖,相關帖子及解決辦法:http://www.openedv.com/posts/list/1813.htm用到了再研究。

在正點原子的戰(zhàn)艦版例程里,沒有使用PEN作為判斷條件,規(guī)避了這個問題:

[cpp]view plaincopy
  1. while(1)
  2. {
  3. key=KEY_Scan(0);
  4. tp_dev.scan(0);
  5. if(tp_dev.sta&TP_PRES_DOWN)//觸摸屏被按下
  6. {
  7. if(tp_dev.x
  8. {
  9. if(tp_dev.x>(lcddev.width-24)&&tp_dev.y<16)Load_Drow_Dialog();//清除
  10. elseTP_Draw_Big_Point(tp_dev.x,tp_dev.y,RED);//畫圖
  11. }
  12. }elsedelay_ms(10);//沒有按鍵按下的時候
  13. if(key==KEY_RIGHT)//KEY_RIGHT按下,則執(zhí)行校準程序
  14. {
  15. LCD_Clear(WHITE);//清屏
  16. TP_Adjust();//屏幕校準
  17. TP_Save_Adjdata();
  18. Load_Drow_Dialog();
  19. }
  20. i++;
  21. if(i==20)
  22. {
  23. i=0;
  24. LED0=!LED0;
  25. }
  26. }



關鍵詞: STM32觸摸

評論


技術專區(qū)

關閉