图8 单个按键和单片机引脚的接线图
按键的抖动如图9所示,有硬件和软件两种去抖动方式,本次设计采用软件去抖动方式。
图9 按键的抖动
单片机应用系统的键盘有行列式键盘和独立式键盘两种结构,本次设计采用独立式键盘结构,P1~P3口的I/O口线直接接4个独立式按键的连接方式均如图10所示,如果用的是P0口,还需外加上拉电阻。当有键按下时,相应的引脚电平将变为低电平,无键按下则为高电平。
图10 独立式键盘结构
3. 软件系统设计
3.1 所用软件的简介
Proteus是Labcenter electronics公司推出的一款工具软件[9],是目前仿真单片机系统最好的EDA工具软件,也是目前唯一一个能够实现对各种处理器实时仿真及测试的一款EDA工具软件,可与Keil及Wave等仿真软件实现联合调试[10],是一个集合电路仿真、PCB设计和虚拟模型仿真三者为一体的功能巨大的设计平台,操作简单易学,支持PIC、8051、ARM、AVR和MSP430多种系列的主流芯片,为我们提供了功能完备且强大的电子产品的设计开发环境[11]。
Keil是一款由Keil公司开发的程序设计软件,专门用于51单片机的开发,可实现编辑,编译和与Proteus实现联合调试的功能,应用非常的广泛。支持C语言和汇编语言,编译连接生成目标文件,调试生成可直接用于硬件仿真的HEX文件。Keil功能强大,工作环境为Windows集成开发环境。本次设计采用Keil进行51单片机系统的设计。
3.2 系统程序流程图
如图11所示,为系统的程序流程图。对于系统功能的实现,要先对LCD1602进行初始化,然后进入循环:先判断SWITCHK是否按下,有则执行温度数据的处理与显示子程序,无则继续判断K0是否按下,若K0没按下则返回循环的入口处,进行下一轮的循环,若K0按下则继续判断K1和K2并根据结果执行相应的时间数据的矫正子程序或者进行下一轮循环,这样不断循环,从而实现预定的功能。
图11 系统程序流程图
3.3 系统各个模块的设计
包括主程序、时间数据采集和处理模块、温度数据采集和处理模块、液晶显示模块和键盘扫描及处理模块[12]。
3.3.1 主程序
先对LCD1602进行初始化,然后进入循环:判断SWITCHK键,若按下则执行温度显示程序,没有按下则执行时间显示程序。执行完毕都返回循环入口处继续下一轮循环。
3.3.2 温度数据的采集和处理模块
DS18B20的内部包含9个字节的RAM和64位的ROM,根据DS18B20的通信协议,每次对器件进行读写操作时,必须严格按照DS18B20的时序要求。主机控制DS18B20来完成温度转换的话必须经过三个步骤:每次读写前都要对DS18B20进行复位,复位成功后发送一条ROM指令,然后发送RAM指令,然后才能对DS18B20进行预定的操作[13]。温度采集的流程图如图12所示。
图12 温度采集流程图
3.3.3 液晶显示模块
要在LCD1602液晶显示模块的某一个位置显示某一个符号,只需将待显示符号对应的ASCII码存入到DDRAM中相对应的位置[14]。如图13所示为LCD1602实际显示位置与显示地址之间的对应关系。
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F AT89C52基于单片机的趣味闹钟设计+电路原理图+源程序(3):http://www.751com.cn/zidonghua/lunwen_811.html