[导读]
本仪器的程序主要由键盘、显示程序、AT24C01A读写程序、信号产生程序等部分组成。以下对部分功能作一些分析。一、键盘程序 本仪器需要调整的数值范围较大,因此,“增加”和“减少”键必须具有快速连
本文引用地址: http://www.21ic.com/app/mcu/201806/761698.htm
本仪器的程序主要由键盘、显示程序、AT24C01A读写程序、信号产生程序等部分组成。以下对部分功能作一些分析。一、键盘程序 本仪器需要调整的数值范围较大,因此,“增加”和“减少”键必须具有快速连加和快速连减的功能,否则调整速度太慢。这种键盘可以用多种方法来实现,关键在于设计一个正确的程序结构,图1是一种实现方法的流程图。图1 流程图 程序工作时,不断地扫描键盘,第一次扫描到有键按下后如常规键盘一样,进行键值处理,处理完毕,不等待键盘释放,直接退出键盘程序。当又一次执行到键盘程序,如果检测到键还被按着,就不再直接去键值处理程序,而是将一个计数器加1,直接返回主程序,如此循环,直到计数到一个定值(如500,表示键盘程序已被执行了500次),如果键还被按着,说明用户有连加(或连减)要求,程序即将计数器减去一个数值(如30),然后进行键值处理。这样,以后键盘程序每执行30次,就执行一次键值处进程序,实现了第一次启动时间较长,以后快速连续动作的要求。如果检测到键已被释放,则清除所有标志,将计数器清零,准备下一次按键处理。 程序开始时定义了两个常量:Qdsj和Ljsj,如下所示const uintQdsj=500;/*与首次启动连加(减)功能的时间有关*/const uintLjsj=30;/*与连加(减)的速度有关*/ 这两个常量与第一次启动及连加、减的速度有关,具体数值应根据实际情况试验后确定。下面是部分键处理程序,注意其中这两个变量的使用。voidKey()/*键处理*/{……if(!KeyValue){…无键按下,清除一切标志退出}if(KeyMark)/*第一次检测到按键吗?*/{KeyCounter++;/*不是第一次(KeyMark已是1了)*/if(Qdsj==KeyCounter) /*连续按着已有Qdsj次了*/{KeyCounter-=Ljsj; /*减去Ljsj次*/ KeyProcess(KeyValue,1);/*键值处理*
查看评论 回复
嵌入式交流网主页 >
MCU >
单片机技术应用 > 全数字信号发生器的软件设计 -
围观()
|