51单片机课程设计电子时钟Word格式文档下载.docx
《51单片机课程设计电子时钟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《51单片机课程设计电子时钟Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
三、设计内容:
这里采用应用广泛的AT89C52作为时钟控制芯片,利用单片机内部的定时/计数器T0实现软时钟的目的。
首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,妙计60次形成分,分计60形成小时,小时计到12。
最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。
此外还要实现对时间的调整功能,89C52的、、外接三个独立按键,当按下按键时,系统进入调时间的状态或启动时间显示的功能;
当按下按键时,对显
示的数码管进行加一的功能;
示的数码管进行减一的功能,达到调整时间的目的。
四、系统软件程序设计
1.主程序
先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有按键按下时,则转入相应的功能程序。
2、数码管显示模块
本实验有8个数码管,从右到左为妙、横线、分、横线、时。
在本系统中数码管显示采用软件译码动态显示。
在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段表中查出所显示的信息的断码,从P0端口输出,同时在P2端口进行数码管显示。
3、定时器/计数器T0中断服务程序
T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。
秒单元加到60则对分单元加一,同时秒单元清0;
分单元加到60则对时单元加一,同时分单元清0;
时单元加到24则对时单元清0,标
志一天时间计满。
在对各单元计数的同时,把他们的值放到存储器单元的指定位置。
流程图如下:
4、按键处理模块
按键设置为:
如果没有按键吗,则时钟正常走时。
当按下K0键时,进入调分状态,时钟停止走动;
按K1和K2按键可以进行加一和减一操作;
继续按K0键可以分别进行分和小时的调整;
最后按K0键启动计时。
5、汇编语言程序
ORG0000H
LJMPSTART
ORG000BH
LJMPINIT0
START:
MOVR0,#70H;
主程序开始
MOVR7,#0CH
INIT:
MOV@R0,#00H
INCR0
DJNZR7,INIT
MOV72H,#10;
对连字符进行装值
MOV75H,#10
MOVTMOD,#01H;
选择定时器/计数器T0的方式1
MOVTL0,#0B0H;
对低位赋初值
MOVTH0,#03CH;
高位赋初值
SETBEA
SETBET0
SETBTR0
START1:
LCALLSCAN
LCALLKEYSCAN
SJMPSTART1
DL1MS:
MOVR6,#14H;
延时1子程序
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
DL20MS:
ACALLSCAN;
延时20ms子程序
ACALLSCAN
RET;
数码管显示程序开始
SCAN:
MOVA,78H
MOVB,#0AH
DIVAB;
时间秒的十位送给A,时间秒的个位送B
MOV71H,A;
时间秒要显示的十位
MOV70H,B;
时间秒要显示的个位
MOVA,79H
DIVAB;
时间分的十位送给A,时间分的个位送B
MOV74H,A;
时间分要显示的十位送地址
MOV73H,B;
时间分要显示的个位送地址
MOVA,7AH
时间时的十位送给A,时间时的个位送B
MOV77H,A;
时间时显示的十位送地址
MOV76H,B;
时间时要显示的个位送地址
MOVR1,#70H
MOVR5,#0FEH
MOVR3,#08H
SCAN1:
MOVA,R5;
数码管的显示程序
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR;
对字段表取值显示
MOVP0,A
MOVA,R5
LCALLDL1MS
INCR1
RLA
MOVR5,A
DJNZR3,SCAN1
MOVP2,#0FFH
MOVP0,#0FFH
RET;
"
0~9"
和"
-"
的字段表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;
定时/计数器T0中断程序
INIT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVTL0,#0B0H
MOVTH0,#03CH
INC7BH
MOVA,7BH
CJNEA,#14H,OUTT0;
50ms是否到20次,没有到就继续执行50ms的延时
MOV7BH,#00
INC78H
CJNEA,#3CH,OUTT0;
一秒的延时是否计到60次,没有就继续执行
MOV78H,#00
INC79H
CJNEA,#3CH,OUTT0
MOV79H,#00
INC7AH
CJNEA,#18H,OUTT0;
60分钟的延时是否计到24次,没有就
继续执行程序
MOV7AH,#00
OUTT0:
SETBET0;
启动定时器T0
POPPSW
POPACC
RETI
;
按键处理程序
KEYSCAN:
CLREA
JNB,KEYSCAN0;
有按键按下则跳转到子程序
JNB,KEYSCAN1;
JNB,KEYSCAN2;
KEYOUT:
RET
KEYSCAN0:
LCALLDL20MS;
20ms的延时消抖
JB,KEYOUT
WAIT0:
JNB,WAIT0;
判断按键是否松手,松手就往下执行程序
INC7CH
MOVA,7CH
CJNEA,#03H,KEYOUT;
按下第一次和第二次对时、分选定
MOV7CH,#00;
按下第三次时就启动计时
SJMPKEYOUT
KEYSCAN1:
按键加一的程序
WAIT1:
JNB,WAIT1
CJNEA,#02H,KSCAN11;
如果功能键按下则对时加一调整
CJNEA,#3CH,KEYOUT;
如果加到60则清零
KSCAN11:
INC7AH;
如果功能键是按下第
二次则对分进行加一调整
CJNEA,#18H,KEYOUT
KEYSCAN2:
延时消抖程序
WAIT2:
JNB,WAIT2;
判断是否放开按键
CJNEA,#02H,KSCAN21;
如果功能键是按下第一次对时进行减一
DEC79H
CJNEA,#0FFH,KEYOUT
MOV79H,#3BH
KSCAN21:
DEC7AH;
如果功能键是按下第二次则对分进行减一
MOV7AH,#17H
END
6、软件编译环境:
KeiluVision2
确保生成"
.Hex"
文件
五、系统硬件电路的设计
系统的硬件主要包括单片机芯片,数码管显
示,按键开关电路,它的硬件电路如下图所示,单片机采用广泛使用的AT89C52,系统时钟采用12MHz的晶振,八个数码管显示,小时与分钟与秒钟间用短横线,采用共阳极七段式数码管,P0口为段选码输出端,P2口为位选码输出端。
硬件电路如图所示:
六、课程设计总结
经过一周的时间以及对整本教材的知识总结,把课程设计分成了硬件和软件两大模块。
总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。
在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中,使得程序简单明了。
整个设计过程中遇到的最大问题是软件的
编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。
通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。
在整个设计过程中学到了团体精神和独立解决问题的重要性。
为以后的求职之路打下了基础。
七、参考资料
[1]《单片机原理与应用》谢维成杨加国编着
[2]《单片机应用与仿真调试》严天峰编着
[3]《模拟电子技术(第三版)》胡宴如耿苏燕编着
[4]《数字电子技术(第三版)》杨志忠卫桦林编着