<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32-觸摸屏實驗

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          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轉(zhuǎn)換值
          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中斷使能/關(guān)閉
          void Convert_Pos(void); //結(jié)果轉(zhuǎn)換函數(shù)

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

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

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

          包含時鐘初始化、EXTI1中斷設(shè)置,開啟了line1上的中斷,設(shè)置了下降沿觸發(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轉(zhuǎn)換值

          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中斷使能/關(guān)閉

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

          12.void Convert_Pos(void); //結(jié)果轉(zhuǎn)換函數(shù)

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

          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);//關(guān)閉中斷
          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ū)域?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. }

          這個是論壇里的提問帖,相關(guān)帖子及解決辦法: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. }



          關(guān)鍵詞: STM32觸摸

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();