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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10414|回復: 13
收起左側

STM32F407觸摸屏虛擬按鍵控制LED燈源程序 帶拼音九鍵

  [復制鏈接]
ID:165873 發表于 2019-3-28 00:52 | 顯示全部樓層 |閱讀模式
最近因為一些需要,需要用到觸摸屏控制,作為一個小白,看著例程里面的拼音九鍵那么多程序,看著都害怕(靜下來懂了之后其實不難),可是又必須邁過這道坎,來論壇搜了一下相關的資料,好多相關的都是17年之前的了,大多數也都是基于F1的,相信很多初學者和我一樣,可能雖然只是移植,也會出現各種問題。無賴之下,又回過頭去啃例程,經過一番折騰,也搞懂了,想著可能也許有網友可能用的上,就在例程上面精簡了一下,并做了部分的改動。 需要注意的是,板子是自己做的,所以的LED與開發板是不同的,記得修改IO口。
硬件基礎:STM32F407  4.3寸電容屏  程序實現的功能是  橫屏顯示
(1)當按下LED1 時綠燈亮;
(2)當按下LED2 時綠燈亮;
(3)當按下LED_ON 時兩燈亮;
(4)當按下LED_OFF時兩燈熄;
同時,因為源程序中有一部分被注釋掉,所以按鍵按下后的狀態就被會被記錄下來。此程序僅僅只是用于起個引導作用,不是什么高端的操作。作為一個潛水黨,也想為論壇的發展貢獻一點微薄之力哈哈哈,不喜勿噴。
雙手奉上整個工程文件。

制作出來的實物圖如下:
開機界面.png LED1開.jpg LED2開.png 兩個LED開.png 兩個LED關.jpg

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

  9.   
  10. //加載鍵盤控制界面
  11. //x,y:界面起始坐標
  12. void py_load_ui(u16 x,u16 y)
  13. {
  14.         POINT_COLOR=RED;
  15.         LCD_DrawRectangle(x,y,x+300,y+200);                                                  
  16.         LCD_DrawLine(x,y+100,x+300,y+100);
  17.         LCD_DrawLine(x+150,y,x+150,y+200);
  18.         LCD_Fill(x+2,y+2,x+148,y+98,WHITE);//控制LED1
  19.         LCD_Fill(x+152,y+2,x+298,y+98,WHITE);//控制LED2
  20.         LCD_Fill(x+2,y+102,x+148,y+198,WHITE);//控制LED1 LED2 開
  21.         LCD_Fill(x+152,y+102,x+298,y+198,WHITE);//控制LED1 LED2 關
  22.         POINT_COLOR=BLACK;
  23.         LCD_ShowString(x+51,y+38,lcddev.width,lcddev.height,24,"LED1");
  24.         LCD_ShowString(x+201,y+38,lcddev.width,lcddev.height,24,"LED2");
  25.         LCD_ShowString(x+39,y+138,lcddev.width,lcddev.height,24,"LED_ON");
  26.         LCD_ShowString(x+183,y+138,lcddev.width,lcddev.height,24,"LED_OFF");                                                             
  27. }
  28. //按鍵狀態設置
  29. //x,y:鍵盤坐標
  30. //key:鍵值(0~8)
  31. //sta:狀態,0,松開;1,按下;
  32. void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  33. {                  
  34.         u16 i=keyx/2,j=keyx%2;
  35.         if(keyx>8)return;
  36.         if(sta)LCD_Fill(x+j*150+1,y+i*100+1,x+j*150+149,y+i*100+99,GREEN);
  37.         else LCD_Fill(x+j*150+1,y+i*100+1,x+j*150+149,y+i*100+99,WHITE);
  38.         POINT_COLOR=BLACK;
  39.         LCD_ShowString(x+51,y+38,lcddev.width,lcddev.height,24,"LED1");
  40.         LCD_ShowString(x+201,y+38,lcddev.width,lcddev.height,24,"LED2");
  41.         LCD_ShowString(x+39,y+138,lcddev.width,lcddev.height,24,"LED_ON");
  42.         LCD_ShowString(x+183,y+138,lcddev.width,lcddev.height,24,"LED_OFF");
  43. }
  44. //得到觸摸屏的輸入
  45. //x,y:鍵盤坐標
  46. //返回值:按鍵鍵值(1~9有效;0,無效)
  47. u8 py_get_keynum(u16 x,u16 y)
  48. {
  49.         u16 i,j;
  50.         static u8 key_x=0;//0,沒有任何按鍵按下;1~4,1~4號按鍵按下
  51.         u8 key=0;
  52.         tp_dev.scan(0);                  
  53.         if(tp_dev.sta&TP_PRES_DOWN)                        //觸摸屏被按下
  54.         {       
  55.                 for(i=0;i<2;i++)
  56.                 {
  57.                         for(j=0;j<2;j++)
  58.                         {
  59.                                  if(tp_dev.x[0]<(x+j*150+150)&&tp_dev.x[0]>(x+j*150)&&tp_dev.y[0]<(y+i*100+100)&&tp_dev.y[0]>(y+i*100))
  60.                                 {       
  61.                                         key=i*2+j+1;         
  62.                                         break;                           
  63.                                 }
  64.                         }
  65.                         if(key)
  66.                         {          
  67.                                 if(key_x==key)key=0;
  68.                                 else
  69.                                 {
  70.                                         py_key_staset(x,y,key_x-1,0);
  71.                                         key_x=key;
  72.                                         py_key_staset(x,y,key_x-1,1);
  73.                                 }
  74.                                 break;
  75.                         }
  76.                 }  
  77.         }
  78.         //如果要記錄按下后的狀態 這句話需要被注釋掉
  79. //        else if(key_x)
  80. //        {
  81. //                py_key_staset(x,y,key_x-1,0);
  82. //                key_x=0;
  83. //        }
  84.         return key;
  85. }
  86. int main(void)
  87. {        
  88.         u8 key;
  89.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  90.         delay_init(168);  //初始化延時函數
  91.         uart_init(115200);                //初始化串口波特率為115200
  92.        
  93.         LED_Init();                                        //初始化LED
  94.         LCD_Init();                                        //LCD初始化  
  95.         KEY_Init();                                        //按鍵初始化
  96.         tp_dev.init();                                //初始化觸摸屏
  97.         LCD_ShowString(328,72,lcddev.width,lcddev.height,16,"LED CONTROL SYSTEM");
  98.         py_load_ui(250,140);               
  99.         while(1)
  100.         {
  101.                 delay_ms(10);
  102.                 key=py_get_keynum(250,140);
  103.                 switch(key)
  104.                 {
  105.                         case 1 :LED0=!LED0;break;
  106.                         case 2 :LED1=!LED1;break;
  107.                         case 3 :GPIO_ResetBits(GPIOC,GPIO_Pin_4 | GPIO_Pin_5);break;
  108.                         case 4 :GPIO_SetBits(GPIOC,GPIO_Pin_4 | GPIO_Pin_5);break;
  109.                 }
  110.                 //可以用來控制開關機等
  111. //                key=KEY_Scan(0);
  112. //                if(key==KEY2_PRES)//KEY2按下
  113. //                {

  114. //                }  
  115.         }                                                                                                                      
  116. }
復制代碼

所有資料51hei提供下載:
虛擬按鍵 控制LED.7z (354.19 KB, 下載次數: 235)


評分

參與人數 2黑幣 +130 收起 理由
wpppmlah + 30 共享資料的黑幣獎勵!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:521481 發表于 2019-4-25 16:25 | 顯示全部樓層
很不錯,參考一下
回復

使用道具 舉報

ID:486936 發表于 2019-5-14 08:57 | 顯示全部樓層
請問如果用STC89C52可以嗎?有什么需要注意的地方嗎??
回復

使用道具 舉報

ID:416208 發表于 2019-7-3 11:38 | 顯示全部樓層
用在F103上需要注意哪些地方,修改那些地方,
回復

使用道具 舉報

ID:416208 發表于 2019-7-3 13:56 | 顯示全部樓層
如果是F103需要修改那些地方
回復

使用道具 舉報

ID:662900 發表于 2019-12-16 08:26 來自手機 | 顯示全部樓層
你好,請問程序中“sting.h”這個什么頭文件
回復

使用道具 舉報

ID:676739 發表于 2019-12-29 16:55 | 顯示全部樓層
十分感謝,參考一下
回復

使用道具 舉報

ID:921528 發表于 2021-5-15 02:24 來自手機 | 顯示全部樓層
樓主優秀,參考一下
回復

使用道具 舉報

ID:921528 發表于 2021-5-15 02:25 來自手機 | 顯示全部樓層
wyl2937808789 發表于 2019-12-16 08:26
你好,請問程序中“sting.h”這個什么頭文件

是string.h
回復

使用道具 舉報

ID:899094 發表于 2021-5-18 15:28 | 顯示全部樓層
關于觸摸區域弄的頭都大了
回復

使用道具 舉報

ID:942056 發表于 2023-3-27 07:43 來自手機 | 顯示全部樓層
謝謝大佬的奉獻
回復

使用道具 舉報

ID:1143069 發表于 2025-1-15 15:38 | 顯示全部樓層
大佬,這邊板子不亮是什么原因呢?用的是野火stm32f407
回復

使用道具 舉報

ID:1077913 發表于 2025-1-18 22:43 | 顯示全部樓層
小白正在學習,下載下來參考一下大佬的作品
回復

使用道具 舉報

ID:66862 發表于 2025-4-8 23:25 | 顯示全部樓層
程序對應的液晶觸摸屏驅動型號多少?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看一区 | 国产精品久久久久久久久婷婷 | 黄片毛片免费看 | 欧美日韩综合视频 | 日韩欧美在线视频 | 亚洲综合二区 | 久久久久久久久久性 | 精产国产伦理一二三区 | 日韩一区二区在线视频 | 精品欧美色视频网站在线观看 | 国产人成精品一区二区三 | 国产成人精品一区二区三 | 中文字幕一区在线观看视频 | 午夜免费视频 | 9999国产精品欧美久久久久久 | 亚洲精品一区二区三区在线 | 欧美精品一区二区三区在线 | 日本中文字幕在线视频 | 亚洲精品视频在线 | 欧美日韩不卡合集视频 | 国产成人精品一区二区三区四区 | 久久精品无码一区二区三区 | 午夜免费观看体验区 | 国产成人高清成人av片在线看 | 亚洲97 | 日韩福利 | 久久久激情 | 精品综合久久久 | 免费在线精品视频 | 成人黄色电影在线播放 | 91精品国产乱码久久久久久 | a网站在线观看 | 日日天天| 成人一区二区三区 | 国产精品亚洲精品久久 | 一区二区三区在线播放视频 | 国产精品久久久久久一级毛片 | 久久里面有精品 | 国产视频在线观看一区二区三区 | 亚洲网站在线观看 | 欧美国产日韩在线观看 |