单片机数字时钟课程设计报告Word下载.docx
《单片机数字时钟课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟课程设计报告Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
4k字节可重擦写Flash闪速存储器
1000次擦写周期
·
全静态操作:
0Hz-24MHz
三级加密程序存储器
128×
8字节内部RAM
32个可编程I/O口线
2个16位定时/计数器
2.显示方案
由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济.LED有共阴极和共阳极两种.如图2.2所示.
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压.一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管.当在某段发光二极管施加一定的正向电压时,该段笔划即亮;
不加电压则暗.为了保护各段LED不被损坏,需外加限流电阻.
图2.2LED数码管结构原理图
众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动.本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性.所谓软件译码,即由单片机软件完成从数字到显示码的转换.从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节.各段码位与显示段的对应关系如表2.2.
表2.2各段码位的对应关系
段码位
D7
D6
D5
D4
D3
D2
D1
D0
显示段
dp
g
f
e
d
c
b
a
需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系.通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表1所示,表2.3为用于LED数码管显示的十六进制数和空白字符与P的显示段码.
根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管.将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符.例如:
当P0口输出的段码为11000000,数码管显示的字符为0.
表2.3LED显示段码
字型
共阳极段码
共阴极段码
C0H
3FH
9
90H
6FH
1
F9H
06H
A
88H
77H
2
A4H
5BH
B
83H
7CH
3
BOH
4FH
C
C6H
39H
4
99H
66H
D
A1H
5EH
5
92H
6DH
E
86H
79H
6
82H
7DH
F
84H
71H
7
F8H
07H
空白
FFH
00H
8
80H
7FH
P
8CH
73H
注:
(1)本表所列各字符的显示段码均为小数点不亮的情况.
(2)“空白”字符即没有任何显示.
数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式.为节省端口及降低功耗,本系统采用动态扫描显示方式.动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;
而每一位的公共端,即LED数码管的“位控”,则由P3口控制.这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码.在这一瞬时,只有这一位在显示,其他几位则暗.在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态.
第3章软件设计
1.主程序
主程序功能主要是初始化、正常现实时间和判断功能转换键.流程图如图3.1所示.
图3.1主程序流程图
2.定时器T0中断服务程序
定时器T0用于时间计时.定时溢出中断周期可设为50ms,中断进入后,时钟计时累计20次(即1s)时,对秒计数单元进行加1操作.时钟计数单元在定义的6个单元70H~75H中,70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据.最大计时值为23小时59分59秒.在计数单元中采用十进制BCD码计数,秒、分、时之间满60进位.
3.显示子程序
数码管显示的数据放在内存单元70H~75H中,其中70H~71H存放秒数据,72H~73H]存放分数据,74H~75H存放时数据,每一单元内均为十进制BCD码.由于采用软件动态扫描实现数据显示功能,显示用的十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出70H~75H中的某一地址中的数据,然后查表得对应的显示段码从P0口输出,P2口将对应的数码管位选中供电,就能显示该地址单元的数据值.
4.定时器T1中断服务程序
进行时间调整是,正在被调整的时间以闪烁的形式表现,定时器T1用于产生闪烁的时间间隔,每隔0.3s闪烁一次.
5.调时功能程序
通过按键K1来选择设置“小时”、“分钟”和“秒”.
通过“加”和“减”按键(K2、K3)来调整时间
6.延时程序
因为系统是动态显示,为了确保系统在有效显示时间范围内必须执行显示程序,所以使用延时程序.
7.结论
这次课程设计项目虽然是最简单的数字时钟设计,但用的技术和知识是源于课本又远远高于课本的,比如说AT89C51基本操作知识,汇编语言方面的知识等.
我负责的是软件设计的时间设置以及T1中断部分,运用到了按键部分以及定时器/计数器部分的知识.通过这次自己编写程序,使我摆脱了以往单纯的理论知识学习状态,并且在和实际设计的结合锻炼了我的综合运用所学的专业基础知识.不过在这次课设中我也遇到了不少问题,实际操作时才发现课堂知识和实际运用还是有差距的,不过最终还是在老师或同学的帮助下一个一个解决了.
通过这次对课程设计,我也认识到自己对单片机应用方面的知识的贫乏,对于书本上的很多理论知识还不能灵活运用,有很多我们掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识.同时还从中学到了一件很重要的东西,那就是如何从理论到实践的转化.此次的课程设计给我奠定了一个实践基础,我会在以后的学习,生活中磨练自己,使自己掌握更多的技术能力.
8.参考文献
[1]杨忠义.单片机课程设计指导.北京:
清华大学出版社,2009.201~217
[2]靳达.单片机应用系统开发实例导航.北京:
人民邮电出版社,2004.1~37
[3]南建辉.MCS-51单片机原理及应用实例.北京:
清华大学出版社,2004.92~117
[4]刘海成.单片机及应用系统设计原理与实践.北京:
北京航天航空大学出版社,2009.129~180
附录
ORG0000H
AJMPMAINT;
转主程序
NOP
ORG000BH
AJMPINT01;
转定时器T0中断程序
ORG001BH
AJMPINT11;
转定时器T1中断程序
MAINT:
MOVR0,#7FH;
00H~7FH单元清零
CLRA
WZ1:
MOV@R0,A
DJNZR0,WZ1
MOVSP,#30H;
置堆栈指针
MOV5AH,#0AH;
放入“熄灭符”数据
MOVTMOD,#11H;
设T0,T1为16位定时器
MOVTL0,#0B0H;
置50ms定时初值
MOVTH0,#3CH
MOVTL1,#0B0H
MOVTH1,#3CH
SETBEA;
开中断
SETBET0;
允许T0中断
SETBTR0;
启动T0
MOVR4,#14H;
用于产生1s定时
MAINT1:
LCALLXSZCX;
调用显示子程序
JNBP1.0,SJTZ0;
功能键按下,进入调时程序
SJMPMAINT
******T0中断服务程序******
INT01:
PUSHACC;
保护现场
PUSHPSW
CLRET0;
关T0中断
CLRTR0;
关定时器T0
MOVA,#0B7H;
修正中断响应时间
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
SETBTR0;
启动定时器T0
DJNZR4,INT0U;
20次中断未到退出中断
AD1:
MOVR4,#14H;
R4重新赋值
MOVR0,#51H;
指向秒计时单元(50H,51H)
LCALLADD1;
调用加1s程序
MOVA,R3;
秒数据放入A
CLRC;
清进位标志
CJNEA,#60H,AD2;
小于60s吗
AD2:
JCINT0U;
小于60s退出中断
CLRA;
大于或等于60s,清秒计数单元
DECR0
MOVR0,#57H;
指向分计时单元(56H,57H)
ACALLADD1;
调用加1min程序
MOVA,R3;
分数据放入A
CLRC
CJNEA,#60H,AD3;
小于60min吗
AD3:
JCINT0U;
小于60min退出中断
大于或等于60min,清分计数单元
MOV@R0,A