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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:316875 發(fā)表于 2018-4-26 11:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


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 實驗   

  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. //畫實心圓
  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. //兩個數(shù)之差的絕對值
  64. //x1,x2:需取差值的兩個數(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; //計算坐標(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);//畫點
  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個觸控點的顏色                                                                                                
  112. const u16 POINT_COLOR_TBL[CT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};

  113. //電容觸摸屏測試函數(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ù)初始化         
  176.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  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();        //電容屏測試
  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ù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费看 | 天堂一区二区三区 | 亚洲日本一区二区三区四区 | 久久99视频精品 | 精品国产乱码久久久久久丨区2区 | 国产在线中文字幕 | 欧美成人性生活 | 中文字幕日韩一区 | 欧美日韩综合精品 | 亚洲一区视频在线 | 最新国产精品精品视频 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产精品国产a级 | 伊人网91| 狠狠视频 | 久久99国产精一区二区三区 | 日本一区二区三区四区 | 成人黄色在线 | 欧美xxxx色视频在线观看免费 | av中文字幕在线播放 | 伊人二区| 啪一啪| 国产精品免费在线 | 欧美一区在线看 | 欧美日韩专区 | 在线观看视频你懂得 | 99视频免费看| xxx国产精品视频 | 国产精品视频网站 | 国产亚洲一区在线 | 一区视频在线 | 亚洲v区| 天天草天天射 | 中文av在线播放 | 精品久久久久久亚洲精品 | 久久精品久久综合 | 亚洲免费视频网址 | 99久久婷婷国产亚洲终合精品 | 91一区二区 | 精品www| 成人在线免费电影 |