在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32-觸摸屏實(shí)驗(yàn)

            STM32-觸摸屏實(shí)驗(yàn)

            作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            void Touch_Init(void);//初始化

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

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

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

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

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

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

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

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

            二次讀取坐標(biāo)

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

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

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

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

            7.void Drow_Touch_Point(u8 x,u16 y);//畫一個(gè)坐標(biāo)叫準(zhǔn)點(diǎn)

            8.void Draw_Big_Point(u8 x,u16 y); //畫一個(gè)大點(diǎn)

            繪圖寫字函數(shù)

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

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

            校準(zhǔn)出來的坐標(biāo)參數(shù)保存在2401里面

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

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

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

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

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

            [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ū)域,點(diǎn)擊這個(gè)區(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í)行校準(zhǔn)程序
            21. {
            22. LCD_Clear(WHITE);//清屏
            23. Touch_Adjust();//屏幕校準(zhǔn)
            24. Save_Adjdata();
            25. Load_Drow_Dialog();
            26. }
            27. i++;
            28. if(i==20)
            29. {
            30. i=0;
            31. LED0=!LED0;
            32. }
            33. }

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

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

            [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);//沒有按鍵按下的時(shí)候
            13. if(key==KEY_RIGHT)//KEY_RIGHT按下,則執(zhí)行校準(zhǔn)程序
            14. {
            15. LCD_Clear(WHITE);//清屏
            16. TP_Adjust();//屏幕校準(zhǔn)
            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)閉