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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10280|回復: 13
打印 上一主題 下一主題
收起左側

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

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

制作出來的實物圖如下:


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 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:521481 發表于 2019-4-25 16:25 | 只看該作者
很不錯,參考一下
回復

使用道具 舉報

板凳
ID:486936 發表于 2019-5-14 08:57 | 只看該作者
請問如果用STC89C52可以嗎?有什么需要注意的地方嗎??
回復

使用道具 舉報

地板
ID:416208 發表于 2019-7-3 11:38 | 只看該作者
用在F103上需要注意哪些地方,修改那些地方,
回復

使用道具 舉報

5#
ID:416208 發表于 2019-7-3 13:56 | 只看該作者
如果是F103需要修改那些地方
回復

使用道具 舉報

6#
ID:662900 發表于 2019-12-16 08:26 來自手機 | 只看該作者
你好,請問程序中“sting.h”這個什么頭文件
回復

使用道具 舉報

7#
ID:676739 發表于 2019-12-29 16:55 | 只看該作者
十分感謝,參考一下
回復

使用道具 舉報

8#
ID:921528 發表于 2021-5-15 02:24 來自手機 | 只看該作者
樓主優秀,參考一下
回復

使用道具 舉報

9#
ID:921528 發表于 2021-5-15 02:25 來自手機 | 只看該作者
wyl2937808789 發表于 2019-12-16 08:26
你好,請問程序中“sting.h”這個什么頭文件

是string.h
回復

使用道具 舉報

10#
ID:899094 發表于 2021-5-18 15:28 | 只看該作者
關于觸摸區域弄的頭都大了
回復

使用道具 舉報

11#
ID:942056 發表于 2023-3-27 07:43 來自手機 | 只看該作者
謝謝大佬的奉獻
回復

使用道具 舉報

12#
ID:1143069 發表于 2025-1-15 15:38 | 只看該作者
大佬,這邊板子不亮是什么原因呢?用的是野火stm32f407
回復

使用道具 舉報

13#
ID:1077913 發表于 2025-1-18 22:43 | 只看該作者
小白正在學習,下載下來參考一下大佬的作品
回復

使用道具 舉報

14#
ID:66862 發表于 2025-4-8 23:25 | 只看該作者
程序對應的液晶觸摸屏驅動型號多少?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久四虎 | 久久蜜桃av一区二区天堂 | 国产精品一区二区三区四区 | 中文字幕亚洲一区二区三区 | 一级黄色夫妻生活 | 91免费观看国产 | 日本不卡在线视频 | 视频一区二区三区中文字幕 | 久久精品国产亚洲 | 亚洲日本中文字幕在线 | 午夜在线电影网 | 久久综合一区 | 丝袜美腿一区二区三区动态图 | 亚洲精品1区 | 嫩草视频在线 | av色站| 亚洲精品在线免费观看视频 | 国产精品免费一区二区 | 狠狠入ady亚洲精品经典电影 | 久久无毛 | 亚洲一区二区三区在线播放 | 国产91综合一区在线观看 | 亚洲午夜av | 精品欧美一区免费观看α√ | 99只有精品| 久草www| 91国内精品久久 | 欧美久久视频 | 婷婷久久久久 | 成人亚洲一区 | 欧美亚洲另类丝袜综合网动图 | a国产视频 | 天堂中文在线观看 | www.久| 国产精品人人做人人爽 | av激情在线 | 伊人春色在线观看 | 国产操操操 | 91精品国产乱码久久久久久久久 | 欧美一区二区三区 | 精品一区二区三区在线观看 |