1. 程式人生 > >STM32(RFID)階段三(觸屏數字鍵盤)

STM32(RFID)階段三(觸屏數字鍵盤)

      在階段二中,已經實現了RFID讀寫器與主控板的相互通訊,傳送和接收資料串。這是最核心的一部分。不過,之前金額的改變是固定100,現在開始任意數值的增減和任意數值初始化。這部分主要跟讀寫器的通訊協議有關,不同的讀寫器可能不一樣,但是程式碼思路都是差不多的。

      為了實現任意數字的輸入,首先要有一個鍵盤,在此,我用STM32TFTLCD觸屏做了一個觸控鍵盤(電阻屏,豎屏)。要先引入touch.c ,24cxx.c,myiic.c檔案。

觸屏程式碼

#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "key.h"
#include "touch.h" int digital=0;//鍵值 void Load_Drow_Dialog(void)//數字鍵盤畫屏 { LCD_Clear(WHITE);//清屏 POINT_COLOR=RED; LCD_ShowString(60,30,120,24,24,"CardID:"); LCD_ShowString(60,60,200,24,24,"money :"); LCD_ShowString(60,90,200,24,24,"count :"); //LCD_ShowString(60,120,200,24,24,"flag :"); POINT_COLOR=BLUE;//設定字型為藍色
LCD_ShowxNum(30,170,1,1,24,0); LCD_ShowxNum(90,170,2,1,24,0); LCD_ShowxNum(150,170,3,1,24,0); LCD_ShowString(210,170,1,24,24,"C");//充值 LCD_ShowxNum(30,210,4,1,24,0); LCD_ShowxNum(90,210,5,1,24,0); LCD_ShowxNum(150,210,6,1,24,0); LCD_ShowString(210,210,1,24,24,"K");//扣費 LCD_ShowxNum(30,250,7
,1,24,0); LCD_ShowxNum(90,250,8,1,24,0); LCD_ShowxNum(150,250,9,1,24,0); LCD_ShowString(210,250,1,24,24,"D");//確定 //LCD_ShowxNum(30,200,1,1,16,0); LCD_ShowxNum(90,290,0,1,24,0); //LCD_ShowxNum(150,200,3,1,16,0); LCD_ShowString(210,290,1,24,24,"J");//校準 // POINT_COLOR=RED;//設定畫筆藍色 LCD_DrawLine(0,315,240,315); LCD_DrawLine(0,280,240,280); LCD_DrawLine(0,240,240,240); LCD_DrawLine(0,200,240,200); LCD_DrawLine(0,160,240,160); LCD_DrawLine(60,160,60,315); LCD_DrawLine(120,160,120,315); LCD_DrawLine(180,160,180,315); } void anjian(void) { //......根據鍵值,編寫邏輯功能 } void rtp_test(void) { u8 key; while(1) { Receive_One(); LCD_ShowString(150,35,200,16,16,card_id); LCD_ShowxNum(152,60,money,4,24,0); LCD_ShowxNum(152,90,num,4,24,0); //LCD_ShowxNum(190,120,flag,1,24,0); delay_ms(10); key=KEY_Scan(0);//觸屏校準鍵 tp_dev.scan(0); //掃描觸控式螢幕.0,螢幕掃描;1,物理座標; if(tp_dev.sta&TP_PRES_DOWN) //觸控式螢幕被按下 { if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height) { if(tp_dev.x[0]>0&&tp_dev.x[0]<60){ if(tp_dev.y[0]>160&&tp_dev.y[0]<200){ digital=1; }else if(tp_dev.y[0]>200&&tp_dev.y[0]<240){digital=4; }else if(tp_dev.y[0]>240&&tp_dev.y[0]<280){digital=7; } //else if(tp_dev.y[0]>280&&tp_dev.y[0]<320){} }else if(tp_dev.x[0]>60&&tp_dev.x[0]<120){ if(tp_dev.y[0]>160&&tp_dev.y[0]<200){ digital=2; }else if(tp_dev.y[0]>200&&tp_dev.y[0]<240){digital=5; }else if(tp_dev.y[0]>240&&tp_dev.y[0]<280){digital=8; }else if(tp_dev.y[0]>280&&tp_dev.y[0]<320){digital=0; } }else if(tp_dev.x[0]>120&&tp_dev.x[0]<180){ if(tp_dev.y[0]>160&&tp_dev.y[0]<200){ digital=3; }else if(tp_dev.y[0]>200&&tp_dev.y[0]<240){digital=6; }else if(tp_dev.y[0]>240&&tp_dev.y[0]<280){digital=9; } //else if(tp_dev.y[0]>280&&tp_dev.y[0]<320){} }else if(tp_dev.x[0]>180&&tp_dev.x[0]<240){ if(tp_dev.y[0]>160&&tp_dev.y[0]<200){ digital=11; }else if(tp_dev.y[0]>200&&tp_dev.y[0]<240){digital=12; }else if(tp_dev.y[0]>240&&tp_dev.y[0]<280){digital=13; }else if(tp_dev.y[0]>280&&tp_dev.y[0]<320){digital=14; } } } anjian(); } delay_ms(50); if(key==WKUP_PRES) //KEY0按下,則執行校準程式 { LCD_Clear(WHITE);//清屏 TP_Adjust(); //螢幕校準 TP_Save_Adjdata(); Load_Drow_Dialog(); } } } int main(void) { delay_init(); //延時函式初始化 LCD_Init(); KEY_Init(); //按鍵初始化 tp_dev.init(); //觸控式螢幕初始化touch.c Load_Drow_Dialog(); //數字鍵盤 rtp_test(); //鍵盤監控 }

以上程式碼,實現數字鍵盤輸入,鍵值部分邏輯程式碼,根據實際需求編寫。