STM32(RFID)阶段三(触屏数字键盘)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tian43/article/details/80349407

      在阶段二中,已经实现了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();             //键盘监控
}

以上代码,实现数字键盘输入,键值部分逻辑代码,根据实际需求编写。

阅读更多

没有更多推荐了,返回首页