久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6026|回復: 2
收起左側

STM32虛擬按鍵觸摸屏實驗程序

[復制鏈接]
ID:517510 發表于 2020-5-9 16:30 | 顯示全部樓層 |閱讀模式
該程序是論壇某位大佬的,不過是F4的。稍加修改,適用于F103系列(2.8寸觸摸屏)。

單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "24cxx.h"
  8. #include "w25qxx.h"
  9. #include "touch.h"

  10. //兩個數之差的絕對值
  11. //x1,x2:需取差值的兩個數
  12. //返回值:|x1-x2|
  13. u16 my_abs(u16 x1,u16 x2)
  14. {                         
  15.         if(x1>x2)return x1-x2;
  16.         else return x2-x1;
  17. }  
  18. ////////////////////////////////////////////////////////////////////////////////
  19. //5個觸控點的顏色                                                                                                 
  20. const u16 POINT_COLOR_TBL[CT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};  
  21. //電阻觸摸屏測試函數

  22. /*void rtp_test(void)
  23. {
  24.         u8 key;
  25.         u8 i=0;          
  26.         while(1)
  27.         {
  28.                  key=KEY_Scan(0);
  29.                 tp_dev.scan(0);                  
  30.                 if(tp_dev.sta&TP_PRES_DOWN)                        //觸摸屏被按下
  31.                 {       
  32.                          if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
  33.                         {       
  34.                                 if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();//清除
  35.                                 else TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED);                //畫圖                                    
  36.                         }
  37.                 }else delay_ms(10);        //沒有按鍵按下的時候             
  38.                 if(key==KEY0_PRES)        //KEY0按下,則執行校準程序
  39.                 {
  40.                         LCD_Clear(WHITE);//清屏
  41.                     TP_Adjust();          //屏幕校準  
  42.                         Load_Drow_Dialog();
  43.                 }
  44.                 i++;
  45.                 if(i%20==0)LED0=!LED0;
  46.         }
  47. }*/
  48. //加載鍵盤控制界面
  49. //x,y:界面起始坐標
  50. //py_load_ui(0,0)
  51. void py_load_ui(u16 x,u16 y)
  52. {
  53.         POINT_COLOR=RED;
  54.         LCD_DrawRectangle(x,y,x+240,y+200);                                                  
  55.         LCD_DrawLine(x,y+100,x+240,y+100);
  56.         LCD_DrawLine(x+120,y,x+120,y+200);
  57.         LCD_Fill(x+2,y+2,x+118,y+98,WHITE);//控制LED1
  58.         LCD_Fill(x+122,y+2,x+238,y+98,WHITE);//控制LED2
  59.         LCD_Fill(x+2,y+102,x+118,y+198,WHITE);//控制LED1 LED2 開
  60.         LCD_Fill(x+122,y+102,x+238,y+198,WHITE);//控制LED1 LED2 關
  61.         POINT_COLOR=BLACK;
  62.         LCD_ShowString(x+39,y+38,lcddev.width,lcddev.height,24,"LED1");
  63.         LCD_ShowString(x+153,y+38,lcddev.width,lcddev.height,24,"LED2");
  64.         LCD_ShowString(x+39,y+138,lcddev.width,lcddev.height,24,"LED_ON");
  65.         LCD_ShowString(x+153,y+138,lcddev.width,lcddev.height,24,"LED_OFF");                                                            
  66. }
  67. //按鍵狀態設置
  68. //x,y:鍵盤坐標
  69. //key:鍵值(0~8)
  70. //sta:狀態,0,松開;1,按下;
  71. void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  72. {                  
  73.         u16 i=keyx/2,j=keyx%2;
  74.         if(keyx>8)return;
  75.        
  76.         if(sta)
  77.                                         LCD_Fill(x+j*120+1,y+i*100+1,x+j*120+119,y+i*100+99,GREEN);//按鍵按下
  78.         else
  79.                                         LCD_Fill(x+j*120+1,y+i*100+1,x+j*120+119,y+i*100+99,WHITE);
  80.                                         POINT_COLOR=BLACK;
  81.         LCD_ShowString(x+39,y+38,lcddev.width,lcddev.height,24,"LED1");
  82.         LCD_ShowString(x+153,y+38,lcddev.width,lcddev.height,24,"LED2");
  83.         LCD_ShowString(x+39,y+138,lcddev.width,lcddev.height,24,"LED_ON");
  84.         LCD_ShowString(x+153,y+138,lcddev.width,lcddev.height,24,"LED_OFF");
  85. }
  86. //得到觸摸屏的輸入
  87. //x,y:鍵盤坐標
  88. //返回值:按鍵鍵值(1~9有效;0,無效)
  89. //key=py_get_keynum(250,140);  640*320
  90. u8 py_get_keynum(u16 x,u16 y)
  91. {
  92.         u16 i,j;
  93.         static u8 key_x=0;//0,沒有任何按鍵按下;1~4,1~4號按鍵按下
  94.         u8 key=0;
  95.         tp_dev.scan(0);      //屏幕掃描            
  96.         if(tp_dev.sta&TP_PRES_DOWN)      //觸摸屏被按下
  97.         {      
  98.                 for(i=0;i<2;i++)
  99.                 {
  100.                         for(j=0;j<2;j++)
  101.                         {
  102.                                  if(tp_dev.x[0]<(x+j*120+120)&&tp_dev.x[0]>(x+j*120)&&tp_dev.y[0]<(y+i*100+100)&&tp_dev.y[0]>(y+i*100))
  103.                                 {      
  104.                                         key=i*2+j+1;         
  105.                                         break;                           
  106.                                 }
  107.                         }
  108.                         if(key)
  109.                         {         
  110.                                 if(key_x==key)key=0;
  111.                                 else
  112.                                 {
  113.                                         py_key_staset(x,y,key_x-1,0);
  114.                                         key_x=key;
  115.                                         py_key_staset(x,y,key_x-1,1);
  116.                                 }
  117.                                 break;
  118.                         }
  119.                 }  
  120.         }
  121.       
  122.         else if(key_x) //如果要記錄按下后的狀態 這句話需要被注釋掉
  123.         {
  124.                 py_key_staset(x,y,key_x-1,0);
  125.                 key_x=0;
  126.         }
  127.         return key;
  128. }
  129. /*
  130.         tp_dev.init();
  131.            LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");       
  132.            if(tp_dev.touchtype!=0XFF)LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");//電阻屏才顯示
  133.                 delay_ms(1500);
  134.                 Load_Drow_Dialog();                
  135.                 if(tp_dev.touchtype&0X80);        //電容屏測試
  136.                 else rtp_test();                                                 //電阻屏測試
  137. }*/
  138. int main(void)
  139. {
  140.               u8 key;
  141.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  142.         delay_init();  //初始化延時函數
  143.         uart_init(115200);                //初始化串口波特率為115200
  144.                     
  145.         LED_Init();                                        //初始化LED
  146.         LCD_Init();                                        //LCD初始化  
  147.         KEY_Init();      
  148.         tp_dev.init();                                //初始化觸摸屏
  149.                                 TP_Adjust();          //屏幕校準
  150.         LCD_ShowString(120,72,lcddev.width,lcddev.height,16,"LED CONTROL SYSTEM");
  151.         py_load_ui(0,0);               
  152.         while(1)
  153.         {
  154.                 delay_ms(10);
  155.                 key=py_get_keynum(0,0);
  156.                 switch(key)
  157.                 {
  158.                         case 1 :LED0=!LED0;break;
  159.                         case 2 :LED1=!LED1;break;
  160.                         case 3 :LED0=LED1=1;break;/*GPIO_ResetBits(GPIOC,GPIO_Pin_4 | GPIO_Pin_5)*/
  161.                         case 4 :LED0=LED1=0;break;/*GPIO_SetBits(GPIOC,GPIO_Pin_4 | GPIO_Pin_5);break;*/
  162.                 }
  163.                 //可以用來控制開關機等
  164. //                key=KEY_Scan(0);
  165. //                if(key==KEY2_PRES)//KEY2按下
  166. //                {

  167. //                }  
  168.         }                                                                                                                     
  169. }
復制代碼

所有資料51hei提供下載:
觸摸屏虛擬按鍵程序.7z (246.82 KB, 下載次數: 94)


回復

使用道具 舉報

ID:921528 發表于 2021-5-15 02:23 來自手機 | 顯示全部樓層
見過相同的帖子
回復

使用道具 舉報

ID:899094 發表于 2021-5-17 22:20 | 顯示全部樓層
學到了一種新的代碼寫法
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品人人爽夜夜爽 | 欧美一区二区三区在线 | 丝袜美腿一区二区三区动态图 | 久热久| 最近中文字幕第一页 | 精品国产乱码久久久久久88av | 九九看片 | av片免费| 狠狠av| 日韩精品| 欧美精品福利 | 日韩av在线免费 | 国产精品免费观看视频 | 韩日三级| 午夜影院视频在线观看 | 成人综合久久 | 久久久久无码国产精品一区 | 九九热热九九 | 免费一级做a爰片久久毛片潮喷 | 成人av片在线观看 | 久在线 | 亚洲第一av | 精品国产一区二区三区免费 | 国产亚洲精品91 | 亚洲国产一区二区视频 | 久久久久91| 成人网址在线观看 | 99国产精品视频免费观看一公开 | 九九久久在线看 | 国产成人一区二区三区电影 | 精品福利在线 | 成人做爰9片免费看网站 | 特一级黄色毛片 | 国产人久久人人人人爽 | 美女久久视频 | 中文字幕福利视频 | 国产精品一区二区欧美黑人喷潮水 | 97av视频| 最新黄色毛片 | 亚洲欧美中文日韩在线v日本 | 国产福利视频网站 |