STM32(RFID)階段三(觸屏數字鍵盤)
阿新 • • 發佈:2019-02-02
在階段二中,已經實現了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(); //鍵盤監控
}
以上程式碼,實現數字鍵盤輸入,鍵值部分邏輯程式碼,根據實際需求編寫。