89c51,8255,6个led数码管显示时钟的汇编语言程序,汇编语言要求编写一个时钟程序 用八位数码管实现时分秒的计时功能...

这是一个使用89C51微控制器和8255接口芯片实现的6位数码管时钟程序,用汇编语言编写,支持时分秒计时、按键操作和显示功能。程序包括定时器中断、扫描显示、键值处理等关键模块。
摘要由CSDN通过智能技术生成

我以前做的一个6位数码管的时钟程序,你可以看看,其实6位足够了。

KEYVALEQU 30H

KEYTMEQU 31H

KEYSCANEQU 32H

DATEQU 33H

SCANLEDEQU 39H

CLKEQU 77H

SECEQU 78H

MINEQU 79H

HOUREQU 7AH

PAUSEBIT 00H

DOTBIT 01H

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR;50ms定时

ORG 001BH

LJMP T1ISR;扫描显示

ORG 0030H

MAIN:

MOV SP,#5FH

MOV TMOD,#11H

MOV TH0,#03CH

MOV TL0,#0B0H

MOV TH1,#0ECH

MOV TL1,#078H

MOV KEYVAL,#0

MOV SCANLED,#0

MOV 33H,#10H

MOV 34H,#10H

MOV 35H,#10H

MOV 36H,#10H

MOV 37H,#10H

MOV 38H,#10H

MOV SEC,#0

MOV MIN,#0

MOV HOUR,#0

MOV CLK,#0

CLR PAUSE

SETB EA

SETB ET1

SETB TR1

LOOP:

LCALL KEYSEL

MOV A,KEYVAL

CJNE A,#0FFH,LOOP1

SJMP LOOP

LOOP1:

CJNE A,#10,LOOP2;“ON”启动

SETB TR0

SETB ET0

SETB PAUSE

SJMP LOOP

LOOP2:

CJNE A,#11,LOOP3;“=”清零

MOV SEC,#0

MOV MIN,#0

MOV HOUR,#0

LCALL DISCHG

SJMP LOOP

LOOP3:

CJNE A,#15,LOOP4;“+”暂停

CLR TR0

CLR ET0

CLR PAUSE

SJMP LOOP

LOOP4:

CJNE A,#14,LOOP5;“-”清显示暂停

MOV 33H,#10H

MOV 34H,#10H

MOV 35H,#10H

MOV 36H,#10H

MOV 37H,#10H

MOV 38H,#10H

CLR TR0

CLR ET0

CLR PAUSE

SJMP LOOP

LOOP5:

CJNE A,#10,LOOP6;数字键

LOOP6:

下面是一个基于89c51单片机的六位数码管电子时钟汇编语言程序: ``` ; 定义引脚和端口号 sbit D1 = P1^0; sbit D2 = P1^1; sbit D3 = P1^2; sbit D4 = P1^3; sbit D5 = P1^4; sbit D6 = P1^5; ; 定义常量 DELAY_TIME equ 2 ; 延时时间 ; 定义变量 HOUR db 00 ; 小时 MINUTE db 00 ; 分钟 SECOND db 00 ; 秒钟 ; 主程序 MAIN: CALL INIT ; 初始化 LOOP: CALL DISPLAY ; 显示时间 ACALL DELAY ; 延时 ACALL TIME_INC ; 时间加 1 SJMP LOOP ; 无限循环 ; 初始化程序 INIT: MOV HOUR, #0 ; 初始化小时为 0 MOV MINUTE, #0 ; 初始化分钟为 0 MOV SECOND, #0 ; 初始化秒钟为 0 RET ; 返回 ; 显示时间程序 DISPLAY: MOV D1, #1 ; 选择第一个数码管 MOV P0, HOUR ; 显示小时的十位 ACALL DELAY ; 延时 MOV D1, #0 ; 关闭第一个数码管 MOV D2, #1 ; 选择第二个数码管 MOV P0, HOUR+1 ; 显示小时的个位 ACALL DELAY ; 延时 MOV D2, #0 ; 关闭第二个数码管 MOV D3, #1 ; 选择第三个数码管 MOV P0, MINUTE ; 显示分钟的十位 ACALL DELAY ; 延时 MOV D3, #0 ; 关闭第三个数码管 MOV D4, #1 ; 选择第四个数码管 MOV P0, MINUTE+1 ; 显示分钟的个位 ACALL DELAY ; 延时 MOV D4, #0 ; 关闭第四个数码管 MOV D5, #1 ; 选择第五个数码管 MOV P0, SECOND ; 显示秒钟的十位 ACALL DELAY ; 延时 MOV D5, #0 ; 关闭第五个数码管 MOV D6, #1 ; 选择第六个数码管 MOV P0, SECOND+1 ; 显示秒钟的个位 ACALL DELAY ; 延时 MOV D6, #0 ; 关闭第六个数码管 RET ; 返回 ; 延时程序 DELAY: MOV R7, #DELAY_TIME DELAY_LOOP: DJNZ R7, DELAY_LOOP RET ; 返回 ; 时间加 1 程序 TIME_INC: INC SECOND+1 ; 秒钟的个位加 1 JZ SECOND_TENS_INC ; 如果秒钟的个位是 0,则秒钟的十位加 1 RET ; 返回 SECOND_TENS_INC: INC SECOND ; 秒钟的十位加 1 JZ MINUTE_INC ; 如果秒钟的十位是 0,则分钟加 1 RET ; 返回 MINUTE_INC: INC MINUTE+1 ; 分钟的个位加 1 JZ MINUTE_TENS_INC ; 如果分钟的个位是 0,则分钟的十位加 1 RET ; 返回 MINUTE_TENS_INC: INC MINUTE ; 分钟的十位加 1 JZ HOUR_INC ; 如果分钟的十位是 0,则小时加 1 RET ; 返回 HOUR_INC: INC HOUR+1 ; 小时的个位加 1 JZ HOUR_TENS_INC ; 如果小时的个位是 0,则小时的十位加 1 RET ; 返回 HOUR_TENS_INC: INC HOUR ; 小时的十位加 1 RET ; 返回 ``` 该程序使用 P1 端口控制六个数码管显示,使用 P0 端口显示时间。程序中定义了常量 DELAY_TIME 表示延时时间,变量 HOUR、MINUTE、SECOND 分别表示小时、分钟、秒钟。程序通过循环不断调用 DISPLAY、DELAY、TIME_INC 程序实现时间显示和时间计数功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值