s2位p0.1
s3位p0.2
s4位p0.3
s5位p0.4
s6位p0.5
s7位p0.6
s8位p0.7
led _ data equ p2數碼管數據定義
org 00h程序起始
jmp main主程序開始
org 030h主程序從30H開始。
主營:MOV sp,# 30h設置堆棧
l全部休息;調用初始化程序
lcall pro _ 8led調用數碼管顯示程序
jmp main返回
;* * * * * * * *初始化程序* * * * * * * * * * * *
其余:MOV a,# 00h清除寄存器
MOV b,# 00h清除寄存器
MOV p0,# 0;禁止數碼管顯示。
MOV p2,# 255;
MOV p 1.0 ffh;禁止LED顯示
clr嘟嘟聲;沒有蜂鳴器
ret返回
;* * * * * *數碼管顯示程序* * * * * * * * * * * * * *
pro_8led:
MOV b,# 32;壹個* * *顯示32個數字。
clr psw.3復位寄存器組
setb psw.4
MOV r0,# 00h數據顯示從0開始。
MOV r1,# 01h;數碼管從1開始。
回路:MOV p0,r 1;點亮當前數碼管
MOV a,r0;準備第壹批數據
MOV dptr,# tab _ nu獲取標題
MOVc a,@ a+dptr;獲得第壹批數據
MOV led_data,a;輸出至顯示數據端口
lcall延遲;500毫秒延遲
lcall延遲;1秒延遲
inc r0準備下壹個數據
MOV a,r 1;準備下壹個數碼管。
RLC a;設置下壹個數碼管。
JC c 1;顯示所有8位,傳輸
MOV r1,a;否則,設置下壹位。
djnz b,loop32的數字沒有顯示,將返回顯示。
ret否則返回主程序。
c1: MOV r1,# 1;顯示8位後,再次開始循環。
clr c;設置顯示位
djnz b,loop顯示32位後,它將返回重新顯示。
ret否則返回主程序。
;* * * * * * * * * *數碼管顯示* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
;* * * * * * * * * * * *軟件延遲為500毫秒* * * * * * * * * * * * * * * * * * * * * * * * * * * *
延遲:推psw保存原始寄存器內容。
clr psw.3
clr psw.4設置新的寄存器組
MOV r0,# 2;延遲參數1
MOV r1,# 250;延遲參數2
MOV r2,# 2;延遲參數3
dl1:djnz r0,dl 1;延遲周期1
MOV r0,# 250;
dl2:djnz r1,dl 1;延遲周期2
MOV r0,# 240;
MOV r1,# 248;
dl3:djnz r2,dl 1;延遲周期3
nop定時精度調整
pop psw恢復原始寄存器
ret返回
;**********************************************************
;**********************************************************
;這是壹個數字顯示表,其中帶小數點的數字比不帶小數點的數字大16。
;比如0的顯示碼是0;然後顯示代碼0。是16;等等
tab_nu:
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h數字0-7沒有十進制代碼。
db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh不帶十進制代碼的數字8-f
db 40h,79h,24h,30h,19h,12h,02h,78h帶有十進制代碼的數字0-7
db 00h,10h,08h,03h,46h,21h,06h,0eh帶十進制代碼的數字8-f
結束