⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.txt

📁 闪烁灯程序课程设计
💻 TXT
📖 第 1 页 / 共 2 页
字号:

;子程序返回
;

SUB11:
MOV
A,#59H

AJMP
SUB111

SUB1110: MOV
A,R3
;移入R3寄存器

ANL
A,#0FH
;高四位变0

MOV
@R0,A

AJMP
SUB110
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;          时减1子程序          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SUBB1: MOV
A,@R0
;取当前计时单元数据到A


DEC
R0
;指向前一地址

SWAP
A
;A中数据高四位与低四位交换

ORL
A,@R0

;前一地址中数据放入A中低四位

JZ
SUBB11
;00减1为23h

DEC
A
;A减1操作

SUBB111:MOV
R3,A
;移入R3寄存器

ANL
A,#0FH
;高四位变0

CLR
C
;清进位标志


SUBB
A,#0AH

SUBB1111:JC
SUBB1110

MOV
@R0,#09H
;时个位大于0AH,为9

SUBB110:MOV
A,R3
;取回R3中暂存数据

INC
R0
;指向当前地址单元

SWAP
A
;A中数据高四位与低四位交换


ANL
A,#0FH
;高四位变0

MOV
@R0,A
;时十位数数据放入

RET
;子程序返回

SUBB1110:MOV
A,#23H 

AJMP
SUBB111

SUBB1110:MOV
A,R3
;时个位小于0A不处理


ANL
A,#0FH
;高四位变0

MOV
@R0,A
;个位移入

AJMP
SUBB110
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;            清0程序               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;对计时单元复0用

CLR0:CLR 
A
;清累加器

MOV
@R0,A
;清当前地址单元

DEC
R0
;指向前一地址

MOV
@R0,A
;前一地址单元清0

RET
;子程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           时钟调整程序              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;当调时按键按下时进入此程序

SETMM:CLR
ET0
;关定时器T0中断

CLR
TR0
;关闭定时器T0

LCALL
DLIS
;调用1s延时程序


JB
P1.0,CLOSEDIS ;键按下时间短于1s,关闭显示(省电)

MOV
R2,#06H
;进入调时状态,赋闪烁定时初值

SETB
ET1 
;允许T1中断

SETB
TR1
;开启定时器T1

SET2:
JNB
P1.0,SET1
;P1.0口为0(键未释放),等待

SETB
00H
;键释放,分调整闪烁标志置1

SET4:
JB
P1.0,SET3
;等待键按下

LCALL
DL05S
;有键按下,延时0.5s

JNB
P1.0,SETHH
;按下时间长于0.5s,转调[小]时状态

MOV
R0,#77H
;按下时间长于0.5s,加1min操作

LCALL
ADD1
;调用加1子程序

MOV
A,R3
;取调整单元数据

CLR
C
;清进位标志

CJNE
A,#60H,HHH
;调整单元数据与60比较

HHH:
JC
SET4
;调整单元数据小于60,转SET4循环

LCALL
CLR0
;调整单元数据大于或等于60时,清0

CLR
C
;清进位标志

AJMP
SET4
;跳转到SET4循环

CLOSEDIS:SETB
ET0
; 省电(LED不显示)状态,开T0中断


SETB
TR0
;开启T0定时器(开时钟)

CLOSE: JB
P1.0,CLOSE ;无按键按下,等待

LCALL
DISPLAY
;有键按下,调显示子程序延时消抖

JB
P1.0,CLOSE 
;是干扰,返回CLOSE等待

WAITH: JNB
P1.0,WAITH
;等待键释放

LJMP
START1
;返回主程序(LED数据显示亮)

SETHH: CLR
00H
;分闪烁标志清除(进入调[小]时状态

SETHH1: JNB
P1.0,SET5
;等待键释放

SETB
01H
;[小]时调整标志置1

SET6: JB
P1.0,SET7
;等待键按下

LCALL
DL05S
;有键按下,延时0.5s

JNB
P1.0,SETOUT ;按下时间长于0.5s,退出时间调整

MOV
R0,#79H
;按下时间短于0.5s,加1h操作

LCALL
ADD1
;调加1子程序

MOV
A,R3

CLR
C

CJNE
A,#24H,HOUU ;计时单元数据与24比较

HOUU:
JC
SET6
;小于24,转SET6循环

LCALL
CLR0
;大于或等于24时,清0操作

AJMP
SET6

;跳转到SET6循环

SETOUT:
JNB
P1.0,SETOUT1
;调时退出程序。等待键释放

LCALL
DISPLAY
;延时消抖

JNB
P1.0,SETOUT
;是抖动,返回SETOUT再等待


CLR
01H
;清调[小]时标志


CLR
00H
;清调分标志

CLR
02H
;清闪烁标志

CLR
TR1
;关闭定时器T1

CLR
ET1
;关定时器T1中断

SETB
TR0
;开启定时器T0

SETB
ET0
;开定时器T0中断(计时开始)

LJMP
START1
;跳回主程序

SET1: LCALL
DISPLAY
;键释放等待时调用显示程序(调分)

AJMP
SET2
;防止键按下时无时钟显示

SET3: LCALL
DISPLAY
;等待调分按键时时钟显示用

JNB
P1.1,FUNSUB ;减1分操作

AJMP
SET4
;调分等待

SET5: LCALL
DISPLAY
;键释放等待时调用显示程序(调[小]时)

AJMP
SETHH1
;防止键按下时无时钟显示


SET7: LCALL
DISPLAY
;等待调[小]时按键时时钟显示用

JNB
P1.1,FUNSUBB;[小]时减1操作

AJMP
SET6
;调时等待

SETOUT1:LCALL
DISPLAY
退出时钟调整时键释放等待

AJMP
SETOUT

;防止键按下时无时钟显示
;FUNSUB,分减1程序?

FUNSUB: LCALL
DISPLAY
;消抖动

JB
P1.1,SET41
;干扰,返回调分等待

FUNSUB1: JNB
P1.1,FUNSUB1 ;等待键放开

MOV
R0,#77H

LCALL
SUB1 
;分减1程序

LJMP
SET4
;返回调分等待

SET41:LJMP
SET4
;FUNSUBB,时减1程序

FUNSUBB:LCALL
DISPLAY
;消抖动

JB
P1.1,SET61
;干扰,返回调时等待

JUNSUBB1:JNB

P1.1,FUNSUBB1 ;等待键放开

MOV
R0,#79H

LCALL
SUBB1
;时减1程序

LJMP
SET6
;返回调时等待

SET61:
LJMP
SET6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                显示程序               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示数据在70H~75H单元内,用六位LED共阳数码管显示,P0口输出段码数据,P2口
;作扫描控制,每个LED数码管亮1ms时间,再逐位循环。

DISPLAY:MOV
R1,#70H 
;指向显示数据首址

MOV
R5,#0DFH
;扫描控制字初值


PLAY:MOV
A,R5
;扫描字放入A

MOV
P2,A
;从P2口输出

MOV
A,@R1
;取显示数据到A

MOV
DPTR,#TAB
;取段码表地址

MOVC
A,@A+DPTR ;查显示数据对应段码


MOV
P0,A
;段码放入P1口

MOV
A,R5


JB
ACC.1,LOOP5 ;小数点处理

CLR
P0.7

LOOP5: JB
ACC.3,LOOP6 ;小数点处理

CLR
P0.7


LOOP6: LCALL
DLIMS 
;显示1ms

JNC
R1
;指向下一地址

MOV
A,R5
;扫描控制字放入A

JNB
ACC.0,ENDOUT;ACC.0=0时,一次显示结束

RR
A
;A中数据循环左移

MOV
R5,A
;放回R5内

MOV
P0,#0FFH

AJMP
PLAY
;跳回PLAY循环

ENDOUT: MOV
P2,#0FFH
;一次显示结束,P2口复位

MOV
P0,#0FFH
;P0口复位


RET
;子程序返回

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,

0FFH,88H,0BFH
;共阳段码表        “0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“A”“—”
;SDISPLAY,上电显示程序
;不带小数点显示,有“A”“—”显示功能

SDISPLAY:MOV
R5,#0DFH

;扫描控制字初值

SPLAY:MOV
A,R5
;扫描字放入A

MOV
P2,A
;从P2口输出

MOV
A,@R1
;取显示数据到A

MOV
DPTR,#TABS
;取段码表地址

MOVC
A,@A+DPTR 
;查显示数据对应段码

MOV
P0,A
;段码放入P0口

MOV
A,R5

LCALL
DL1MS
;显示1ms

INC
R1
;指向下一地址

MOV
A,R5

;扫描控制字放入A

JNB
ACC.0,ENDOUTS ;ACC.0=0时,一次显示结束

RR
A
;A中数据循环左移

MOV
R5,A
;放回R5内

AJMP
SPLAY
; 跳回PLAY循环

ENDOUTS: MOV
P2,#0FFH
;P0口复位

MOV
P0,#0FFH
;子程序返回

RET

TABS:DB 0CH,0F9H,04AH,0B0H,99H,92H,82H,0F8H,80H,90H,
0FFH,88H,0BFH
;STAB表,启动时显示2003—12—07(制作年月日)、A01—2—28(班级学号)

STAB:DB 0AH,0AH,0AH,0AH,0AH,0AH,08H,02H,0CH,02H,0CH,01H,00H,0BH,0AH,0AH

DB 07H,00H,0CH,02H,01H,0CH,03H,00H,00H, 02H,0AH,0AH,0AH,0AH,0AH,0AH
;注:0A不亮,0B显示“A”,0C显示“—”
;ST 子程序,上电时显示年月日班级用,采用移动显示

ST:MOV
R0,#40H


MOV
R2 ,#20H

MOV
R3,#00H

CLR
A

MOV
DPTR,#STAB

SLOOP: MOVC
A,@A+DPTR

MOV
@R0,A

MOV
A,R3


INC
A

MOV
R3,A

INC
R0

DJNZ
R2,SLOOP
;移入完毕

MOV
R1,#5AH

MOV
R3,#1BH
;显示27个单元

SSLOOP:
MOV
R2,#32H
;控制移动速度

SSLOOP1:
LCALL
SDISPLAY

DJNZ
R2,SSLOOP11

MOV
A,R1

SUBB
A,#07H
;显示首址修正为低1个单元

MOV
R1,A


DJNZ
R3,SSLOOP

RET

SSLOOP11: MOV
A,R1
;指针修正为原值   

SUBB
A,#06H

MOV
R1,A

AJMP
SSLOOP1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;              延时程序

;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;1ms延时程序,LED显示程序用

DL1MS:MOV
R6,#14H

DL1:MOV
R7,#19H

DL2:DJNZ
R7,DL2

DJNZ
R6,DL1

RET
;20ms延时程序,采用调用显示子程序,以改善LED的显示闪烁现象

DS20MS:ACALL
DISPLAY

ACALL
DISPLAY

ACALL
DISPLAY

RET
;延时程序,用作按键时间的长短判断

DLIS:LCALL
DL05S

LCALL

DL05S

RET

DL05S:MOV
R3,#20H
;8ms*32=0.196s

DL05S1:LCALL
DISPLAY

DJNZ
R3,DL05S1

RET

END
;程序结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -