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

发布者:科技狂人最新更新时间:2019-02-15 来源: eefocus关键字: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]

            {   

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

}


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

关键字:STM32  RFID  触屏数字键盘 引用地址:STM32(RFID)阶段三(触屏数字键盘)

上一篇:STM32F103系列实战之DMA控制器
下一篇:STM32(RFID)阶段二(读序列,修改金额)

推荐阅读最新更新时间:2024-03-16 16:24

中钢导入RFID运输系统应用成为全球钢铁业创举
  钢铁龙头中钢创新应用RFID     中钢公司成立于“民国60年”,原为国营事业,于“民国84”年改制为民营事业,是台湾最大钢铁制造公司,钢品的市占率超过50%。为加速提升营运竞争力,中钢公司不断追求更先进的生产技术,让产品品质与生产效率提升,同时让时间与资源更能有效被利用,实现中钢公司落实绩效的经营理念,以达成公司企业目标。    钢铝研发处林长春正研究员指出,中钢公司高层决策者于5年前得知RFID该项新技术发展,对于导入此项技术有着极为正面的想法。在高层决策者认同的助力下,评估公司导入RFID应具有经济效益,进一步可使RFID的应用达到公司期望的成效目标,因此中钢公司决定投入预算研发RFID技术与应用。    目前中
[网络通信]
STM32单片机ISP下载的方法解析
STM32支持仿真器和串口下载程序。将要介绍的内容,属于串口下载,即我们通常说的ISP下载。 手动ISP下载程序,我们已经知道了,控制BOOT0引脚实现。STM32上电,会自动检测BOOT0引脚是什么电平,如果是高电平,等待用户下载程序;如果是低电平,运行用户之前下载到单片机的程序。所以我们需要把BOOT0引脚引出,然后控制其接地或接VCC来下载程序或者运行程序。在调试过程中,我们需要不断的控制BOOT0,非常麻烦。那么,自动ISP就该出场了。 自动ISP,把BOOT0与地直接连接,那么每次上电就会运行程序,而且只要点击电脑上的“下载”按钮,就开始下载程序,下载完程序,就开始执行。实现此目的,需要借助串口握手信号DTR和R
[单片机]
<font color='red'>STM32</font>单片机ISP下载的方法解析
STM32 NVIC学习
阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。所有程序中必须的。 用法: void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure;//中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
[单片机]
基于STM32定时器实现毫秒延时函数
STM32定时器包含基本定时器、通用定时器和高级定时器,其中TIM6和TIM7是STM32当中的基本定时器,作为初学者,先从最基本的学起最容易,下面我们用这个定时器实现毫秒延时函数来入门STM32定时器的应用。 学习单片机,就是学习使用它的寄存器。即便你用库函数,寄存器也是必须要学习的。 TIM6 TIM7的寄存器如下所示: 先略览一下寄存器,CR1和CR1是控制寄存器,SR是状态寄存器,ARR就是溢出值寄存器,CNT就是计数器的当前值,PSC是预分频寄存器。预分频寄存器?听的傻眼了吧,前面几个个寄存器听的还能理解,一听到预分频寄存器,好像不知道是干嘛用的。瑞生来给你解释一下吧,你可以给预分频寄存器里面写一个从0~6
[单片机]
基于<font color='red'>STM32</font>定时器实现毫秒延时函数
STM32之独立看门狗(IWDG)和窗体看门狗(WWDG)
  之前有很风靡的游戏,名字叫《看门狗》。该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden Pearce(主角)是一名精通黑客技术的高手,当时的世界是处于所有物品都被置了电子设备控制,整个城市都在依赖着他们,主人公决定利用自己的技术为这个世界惩奸除恶。        这个游戏以极高的自由度、出色的游戏质量与丰富的游戏内容被业界公认为开启次世代游戏的大门之作,该游戏被IGN评为年度最佳射击游戏(下载地址: http://down.ali213.net/pcgame/WatchDogs.html 有机会一定玩玩。) 二 开门见山:     下面言归正传,在工作中用的STM32需要使用看
[单片机]
<font color='red'>STM32</font>之独立看门狗(IWDG)和窗体看门狗(WWDG)
基于RFID的Smart ODN方案
摘要:介绍了上海贝尔基于RFID技术的SmartODN解决方案的系统结构和原理。详细阐述了上海贝尔的SmartODN解决方案如何使ODN网络的运营维护智能化,并从而提高ODN网络的维护效率,降低运营成本。 关键词:智能ODN RFID EID 触针 平板技术 引言 近年来,伴随着电信业务向综合化、数字化、智能化、宽带化和个人化方向的发展,高带宽、高传输质量的FTTx网络在国内外得到了快速发展。作为占FTTx网络建设投资达50%-70%的光纤分配网,ODN网络的建设和维护越来越重要。 由于ODN网络产品基于无源的光网络设备,其先天存在的管理手段较原始,故障定位手段缺乏等问题给其维护和运营带来了很大不便,严重困
[网络通信]
基于<font color='red'>RFID</font>的Smart ODN方案
STM32学习笔记:外部中断EXTI的使用
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字
[单片机]
STM32单片机ADC库函数的定义和使用方法
ADC的基本概念希望各位网友查阅相应的手册,上面对ADC有比较详尽的介绍,包括误差的分析和消除。这里主要介绍ADC的基本库函数的定义和使用。 1.ADC_DeInit函数的功能是将外设ADCx的全部寄存器重设为默认值。 ADC_DeInit(ADC2); 2.ADC_Init函数的功能是根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器。其中ADC_InitTypeDef定义在stm32f10x_adc.h中。其结构体如下所示: typedef struct { u32 ADC_Mode;//可以设置ADC_Mode FunctionalState ADC_ScanConvMode;//规定了模数转换工
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved