|
觸摸屏控制LED亮滅.png (1.84 MB, 下載次數(shù): 83)
下載附件
觸摸屏控制LED亮滅
2018-4-26 11:33 上傳
stm32單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "24cxx.h"
- #include "w25qxx.h"
- #include "touch.h"
- /************************************************
- ALIENTEK精英STM32F103ZET6開發(fā)板
- 觸摸屏控制LED 實驗
- ************************************************/
- //清空屏幕并顯示人機(jī)界面
- void Man_Machine_Interface(void)
- {
- LCD_Clear(BLACK); //清屏
- LCD_Fill(160,160,320,320,GRAY); //灰色表示為 L1滅狀態(tài)
- LCD_Fill(160,480,320,640,GRAY); //灰色表示為 L2滅狀態(tài)
-
- POINT_COLOR=BLACK; //設(shè)置字體為黑色
- LCD_ShowString(228,228,24,24,24,"L1");
- LCD_ShowString(228,548,24,24,24,"L2");
- }
- ////////////////////////////////////////////////////////////////////////////////
- //電容觸摸屏專有部分
- //畫水平線
- //x0,y0:坐標(biāo)
- //len:線長度
- //color:顏色
- void gui_draw_hline(u16 x0,u16 y0,u16 len,u16 color)
- {
- if(len==0)return;
- LCD_Fill(x0,y0,x0+len-1,y0,color);
- }
- //畫實心圓
- //x0,y0:坐標(biāo)
- //r:半徑
- //color:顏色
- void gui_fill_circle(u16 x0,u16 y0,u16 r,u16 color)
- {
- u32 i;
- u32 imax = ((u32)r*707)/1000+1;
- u32 sqmax = (u32)r*(u32)r+(u32)r/2;
- u32 x=r;
- gui_draw_hline(x0-r,y0,2*r,color);
- for (i=1;i<=imax;i++)
- {
- if ((i*i+x*x)>sqmax)// draw lines from outside
- {
- if (x>imax)
- {
- gui_draw_hline (x0-i+1,y0+x,2*(i-1),color);
- gui_draw_hline (x0-i+1,y0-x,2*(i-1),color);
- }
- x--;
- }
- // draw lines from inside (center)
- gui_draw_hline(x0-x,y0+i,2*x,color);
- gui_draw_hline(x0-x,y0-i,2*x,color);
- }
- }
- //兩個數(shù)之差的絕對值
- //x1,x2:需取差值的兩個數(shù)
- //返回值:|x1-x2|
- u16 my_abs(u16 x1,u16 x2)
- {
- if(x1>x2)return x1-x2;
- else return x2-x1;
- }
- //畫一條粗(broad)線
- //(x1,y1),(x2,y2):線條的起始坐標(biāo)
- //size:線條的粗細(xì)程度
- //color:線條的顏色
- void lcd_draw_bline(u16 x1, u16 y1, u16 x2, u16 y2,u8 size,u16 color)
- {
- u16 t;
- int xerr=0,yerr=0,delta_x,delta_y,distance;
- int incx,incy,uRow,uCol;
- if(x1<size|| x2<size||y1<size|| y2<size)return;
- delta_x=x2-x1; //計算坐標(biāo)增量
- delta_y=y2-y1;
- uRow=x1;
- uCol=y1;
- if(delta_x>0)incx=1; //設(shè)置單步方向
- else if(delta_x==0)incx=0;//垂直線
- else {incx=-1;delta_x=-delta_x;}
- if(delta_y>0)incy=1;
- else if(delta_y==0)incy=0;//水平線
- else{incy=-1;delta_y=-delta_y;}
- if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標(biāo)軸
- else distance=delta_y;
- for(t=0;t<=distance+1;t++ )//畫線輸出
- {
- gui_fill_circle(uRow,uCol,size,color);//畫點
- xerr+=delta_x ;
- yerr+=delta_y ;
- if(xerr>distance)
- {
- xerr-=distance;
- uRow+=incx;
- }
- if(yerr>distance)
- {
- yerr-=distance;
- uCol+=incy;
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- //5個觸控點的顏色
- const u16 POINT_COLOR_TBL[CT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};
- //電容觸摸屏測試函數(shù)
- void ctp_test(void)
- {
- u8 t=0;
- u8 m=1,n=1;
- u16 lastpos[5][2]; //記錄最后一次的數(shù)據(jù)
- while(1)
- {
- tp_dev.scan(0);
- for(t=0;t<CT_MAX_TOUCH;t++)
- {
- if((tp_dev.sta)&(1<<t))
- {
- if(tp_dev.x[t]<lcddev.width&&tp_dev.y[t]<lcddev.height)
- {
- 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))
- {
- LED0=!LED0;
- LED2=!LED2;
- m=!m;
- if(m==0)
- {
- LCD_Fill(160,160,320,320,RED); //紅色表示為 L1亮狀態(tài)
- LCD_ShowString(228,228,24,24,24,"L1");
- }
- else
- {
- LCD_Fill(160,160,320,320,GRAY); //灰色表示為 L1滅狀態(tài)
- LCD_ShowString(228,228,24,24,24,"L1");
- }
- }
-
- 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))
- {
- LED1=!LED1;
- LED3=!LED3;
- n=!n;
- if(n==0)
- {
- LCD_Fill(160,480,320,640,GREEN); //綠色表示為 L2亮狀態(tài)
- LCD_ShowString(228,548,24,24,24,"L2");
- }
- else
- {
- LCD_Fill(160,480,320,640,GRAY); //灰色表示為 L2滅狀態(tài)
- LCD_ShowString(228,548,24,24,24,"L2");
- }
- }
-
- lastpos[t][0]=tp_dev.x[t];
- lastpos[t][1]=tp_dev.y[t];
- }
- }
- else
- lastpos[t][0]=0XFFFF;
- }
-
- delay_ms(5);
- }
- }
- int main(void)
- {
- delay_init(); //延時函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- uart_init(115200); //串口初始化為115200
-
- LED_Init(); //LED端口初始化
- LCD_Init(); //液晶顯示屏LCD初始化
- KEY_Init(); //按鍵KEY初始化
- tp_dev.init(); //觸控屏TP初始化
-
- POINT_COLOR=RED;//設(shè)置字體為紅色
- LCD_ShowString(60,50,200,16,16,"ELITE STM32F1");
- LCD_ShowString(60,70,200,16,16,"TOUCH TEST");
-
- delay_ms(1500);
-
- Man_Machine_Interface();
-
- if(tp_dev.touchtype&0X80)
- ctp_test(); //電容屏測試
- else
- LCD_ShowString(60,50,200,16,16,"Not CP!");
- }
復(fù)制代碼
所有資料51hei提供下載:
觸摸屏控制LED.rar
(370.19 KB, 下載次數(shù): 78)
2018-4-26 17:05 上傳
點擊文件名下載附件
觸摸屏控制LED亮滅 下載積分: 黑幣 -5
|
|