单片机系统设计实验报告
数
字
时
钟
组员:马 明 200704015024
龙志丹 200704015027
一、实验目的:
通过设计一个自动报时数字钟,提高单片机系统综合应用能力,了解单片机工作原理及开
发流程,熟练掌握 51 单片机开发环境及下载软件的应用。
二、实验内容:
1、使用数码管的低六位分别显示时、分秒。使用第七位指示上午下午,符号‘A’表示上午,
符号‘P’表示下午。
2、可以通过按键分别调整小时位和分钟位。
3、整点报时:到达整点时以第八位数码管闪烁的方式报时,使用‘8’作为闪烁的内容,闪
烁频率为 2Hz,持续时间从 xx.00.00 到 xx.00.05。
4、闹钟功能:在以上基础上考虑增加定时闹铃功能。
5、12/24 小时制转换:通过一个按键设置时钟显示模式为 12 小时或 24 小时制。
6、万年历:增加万年历功能,可以按键选择或循环显示年、月、日、星期。
7、可以通过按键调整年、月、日、星期。
8、采用 12864 图形液晶进行显示。液晶资料见 LCD12864.PDF。
三、实验环境:
1、计算机
2、单片机开发软件、下载工具
3、单片机最小系统实验板
四、实验原理及程序流程图:
(一)实验原理:
最小系统实验板原理:
本实验选用电子技术综合实验箱中的 MCU 模块,该模块以 51 系列单片机为核心,
因此选取的单片机为 AT89S52。实验时,将 5V 的电源接于 MCU 模块上,即可进行编程
下载。
系统的总体结构框图如下:
硬件的选用:
本实验显示功能的实现需要用到数码管,由于最多要显示日期,所以最少需
要八位数码管;
数字时钟还需要一些控制按键,我们的设计中用到了 9 个按键分别用于控制
数字时钟的显示模式、设定时间以及秒表等功能,理论上讲一个 3*3 的矩阵键盘
就够用了,但是由于实验板上已经用了 8*2 的键盘,所以我们也未作改动,沿用
之;
单片机的选择上,我们选用了 89S52 型单片机,属于比较古老的 C51 系列。
选它的原因是根据这次实验的需求,该系列单片机有足够的资源和精度,并且价
格相对便宜很多;
晶振原来是 12MHz 的,由于我们考虑到秒表需要的精度,所以换成了 24MHz
的。
➢ 8 位 7 段码数码管
7 段码数码管为连四位共阳极显示器,分为左右各四位,如下图所示。
本系统中采用硬件实现地址译码,每一位数码管均分配一个独立地址,操
作控制简单。地址分配为:
LED1:A000H、 LED2:A001H、 LED3:A002H、 LED4:A003H
LED5:A004H、 LED6:A005H、 LED7:A006H、 LED8:A007H
8 位 7 段
码数码管
ISP 编程
接口
复位按键
2*8 键盘
89S52
单
片
机
24MHz 晶
振
电源指示
灯
从图中大家可以看出,这块实验板上用的是动态数码管显示设计,这
样设计可以使电路简化,并且只要三路数据输入就可以控制八个数码管。
但同时这也导致了数码管操作上的难度增加,并且由于八个数码管分时使
用电源,导致了显示亮度不如静态的数码管。
注意到每个数码管都配了一个三极管用于放大电流,以确保数码管显
示的时候能够导通。同时还需要保护电阻来限制流入数码管的电流避免烧
坏数码管。
➢ 2*8 键盘
MCU 模块中 2 行*8 列键盘采用查询方式读取按键值,分配的物理地址为
CS2:A100H。在读取按键时需要通过 P13 和 P14 区分按键响应所在行,通过
软件判断按键响应所在列。电路结构图如下:
当有一个按键按下的时候,例如 0x00 按下,扫描到第一列时,第一位
输入接收到高电平,这样就完成了对按键的扫描与识别。我们这次的硬件设
计比较简单,防抖颤功能在软件中实现。
➢ 译码电路结构
为了减少芯片的使用数量和降低 PCB 板布线的复杂度,本系统使用小规模可
编程逻辑器件 GAL 代替 74 系列芯片实现译码电路。具体硬件如下图:
逻辑表达式达式如下:
LED_CS =
(A==0xA0)&(! );
KEY_CS = !((A==0Xa1)&(! ));
其中:
A 为高 8 位地址 A ;
与 为读写控制信号;
LED_CS 为数码管显示片选信号,高电平有
效,物理地址范围为 0xA000——0xA0FF,因为
MCU 模块上只有八个数码显示器,实际只用到
0xA000——0xA007 八个地址;
KEY_CS 为键盘片选信号,低电平有效,物
理地址范围为 0xA100——0xA1FF,实际地址禁
用到了 0xA100;
__
WR
__
RD
8..15
__
WR
__
RD