单片机
返回首页

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

2019-05-27 来源:eefocus

      在阶段二中,已经实现了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]            {   

                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();             //键盘监控

}


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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章