- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于单片AT89C51控制的电子时钟课程设计报告
单片机电子时钟设计报告
实现功能:显示时、分、秒,刚打开电源时,显示的数据为12:00:00,然后电路会自动开始计时。电路中有时、分、秒各自单独的调整按钮,时间调整按钮每按一次,相应的显示时间加1。
所需材料:89C51单片机,多位数码管,数码管显示译码器74LS48,3线8线译码器74LS138,3个按钮, 100Ω、22KΩ电阻若干,12MHZ晶振一个,30pf无极电容2个,10uf有极电容一个,敷铜板。
电路设计:用P1端口的P1.0~P1.3来作为数码管显示数据的输出引脚,用P1.4~P1.6引脚作为3线8线译码器的控制输入引脚,用P0端口的P0.0~P0.2来分别作为时、分、秒的时间调整按钮。当按下按钮时,相应的输入引脚上就会有低电平输入单片机。3线8线译码器的控制端,Y0、Y1、Y2、Y3、Y4、Y5分别控制了数码管的显示控制线。电路如下图1-1
图1-1
流程图:
程序设计:
ORG 00H 主程序起始地址
JMP START 主程序START
ORG 0BH 定时器T0中断起始地址
JMP TIM0 定时器T0中断子程序TIM0
START:
MOV SP,#70H 设置堆栈指针
MOV 28H,#00 设置显示位数扫描指针初值为0
MOV 2AH,#12H 设置时钟显示寄存器初值为12H
MOV 2BH,#00 设置分钟显示寄存器初值为00H
MOV 2CH,#00 设置秒钟显示寄存器初值为00H
MOV TMOD,#01H 设置定时器T0工作在方式1
MOV TH0,#0F0H 定时4ms的初值,即0F060H
MOV TL0,#60H 初值的低位
MOV IE,#82H 定时器T0中断允许
MOV R4,#250 保证后面实现中断250次,即1秒的延时
SETB TR0 启动定时器T0
LOOP:
JB P0.0,N2 若没有按键,就转去下一步检查分
CALL DELAY 延时5ms,消除抖动
MOV A,2CH 将秒寄存器的值载入累加器A
ADD A,#01H A的内容加1
DA A 十进制调整
MOV 2CH,A A的 值存入秒寄存器
CJNE A,#60H,N1 看是否已经是60秒,若不是就继续检查
MOV 2CH,#00 已经是60秒,就清空秒寄存器的值
N1:
JNB P0.0,$ 秒按键还没有放开就循环等待
CALL DELAY 延时5ms,消除抖动
N2:
JB P0.1,N4 若分没有按键,就转去下一步检查分
CALL DELAY 延时5ms,消除抖动
MOV A,2BH 将分寄存器的值载入累加器A
ADD A,#01H A的内容加1
DA A 十进制调整
MOV 2BH,A A的值存入寄存器
CJNE A,#60H,N3 看是否已经是60分,若不是就继续检查
MOV 2BH,#00H 已经是60分,就清空寄存器的值
N3:
JNB P0.1,$ 分按键还没有放开就循环等待
CALL DELAY 延时5ms,消除抖动
N4:
JB P0.2,LOOP 若时没有按键,就转回去继续检查看是否有按键
CALL DELAY 延时5ms,消除抖动
MOV A,2AH 将时寄存器的值载入累加器A
ADD A,#01H A的内容加1
DA A 十进制调整
MOV 2AH,A A的值存入时寄存器
CJNE A,#24H,N5 看是否已经是24时,若不是就继续检查
MOV 2AH,#00H 已经是24时,就清空是寄存器的值
N5:
JNB P0.2,$ 时钟按键还没有放开就循环等待
CALL DELAY 延时5ms,消除抖动
JMP LOOP 返回重新检查看是否有按键
******定时器T0中断子程序*******
TIM0:
MOV TH0,#0F0H 定时初值重设
MOV TL0,#60H
PUSH ACC 将累加器A的值暂存于堆栈
PUSH PSW 将PSW的值暂存于堆栈
DJNZ R4,X2 计时中断不满1s就退出继续中断
MOV R4,#250 计时1s
CALL CLOCK 调用计时器子程序CLOCK
CALL DISP 调用显示子程序DISP
X2:
CALL SCAN 调用扫描子程序SCAN
POP PSW 到堆栈取回PSW的值
POP ACC 到堆栈取回累加器ACC的值
RETI 返回主程序
******扫描子程序*******
SCAN:
MOV R0,#28H
IN
文档评论(0)