武汉理工大学《单片机原理及应用》课程设计报告书
基于单片机的数字钟设计
1.设计目的与要求
进行电路硬件设计和系统软件编程,以及仿真调试或制作。一般 1~2 人一组,
每组完成的内容不能雷同。
选择设计基于单片机的时钟显示器,数字钟是一个将“时”、“分”、“秒”显
示计时装置。它的计时周期为 24 小时,显示满刻度为 23 时 59 分 59 秒 99 毫秒,
另外应有校时功能。
实现的功能:在数字钟正常进行显示时,其显示周期为 00:00:00 至 23:59:59,
其中有五个按键,按下“暂停”键时钟停止走动,按下“开始”键时钟开始走动,
按下“秒设置”时钟秒位自加 1,加至 60 时向分位进 1,按下“分设置”时钟分
位自加 1,加至 60 时向时位进 1,按下“时设置”时钟秒位自加 1,加至 24 时
显示 00。
2.系统原理分析
系统设计中用到 89 C51 单片机的部分功能:包括内部定时器,键盘扩展,
程序中断, 串口通信等。用一个六位的共阴极七段显示器,可通过一个输入/输
出口作为显示器数据发送端;另一个输入/输出口的六位作为显示器各位的片选
信号,另一个输入/输出口作为键盘扩展口使用。系统原理图如图 1 所示。
P2.0-7
数码显示器
单
片
机
P3.0-5
按键
P1.0-4
图 1 系统原理图
1
武汉理工大学《单片机原理及应用》课程设计报告书
图 2 数字钟仿真图
3.硬件介绍
AT89C51:芯片共有 40 个引脚,引脚的排列顺序为从靠芯片的缺口左边
那列逆时针数起,依次为 1,2,3,4。。。40,其中芯片的 1 脚顶上有一个凹点。
在单片机的 40 个引脚中,电源引脚 2 根,外接晶体振荡器引脚 2 根,控制引脚
4 根以及 4 组 8 为可编程 I/O 引脚 32 根。
主要特性:与 MCS-51 兼容;4K 字节可编程闪烁存储器;寿命:1000 写/擦
循环;数据保留时间;10 年;·全静态工作:0Hz-24Hz;·三级程序存储器锁
定;·128*8 位内部 RAM;·32 可编程 I/O 线;·两个 16 位定时器/计数器;·5
个中断源;可编程串行通道;·低功耗的闲置和掉电模式;·片内振荡器和时钟
电路。
主要管脚说明: P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收
8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外
部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口
作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。
2
武汉理工大学《单片机原理及应用》课程设计报告书
P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接
收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1
口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH
编程和校验时,P1 口作为第八位地址接收。
P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,
输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作
为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于
内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行
存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,
当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。
P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。
P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL
门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输
入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。
六位共阴级数码管:cc 表示共阴极的 ac 是共阳极的设计中所用的是 7
段六位共阴级数码管,如果要实现动态显示必须位码(1-6)轮流通低电位,也就是
片选,段码控制数码管的显示. 0-b,1-g,2-a,3-f,4-c,5-e,6-h,7-d。
+5V
g
f
GND
a b
f
e
a
g
b
c
dp
d ·
de
c
GND
(a)
dp
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
(b)
图 3 数码管显示原理图
如图 3 数码管显示原理图所示,使用 LED 显示器时,要注意是共阴还是共阳,
要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编
3
武汉理工大学《单片机原理及应用》课程设计报告书
码。七段数码管加上一个小数点,共计 8 段。因此为 LED 显示器提供的编码正好
是一个字节。我们用的是共阴 LED 显示器,根据电路连接图显示 16 进制数的编
码已列在下表。
0x3f
0
, 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
5
1
2
3
4
7
8
9
6
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
B
A
0x39 , 0x5e , 0x79 , 0x71 , 0x00
C
F 无显示
D
E
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪
一位数码管有效,由另一位控制显示码值。选亮数码管采用动态扫描显示。所谓
动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉
和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮
度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。我
们这里正是利用的数码管动态显示来完成显示功能。
4.软件实现与流程
4.1 主程序
由于系统的主要功能都是由子程序来完成的,主程序基本上没什么事可做,
只是利用调用子程序的方式实现的,主程序流程图如图 3 所示。
4
武汉理工大学《单片机原理及应用》课程设计报告书
开始
初始化
调用显示子程序
调用按键操作子程序
Y
1?
结束
N
图 3 主程序流程图
4.2 数据的显示程序
时钟数字显示涉及到两个操作:发数据和改片选信号。先发片选,再发数据。
用延时程序进行一个消影操作,这样就很好地解决了重影问题。这样做的关键在
于,在极短的一段时间内让显示器都不亮,等一切准备工作都做好了以后再发数
据,只要显示频率足够快,是看不出显示器有闪烁的。代码如下:
shi=hour/10;
ge=hour%10;
P3=0xfe;
P2=table1[shi];
delay(5);
P3=0xfd;
P2=table1[ge];
dp=1;
5
武汉理工大学《单片机原理及应用》课程设计报告书
delay(5);
这段显示程序流程图如图 4:
开始
求时/分/秒的个位、十位
显示时/分/秒个位
片选
显示时/分/秒十位
延时消影
县市小数点
结束
图 4 数据显示流程图
4.3 键盘响应程序
键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生
按键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,
在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的,我们这里用
的就是非编码键盘。如图 4 键盘图所示,当按钮按下时;端口会变成低电平,我们设计一段
扫描程序来判断那个端口是低电平来判断是否有按键按下。
键盘处理程序流程相对简单,只是简单的判键与处理。当设置按键按下为低
电平时,对应位数加 1 至满进制。
6
武汉理工大学《单片机原理及应用》课程设计报告书
开始
检测“暂停”按键
Set1=0?
Y
标记为 1
按键按下?
秒/分/时自增 1
至满进制
向高位增 1
结束
N
N
N
图 5 按键响应程序流程图
7
武汉理工大学《单片机原理及应用》课程设计报告书
5 收获、小结和体会
通过这次单片机设计,我加深了对课本专业知识的理解,平常都是理论知识
的学习,在此次课程设计中,真正做到了自己查阅资料、完成一个基本电路的设
计。在此次的数字钟设计过程中,我更进一步地熟悉了芯片的结构及掌握了各芯
片的工作原理和其具体的使用方法。当然,在这个过程中我也遇到了困难,通过
查阅资料,相互讨论,我准确地找出错误所在并及时纠正了,这也是我最大的收
获,使自己的实验动手能力有了进一步的提高,让我对以后的工作学习有了更大
的信心。
回顾起此次设计,感慨颇多,从理论到实践,我学到很多很多的东西,不仅
巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的内容。通过这
次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够
的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的
知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各
种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知
识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识
重新温故,巩固了所学的知识。
此次的课程设计,还让我知道了最重要的是心态,在你拿到题目时会觉得困
难,但是只要充满信心,脚踏实地,就肯定会完成的。
8