c51时钟数码管显示流程图_基于51单片机的8位数码管电子时钟仿真图及源代码详细资料概述...

本文介绍了一种使用51单片机控制8位数码管显示时间的方法,包括程序源代码和仿真图。程序通过T0和T1中断进行时间计数,并提供了按键操作来调节时间。在中断服务程序中,实现了秒、分、时的递增,并在数码管上动态显示。同时,还提供了闹钟功能的初步实现。
摘要由CSDN通过智能技术生成

利用8位数码管显示时间,原理与4位数码管显示的基本一样

仿真图:

f793a9d3800201c016230f82d4b9c76c.png

程序源代码:

本程序已经通过在线软件仿真和硬件制作.

org0000h;程序开始入口地址

sjmpmain;跳转至主程序

org000bh;T0中断入口地址

ljmpinti0;跳转至T0中断程序

org001bh;T1中断入口地址

ljmpinti1;跳转至T1中断程序

org0030h

main:movtmod,#11h;设T0、T1为模式1

movie,#8ah;开T0、T1允许中断

movth0,#4ch;赋T050ms初值

movtl0,#00h

movth1,#4ch;赋T150ms初值

movtl1,#00h

movsp,#60h;设置堆栈指针

mov38h,#00;闹钟分初值

mov39h,#00;闹钟时初值

mov31h,#00;时间秒初值

mov32h,#00;时间分初值

mov33h,#00;时间时初值

setbtr0;启动定时器T0

setbtr1;启动定时器T1

loop:lcalldisplay;调用时间显示程序

lcallkeysan;调用时间调节按钮

lcallkeynz;调用闹钟控制按钮

ajmploop

inti0:pushpsw;压入堆栈指针,保护现场

pushacc

clrea;关中断www.dgzj.com

movth0,#4ch;重赋T0定时初值

movtl0,#00h

inc3ah;3ah为50ms计数单元

mova,3ah

cjnea,#20,out;1秒计数是否到

mov3ah,#00;清50ms计数初值

inc31h;秒加1

mova,31h

cjnea,#60,out;60秒计数是否到

mov31h,#00

inc32h;分加1

mova,32h

cjnea,#60,out;60分计数是否到

mov32h,#00

inc33h;时加1

mova,33h

cjnea,#24,out;24时计数是否到

mov33h,#00

out:setbea;开中断

popacc;弹出堆栈指针,恢复现场

poppsw

reti;中断返回

inti1:pushpsw;压入堆栈指针,恢复现场

pushacc

clrea

movth1,#4ch;重赋T1定时初值

movtl1,#00h

inc71h;71h为50ms计数单元

mova,71h

cjnea,#20,out1

mov71h,#00

mova,32h;闹钟判断

cjnea,38h,out1;闹钟时间分判断

mova,33h

cjnea,39h,out1;闹钟时间时判断

clrp1.0;到闹钟时间,清p1.0

out1:setbea;开中断

popacc

poppsw

reti;中断返回

display:mova,31h;秒显示

movb,#10

pab

mov20h,a;将十位放入20h单元

mov21h,b;将个位、余数放入21h单元

disp1:mova,20h;秒十位显示

movdptr,#table

movca,@a+dptr;将A的内容+table内容,结果回存给A

movp0,a;将A给P0口

clrp2.6;清p2.6,点亮第7位数码管

lcalldel1ms;调用1ms延时子程序

setbp2.6;灭第7位数码管

disp2:mova,21h;秒个位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.7

lcalldel1ms

setbp2.7

disp4:mova,32h;分显示

movb,#10

pab

mov22h,a

mov23h,b

disp5:mova,22h;分十位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.3

lcalldel1ms

setbp2.3

disp6:mova,23h;分个位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.4

lcalldel1ms

setbp2.4

disp7:mova,33h;时显示

movb,#10

pab

mov24h,a

mov25h,b

disp8:mova,24h;时十位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.0

lcalldel1ms

setbp2.0

disp9:mova,25h;时个位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.1

lcalldel1ms

setbp2.1

disp10:mov34h,#0bfh;"-"显示

mova,34h

movp0,a

clrp2.5

lcalldel1ms

setbp2.5

disp11:mov35h,#0bfh;"-"显示

mova,35h

movp0,a

clrp2.2

lcalldel1ms

setbp2.2

ret

display1:mova,38h;闹钟分显示

movb,#10

pab

mov26h,a

mov27h,b

d1:mova,26h;闹钟分十位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.3

lcalldel1ms

setbp2.3

d2:mova,27h;闹钟分个位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.4

lcalldel1ms

setbp2.4

dispnz:mova,39h;闹钟时显示

movb,#10

pab

mov28h,a

mov29h,b

d5:mova,28h;闹钟时十位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.0

lcalldel1ms

setbp2.0

d6:mova,29h;闹钟时个位显示

movdptr,#table

movca,@a+dptr

movp0,a

clrp2.1

lcalldel1ms

setbp2.1

mov35h,#0bfh;"-"显示

mova,35h

movp0,a

clrp2.2

lcalldel1ms

setbp2.2

ret

table:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;数字0—9

del1ms:movr7,#10;1ms延时子程序

del1:movr6,#50

del2:djnzr6,del2

djnzr7,del1

ret

del20ms:movr5,#40;20ms延时子程序

del3:movr4,#250

del4:djnzr4,del4

djnzr5,del3

ret

keysan:jnbp3.1,key1;秒加1按钮

jnbp3.2,key2;分加1按钮

jnbp3.3,key3;时加1按钮

sjmpkeyout

key1:lcalldel20ms

jbp3.1,keyout

jnbp3.1,$

inc31h;秒加1

mova,31h

cjnea,#60,keyout

mov31h,#00

sjmpkeyout

key2:lcalldel20ms

jbp3.2,keyout

jnbp3.2,$

inc32h;分加1

mova,32h

cjnea,#60,keyout

mov32h,#00

sjmpkeyout

key3:lcalldel20ms

jbp3.3,keyout

jnbp3.3,$

inc33h;时加1

mova,33h

cjnea,#24,keyout

mov33h,#00

sjmpkeyout

keyout:ret

keynz:jnbp3.4,keynz4;显示闹钟并可修改和显示当前时间

jnbp3.7,keynz5

jnbp3.5,nz3

jnbp3.6,nz4

sjmpnzout

nzout:ret

nz2:lcalldisplay1

jnbp3.5,nz3

jnbp3.6,nz4

keynz4:jnbp3.4,nz2

sjmpnzout

nz3:lcalldel20ms

jbp3.5,nzout

jnbp3.5,$

inc38h

mova,38h

cjnea,#60,nzout

mov38h,#00

sjmpnzout

nz4:lcalldel20ms

jbp3.6,nzout

jnbp3.6,$

inc39h

mova,39h

cjnea,#24,nzout

mov39h,#00

sjmpkeyout

keynz5:jbp3.7,nzout

jnbp3.7,$

setbp1.0

sjmpnzout

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值