找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 5824|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

電容觸摸屏控制LED亮滅的stm32源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


stm32單片機(jī)源程序如下:
  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. ALIENTEK精英STM32F103ZET6開發(fā)板
  12. 觸摸屏控制LED 實(shí)驗(yàn)   

  13. ************************************************/


  14. //清空屏幕并顯示人機(jī)界面
  15. void Man_Machine_Interface(void)
  16. {
  17.         LCD_Clear(BLACK);        //清屏

  18.   LCD_Fill(160,160,320,320,GRAY);       //灰色表示為 L1滅狀態(tài)
  19.         LCD_Fill(160,480,320,640,GRAY);       //灰色表示為 L2滅狀態(tài)
  20.       
  21.         POINT_COLOR=BLACK;                                 //設(shè)置字體為黑色
  22.         LCD_ShowString(228,228,24,24,24,"L1");  
  23.   LCD_ShowString(228,548,24,24,24,"L2");      
  24. }
  25. ////////////////////////////////////////////////////////////////////////////////
  26. //電容觸摸屏專有部分

  27. //畫水平線
  28. //x0,y0:坐標(biāo)
  29. //len:線長度
  30. //color:顏色
  31. void gui_draw_hline(u16 x0,u16 y0,u16 len,u16 color)
  32. {
  33.         if(len==0)return;
  34.         LCD_Fill(x0,y0,x0+len-1,y0,color);      
  35. }

  36. //畫實(shí)心圓
  37. //x0,y0:坐標(biāo)
  38. //r:半徑
  39. //color:顏色
  40. void gui_fill_circle(u16 x0,u16 y0,u16 r,u16 color)
  41. {                                                                                          
  42.         u32 i;
  43.         u32 imax = ((u32)r*707)/1000+1;
  44.         u32 sqmax = (u32)r*(u32)r+(u32)r/2;
  45.         u32 x=r;
  46.         gui_draw_hline(x0-r,y0,2*r,color);
  47.         for (i=1;i<=imax;i++)
  48.         {
  49.                 if ((i*i+x*x)>sqmax)// draw lines from outside  
  50.                 {
  51.                         if (x>imax)
  52.                         {
  53.                                 gui_draw_hline (x0-i+1,y0+x,2*(i-1),color);
  54.                                 gui_draw_hline (x0-i+1,y0-x,2*(i-1),color);
  55.                         }
  56.                         x--;
  57.                 }
  58.                 // draw lines from inside (center)  
  59.                 gui_draw_hline(x0-x,y0+i,2*x,color);
  60.                 gui_draw_hline(x0-x,y0-i,2*x,color);
  61.         }
  62. }  

  63. //兩個(gè)數(shù)之差的絕對(duì)值
  64. //x1,x2:需取差值的兩個(gè)數(shù)
  65. //返回值:|x1-x2|
  66. u16 my_abs(u16 x1,u16 x2)
  67. {                        
  68.         if(x1>x2)return x1-x2;
  69.         else return x2-x1;
  70. }  

  71. //畫一條粗(broad)線
  72. //(x1,y1),(x2,y2):線條的起始坐標(biāo)
  73. //size:線條的粗細(xì)程度
  74. //color:線條的顏色
  75. void lcd_draw_bline(u16 x1, u16 y1, u16 x2, u16 y2,u8 size,u16 color)
  76. {
  77.         u16 t;
  78.         int xerr=0,yerr=0,delta_x,delta_y,distance;
  79.         int incx,incy,uRow,uCol;
  80.         if(x1<size|| x2<size||y1<size|| y2<size)return;
  81.         delta_x=x2-x1; //計(jì)算坐標(biāo)增量
  82.         delta_y=y2-y1;
  83.         uRow=x1;
  84.         uCol=y1;
  85.         if(delta_x>0)incx=1; //設(shè)置單步方向
  86.         else if(delta_x==0)incx=0;//垂直線
  87.         else {incx=-1;delta_x=-delta_x;}
  88.         if(delta_y>0)incy=1;
  89.         else if(delta_y==0)incy=0;//水平線
  90.         else{incy=-1;delta_y=-delta_y;}
  91.         if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標(biāo)軸
  92.         else distance=delta_y;
  93.         for(t=0;t<=distance+1;t++ )//畫線輸出
  94.         {  
  95.                 gui_fill_circle(uRow,uCol,size,color);//畫點(diǎn)
  96.                 xerr+=delta_x ;
  97.                 yerr+=delta_y ;
  98.                 if(xerr>distance)
  99.                 {
  100.                         xerr-=distance;
  101.                         uRow+=incx;
  102.                 }
  103.                 if(yerr>distance)
  104.                 {
  105.                         yerr-=distance;
  106.                         uCol+=incy;
  107.                 }
  108.         }  
  109. }   
  110. ////////////////////////////////////////////////////////////////////////////////
  111. //5個(gè)觸控點(diǎn)的顏色                                                                                                
  112. const u16 POINT_COLOR_TBL[CT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};

  113. //電容觸摸屏測(cè)試函數(shù)
  114. void ctp_test(void)
  115. {
  116.         u8 t=0;
  117.         u8 m=1,n=1;                     
  118.         u16 lastpos[5][2];                //記錄最后一次的數(shù)據(jù)
  119.         while(1)
  120.         {
  121.                 tp_dev.scan(0);
  122.                 for(t=0;t<CT_MAX_TOUCH;t++)
  123.                 {
  124.                         if((tp_dev.sta)&(1<<t))
  125.                         {
  126.                                 if(tp_dev.x[t]<lcddev.width&&tp_dev.y[t]<lcddev.height)
  127.                                 {                                       
  128.                                         if(lastpos[t][0]==0XFFFF && (tp_dev.x[t]>160 && tp_dev.x[t]<320) && (tp_dev.y[t]>160 && tp_dev.y[t]<320))
  129.                                   {
  130.                                                 LED0=!LED0;
  131.                                                 LED2=!LED2;
  132.                                                 m=!m;
  133.                                                 if(m==0)
  134.                                                 {
  135.                                                 LCD_Fill(160,160,320,320,RED);       //紅色表示為 L1亮狀態(tài)
  136.                                                 LCD_ShowString(228,228,24,24,24,"L1");
  137.                                                 }
  138.                                                 else
  139.                                                 {
  140.                                                 LCD_Fill(160,160,320,320,GRAY);     //灰色表示為 L1滅狀態(tài)
  141.                                                 LCD_ShowString(228,228,24,24,24,"L1");
  142.                                                 }
  143.                                         }
  144.                                        
  145.                                         if(lastpos[t][0]==0XFFFF && (tp_dev.x[t]>160 && tp_dev.x[t]<320) && (tp_dev.y[t]>480 && tp_dev.y[t]<640))
  146.                                   {
  147.                                                 LED1=!LED1;
  148.                                                 LED3=!LED3;
  149.                                                 n=!n;
  150.                                                 if(n==0)
  151.                                                 {
  152.                                                 LCD_Fill(160,480,320,640,GREEN);       //綠色表示為 L2亮狀態(tài)
  153.                                                 LCD_ShowString(228,548,24,24,24,"L2");
  154.                                                 }
  155.                                                 else
  156.                                                 {
  157.                                                 LCD_Fill(160,480,320,640,GRAY);     //灰色表示為 L2滅狀態(tài)
  158.                                                 LCD_ShowString(228,548,24,24,24,"L2");
  159.                                                 }
  160.                                         }
  161.                                        
  162.                                         lastpos[t][0]=tp_dev.x[t];
  163.                                         lastpos[t][1]=tp_dev.y[t];      
  164.                                 }
  165.                         }
  166.                         else
  167.                                 lastpos[t][0]=0XFFFF;
  168.                 }
  169.                
  170.                 delay_ms(5);
  171.         }      
  172. }


  173. int main(void)
  174. {                             
  175.         delay_init();                     //延時(shí)函數(shù)初始化         
  176.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  177.         uart_init(115200);                 //串口初始化為115200
  178.          
  179.         LED_Init();                             //LED端口初始化
  180.         LCD_Init();                 //液晶顯示屏LCD初始化
  181.         KEY_Init();                        //按鍵KEY初始化
  182.         tp_dev.init();       //觸控屏TP初始化
  183.          
  184.         POINT_COLOR=RED;//設(shè)置字體為紅色
  185.         LCD_ShowString(60,50,200,16,16,"ELITE STM32F1");      
  186.         LCD_ShowString(60,70,200,16,16,"TOUCH TEST");      
  187.       
  188.         delay_ms(1500);
  189.       
  190.         Man_Machine_Interface();
  191.       
  192.         if(tp_dev.touchtype&0X80)
  193.                 ctp_test();        //電容屏測(cè)試
  194.         else
  195.                 LCD_ShowString(60,50,200,16,16,"Not CP!");
  196. }


復(fù)制代碼

所有資料51hei提供下載:
觸摸屏控制LED.rar (370.19 KB, 下載次數(shù): 78)


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

使用道具 舉報(bào)

沙發(fā)
ID:292119 發(fā)表于 2018-4-27 15:59 | 只看該作者
下來玩下
回復(fù)

使用道具 舉報(bào)

板凳
ID:471898 發(fā)表于 2019-1-23 07:04 | 只看該作者
很好,正好想要這個(gè)程序,可惜沒幣下,手敲試試
回復(fù)

使用道具 舉報(bào)

地板
ID:95141 發(fā)表于 2020-3-26 16:42 | 只看該作者
感謝!!需要的就是這個(gè)  
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表