基于Proteus和Keil的数字钟的设计与实现
2019-10-11严敏
严 敏
(江苏旅游职业学院, 江苏 扬州 225127)
0 引言
智能数字钟以其显示直观、计时准确、经久耐用等一系列优点在我们的日常生活中得到了非常广泛的应用[1-2]。本文以AT89C51 单片机为主控制器设计智能数字钟,利用8255 扩展并行I/O 口,作为键盘和显示的接口芯片。 该数字钟具有自动计时、校准和定时启闹等功能。 通过Proteus 单片机仿真软件和Keil 集成开发环境的关联使用, 反复调试,直至成功。
1 系统硬件设计
1.1 设计总体结构
本次设计的智能数字钟系统的硬件电路核心是AT89C51 单片机, 外围设备有6 位LED 数码管显示模块、4×3 键盘模块以及闹钟模块等组成,采用可编程外围并行接口8255 扩展模块作为键盘和显示的接口电路, 大大解决了AT89C51 单片机只有32 个I/O 端口的局限问题, 其设计总体结构如图1所示。
图1 智能数字钟的系统总体结构
1.2 8255 扩展模块
8255A 是一种通用可编程并行I/O 口扩展器件,它有PA、PB、PC 三个8 位的并行I/O 口,可扩展多个外围设备, 有效解决单片机I/O 口资源紧张的问题。8255A 与AT89C51 完全兼容、硬件接口设计简单。本次电路设计时,8255A 的RST 与单片机的复位信号RST 合用,连接在一起。8255A 的WR、RD 分别与单片机的WR、RD 相连接,8255A 的片选信号CS 与单片机的P2.7 相连接,8255A 的通道选择地址A1、A0 与单片机的P2.6、P2.5 相连接,这样,8255A 扩展单元PA 口、PB 口、PC 口和控制寄存器的地址分别为0x1FFF、0x3FFF、0x5FFF、0x7FFF。利用8255 的A口作为6 位LED 数码管显示器的位选口, 其中,PA0-PA5 分别对应于6 位数码管的位选口w0-w5;利用8255 的B 口作为6 位LED 数码管显示器的段选口,PB0-PB7 分别对应于6 位数码管的段选口A、B、C、D、E、F、G、DP;利用8255 的C 口低3 位作为键盘的行输入口, 对应0-2 行,8255 的A 口同时用作键盘的列扫描口;8255A 的D0-D7 数据总线和单片机的数据总线P0 相连,如图2 所示。
图2 8255 电路原理
1.3 LED 数码管显示模块
由于本设计使用共阴极数码管,8255 的PA 口外接了增加驱动能力的74LS04 反相器,因此PA 口输出高电平选中相应数码管的位, 而PB 口输出高电平点亮相应数码管的段,如图3 所示。
图3 LED 数码管显示电路原理
1.4 键盘模块
按键模块采用4×3 行列式键盘,组成4×3=12 个按键,用于闹铃设置和时间校准设置,其中10 个按键作为0-9 十个数字键,一个按键作为校时键,一个按键作为闹铃键。 4×3 键盘的行线分别连接8255 扩展模块的PC.0,PC.1,PC.2;列线分别连接8255 扩展模块的PA.0,PA.1,PA.2,PA.3,如图4 所示。
图4 4×3 键盘电路原理
1.5 闹钟模块
闹钟电路直接连接单片机的P1.0 端口,采用三极管驱动蜂鸣器实现。单片机的P1.0 口输出低电平驱动蜂鸣器鸣叫来启动闹钟。 当P1.0 口输出低电平,三极管导通从而闹钟启动;相反,当P1.0 口输出高电平,三极管截止不启闹,如图5 所示。
图5 闹钟电路原理
2 系统软件设计
单片机程序主要完成的控制功能包括:LED 数码管显示程序设计、8255A 驱动程序设计、 按键扫描程序设计、 定时器的定时中断控制程序等等,主程序流程图如图6 所示。
图6 系统主程序流程
2.1 8255A 驱动程序设计
8255A 通过软件编程可以设置PA、PB、PC 口的工作方式,将方式控制字写入8255A 的控制字寄存器, 控制命令的格式及其每位的定义如图7 所示。本次设计,设PA 口工作于方式0,输出;PB 口工作于方式0,输出;PC4-PC7 为输入,PC0-PC3 为输入,这样,8255A 的方式控制字为10001001B=89H。8255A 的控制字在单片机相应的初始化程序中设置即可。 单片机上电执行完初始化程序后,8255A即按设定的工作方式进行操作。
图7 8255A 控制命令字格式及定义
#include
#define PORTA XBYTE[0x1fff] //8255PA 口的地址
#define PORTB XBYTE [0x3fff] //8255PB 口的地址
#define PORTC XBYTE [0x5fff] //8255PC 口的地址
#define PORT XBYTE[0x7fff] //8255 控制寄存器的地址
void main(void)
{……
PORT =0x89; //8255 初始化}
2.2 LED 数码管显示程序
显示模块主要完成6 位LED 数码管的动态显示,部分代码如下所示。
2.3 键盘扫描处理程序
判断是否有按键按下,并求取键号,确定究竟是哪一个按键按下,并进入相应的键处理程序。 其部分代码设计如下所示:
2.4 闹钟程序设计
3 仿真与结果分析
在Keil 集成开发环境中编写好系统程序,编译、调试,生产十六进制HEX 文件,在Proteus 硬件仿真软件中将其加载到单片机芯片中,就可以看到智能数字钟的仿真运行效果。 系统上电后,自动进入时钟显示,从00:00:00 开始自动计时,此时按下校时键,单片机内部定时器停止计时,进入时间设定状态,时、分、秒的十位、个位分别对应6 个LED数码管,校准时间时,它们相对应的LED 数码管会依次闪烁显示,等待输入,此时按下0-9 数字键分别进行设置,直至6 位设置完毕,再次按下校时键,则退出设置。 按下闹铃键,单片机内部定时器继续计时,进入闹钟设置状态,闹铃时间只设置时、分,数码管初始显示12:00:--,按下0-9 数字键依次设置闹铃的时、分的十位、个位,闹铃时间设置完毕,数码管恢复计时时间显示,一旦计时时间到达闹铃时间时,启动闹钟鸣叫,再次按下闹铃键,则闹钟停止。
4 结束语
智能数字钟在日常生活中处处可见, 本文以AT89C51 单片机为系统控制核心, 使用8255 扩展外围键盘、显示等设备,在Proteus 仿真软件中设计系统硬件电路,在Keil 开发环境中编写程序,反复调试,直至成功。 Proteus 和Keil 两款软件的联合使用一方面降低了单片机系统的设计成本,缩短了开发周期,极大提高了效率,另一方面对单片机课程的课堂教学演示和实际系统设计都具有很大的参考价值[3-6]。