- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "lcd.h"
- #include "key.h"
- #include "touch.h"
- #include "malloc.h"
- #include "usmart.h"
- #include "sdio_sdcard.h"
- #include "w25qxx.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- #include "led.h"
- #include "bjdj.h"
- #include "timer.h"
- #include "usart3.h"
- #include "gizwits_product.h"
- dataPoint_t currentDataPoint;
- u8 wifi_sta=0;
- //協(xié)議初始化
- void Gizwits_Init(void)
- {
- TIM3_Int_Init(9,7199);//1MS系統(tǒng)定時(shí)
- usart3_init(9600);//WIFI初始化
- memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//設(shè)備狀態(tài)結(jié)構(gòu)體初始化
- gizwitsInit();//緩沖區(qū)初始化
- }
- u8** kbd_tbl;
- const u8* kbd_delFR[15]={"密碼",":","清空","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表
- u16 flag=0;
- u8 passnum[3]={4,5,6};
- void Del_FR(void); //前進(jìn)
- void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl);//加載虛擬鍵盤(pán)
- u8 AS608_get_keynum(u16 x,u16 y);//獲取鍵盤(pán)數(shù)
- u16 GET_NUM(void);//獲取數(shù)值
- int main(void)
- {
- u8 key_num;
- int key;
- u16 num,pass_num=258;
- u8 wifi_con=0;//記錄wifi連接狀態(tài) 1:連接 0:斷開(kāi)
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
- delay_init(); //初始化延時(shí)函數(shù)
- uart_init(115200); //初始化串口1波特率為115200,用于支持USMART
- KEY_Init(); //按鍵初始化
- LCD_Init(); //LCD初始化
- BEEP_Init();
- LED_Init(); //LED端口初始化
- Gizwits_Init(); //協(xié)議初始化
- Moto_Init();
- W25QXX_Init(); //初始化W25Q128
- tp_dev.init(); //初始化觸摸屏
- usmart_dev.init(72); //初始化USMART
- my_mem_init(SRAMIN); //初始化內(nèi)部?jī)?nèi)存池
- exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存
- f_mount(fs[1],"1:",1); //掛載FLASH.
- POINT_COLOR=RED;
- while(font_init()) //檢查字庫(kù)
- {
- LCD_ShowString(60,50,240,16,16,"Font Error!");
- delay_ms(200);
- LCD_Fill(60,50,240,66,WHITE);//清除顯示
- delay_ms(200);
- }
- LCD_Clear(WHITE);
- POINT_COLOR=RED;
- Show_Str_Mid(0,0,"STM32F103ZET6",16,240);
- Show_Str_Mid(0,20,"觸屏密碼鎖",16,240);
- Show_Str_Mid(0,140,"請(qǐng)輸入密碼",16,240);
- AS608_load_keyboard(0,170,(u8**)kbd_delFR);//加載虛擬鍵盤(pán)
- flag=0;
- // Show_Str_Mid(0,120,"close",16,240);
-
- while(1)
- {
- num=GET_NUM();//獲取返回的數(shù)值
- if(num==pass_num)
- {
- flag++;
- if(flag==2){flag=0;}
- }
- switch(flag)
- {
- case 0: POINT_COLOR=RED;Show_Str_Mid(0,120,"close",16,240); GPIO_ResetBits(GPIOB,GPIO_Pin_8);delay_ms(50);GPIO_SetBits(GPIOB,GPIO_Pin_8);delay_ms(50);break;
- case 1: POINT_COLOR=RED;Show_Str_Mid(0,120,"-open",16,240); break;
-
- }
- LED1=!LED1;
-
- }
- }
- //加載按鍵界面(尺寸x,y為240*150)
- //x,y:界面起始坐標(biāo)(240*320分辨率的時(shí)候,x必須為0)
- void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl)
- {
- u16 i;
- POINT_COLOR=RED;
- kbd_tbl=kbtbl;
- LCD_Fill(x,y,x+240,y+150,WHITE);
- LCD_DrawRectangle(x,y,x+240,y+150);
- LCD_DrawRectangle(x+80,y,x+160,y+150);
- LCD_DrawRectangle(x,y+30,x+240,y+60);
- LCD_DrawRectangle(x,y+90,x+240,y+120);
- POINT_COLOR=BLUE;
- for(i=0;i<15;i++)
- {
- if(i==1)//按鍵表第2個(gè)‘:’不需要中間顯示
- Show_Str(x+(i%3)*80+2,y+7+30*(i/3),80,30,(u8*)kbd_tbl[i],16,0);
- else
- Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)kbd_tbl[i],16,80);
- }
- }
- //按鍵狀態(tài)設(shè)置
- //x,y:鍵盤(pán)坐標(biāo)
- //key:鍵值(0~14)
- //sta:狀態(tài),0,松開(kāi);1,按下;
- void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
- {
- u16 i=keyx/3,j=keyx%3;
- if(keyx>16)return;
- if(sta &&keyx!=1)//按鍵表第2個(gè)‘:’不需要清除
- LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);
- else if(keyx!=1)
- LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
- if(keyx!=1)//不是‘:’
- Show_Str_Mid(x+j*80,y+7+30*i,(u8*)kbd_tbl[keyx],16,80);
- }
- //得到觸摸屏的輸入
- //x,y:鍵盤(pán)坐標(biāo)
- //返回值:(1~15,對(duì)應(yīng)按鍵表)
- u8 AS608_get_keynum(u16 x,u16 y)
- {
- u16 i,j;
- static u8 key_x=0;//0,沒(méi)有任何按鍵按下
- u8 key=0;
- tp_dev.scan(0);
- if(tp_dev.sta&TP_PRES_DOWN)//觸摸屏被按下
- {
- for(i=0;i<5;i++)
- {
- for(j=0;j<3;j++)
- {
- if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))
- {
- key=i*3+j+1;
- break;
- }
- }
- if(key)
- {
- if(key_x==key)key=0;
- else
- {
- AS608_key_staset(x,y,key_x-1,0);
- key_x=key;
- AS608_key_staset(x,y,key_x-1,1);
- }
- break;
- }
- }
- }else if(key_x)
- {
- AS608_key_staset(x,y,key_x-1,0);
- key_x=0;
- }
- return key;
- }
- //獲取鍵盤(pán)數(shù)值
- u16 GET_NUM(void)
- {
- u8 key_num=0;
- u16 num=0;
- while(1)
- {
- key_num=AS608_get_keynum(0,170);
- if(key_num)
- {
- if(key_num==1)return 0xFFFF;//‘返回’鍵
- if(key_num==3)return 0xFF00;//
- if(key_num>3&&key_num<13&&num<99)//‘1-9’鍵(限制輸入3位數(shù))
- num =num*10+key_num-3;
- if(key_num==13)num =num/10;//‘Del’鍵
- if(key_num==14&&num<99)num =num*10;//‘0’鍵
- if(key_num==15)return num; //‘Enter’鍵
- }
- LCD_ShowNum(80+15,170+7,num,6,16);
-
- }
- }
- void Del_FR(void)
- {
- u16 num;
-
- LCD_Fill(0,100,lcddev.width,160,WHITE);
-
- Show_Str_Mid(0,140,"請(qǐng)輸入密碼",16,240);
- delay_ms(50);
- AS608_load_keyboard(0,170,(u8**)kbd_delFR);
- num=GET_NUM();//獲取返回的數(shù)值
- if(num==15)
- {
- flag++;
- if(flag==2){flag=0;}
- }
-
- switch(flag)
- {
- case 0: Show_Str_Mid(0,120,"close",16,240); break;
- case 1: Show_Str_Mid(0,100,"-open",16,240); break;
-
- }
-
- }
復(fù)制代碼
https://live.csdn.net/v/431091
原理圖: 無(wú)
仿真: 無(wú)
代碼:
觸屏密碼鎖.7z
(1.32 MB, 下載次數(shù): 4)
2024-10-27 03:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|