单片机原理与应用
学号:
学生所在学院:
学生姓名:
任课教师:
教师所在学院:航空制造工程学院
2014年6月
13y8
基于单片机控制的可调电子数字钟
陈成龙
南昌航空大学航制学院
摘要:单片机是现代电子技术的新兴领域,它的出现极大地推动了电子工业的发展,已成为电子系统设计中最普遍的应用手段。
设计单片机应用系统时,在完成硬件系统设计之
后,必须配备相应的应用软件。
Proteus软件的应用使单片机可以直接在基于原理图进
行虚拟模拟上,并和μVision共同编程,编译,仿真调试,使单片机学习的学习过程
变得直观形象。
关键词:单片机ProteusμVision仿真调试
1.功能要求
利用89C51单片机内的定时器,设计一台可调数字钟,能通过按键进行时、分、秒的调整,采用8位LED数码管以24小时方式进行显示。
2.硬件电路设计
可调数字钟的硬件电路如图1所示。
89C51单片机的P0口通过三态总线收发器74LS245接到8位共阴极LED数码管的数字输入端,单片机的P3作为数码管的数位控制,从P0口输出显示字符段码,从P3口输出循环扫描控制位,利用人眼的视觉暂留功能,达到8位数码管同时显示的效果。
单片机的P1.0-P1.2引脚通过三个按钮开关接地,通过判断P1.0-P1.2引脚电平的高低,决定是否进行数字钟的时、分、秒调整。
3.软件程序设计
本设计利用89C51单片机内定时器T0中断来实现数字钟功能,T0定时时间设为50ms,每隔50ms产生一次中断,如果中断20次即到达1秒。
程序设计时预先安排时、分、秒内存单元,在中断服务程序中根据中断次数来决定秒单元是否加1,当秒单元到达60时分单元加1,同时秒单元清零,分单元达到60时,时单元加1,同时分单元清零,时单元达到24时,时单元清零,又从头开始计时。
可调数字钟的程序流程图如下图2、图3.
图1.可调数字钟硬件图
图2.主程序流程图
图3.中断服务程序流程图
软件的控制程序如下:
S_SET BIT P1.0;数字钟秒控制位
M_SET BIT P1.1;分控制位
H_SET BIT P1.2;时控制位
SECOND EQU30H
MINUTE EQU31H
HOUR EQU32H
TCNT EQU34H
ORG0000H;单片机复位入口地址
SJMP START
ORG000BH;定时器T0中断服务程序入口地址
LJMP INT_T0
START:MOV DPTR,#TABLE
MOV HOUR,#0;时、分、秒单元清0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H;设置T0为16位定时器工作方式
MOV TH0,#3CH;fosc=12MHZ,定时器50ms
MOV TL0,#0B0H
MOV IE,#82H;开中断
SETB TR0;启动定时器T0
A1:LCALL DISPLAY;调用显示子程序
JNB S_SET,S1;判断是否有键按下
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S1:LCALL DELAY;去抖动
JB S_SET,A1
INC SECOND;调整秒值加1
MOV A,SECOND
CJNE A,#60,J0;判断是否调整到60秒
MOV SECOND,#0
LJMP K1
S2:LCALL DELAY
JB M_SET,A1
K1:INC MINUTE;调整分钟值加1
MOV A,MINUTE
CJNE A,#60,J1;判断是否调整到60分
MOV MINUTE,#0
LJMP K2
S3:LCALL DELAY
JB H_SET,A1
K2:INC HOUR;调整小时值加1
MOV A,HOUR
CJNE A,#24,J2;判断是否调整到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
J0:JB S_SET,A1;等待按键抬起
LCALL DISPLAY
SJMP J0
J1:JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2:JB H_SET,A1
LCALL DISPLAY
SJMP J2
INT_T0:MOV TH0,#3CH;定时器中断服务程序MOV TL0,#0B0H;装入T0的初值
INC TCNT
MOV A,TCNT
CJNE A,20,RETUNE;判断1秒定时到否
INC SECOND;秒单元加1
MOV TCNT,#0;50ms单元清0
MOV A,SECOND
CJNE A,#60,RETUNE;判断60秒定时到否
INC MINUTE;分单元加1
MOV SECOND,#0;秒单元清0
MOV A,MINUTE
CJNE A,#60,RETUNE;判断60分定时到否
INC HOUR;时单元加1
MOV MINUTE,#0;分单元清0
MOV A,HOUR
CJNE A,#24,RETUNE;判断24小时定时到否
MOV HOUR,#0;时、分、秒、50ms单元清零
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE:RETI
DISPLAY:MOV A,SECOND;显示子程序MOV B,#10
DIV AB
CLR P3.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.6
MOV A,B
CLR P3.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.7
CLR P3.5
MOV P0,#40H;显示分隔符
LCALL DELAY
SETB P3.5
MOV A,MINUTE;显示分钟
MOV B,#10
DIV AB
CLR P3.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.3
MOV A,B
CLR P3.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.4
CLR P3.2
MOV P0,#40H;显示分隔符
LCALL DELAY
SETB P3.2
MOV A,HOUR;显示小时
MOV B,#10
DIV AB
CLR P3.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.0
MOV A,B
CLR P3.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.1
RET
TABLE:DB3FH,06H,5BH,4FH,66H;显示段码表DB6DH,7DH,07H,7FH,6FH
DELAY:MOV R6,#10;延时子程序D1:MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
参考文献
[1]徐爱钧.单片机原理实用教程—基于Proteus虚拟仿真.北京:电子工业出版社,2009.1,254-256
[2]夏路易.单片机技术基础教程与实践.北京:电子工业出版社,2008.1
[3]惠仇.手把手教你学51单片机.北京:电子工业出版社,2009.1
[4]李全利.单片机原理及接口技术.北京:高等教育出版社,2009,1
[5]老杨.51单片机工程师是怎样炼成的—基于C语言+Proteus仿真.北京:电子工业出版社,2012.1。