DISPBUF EQU 50H ;50H,51H,52H,53H是顯示緩沖區(qū)
LED1 EQU P2.0 ;第一位數(shù)碼管的位控制
LED2 EQU P2.1 ;第二位數(shù)碼管的位控制
LED3 EQU P2.2 ;第三位數(shù)碼管的位控制
LED4 EQU P2.3 ;第四位數(shù)碼管的位控制
LED5 EQU P2.4
LED6 EQU P2.5
LED7 EQU P2.6
LED8 EQU P2.7
;==============================================================
org 0000h
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
MAIN:
MOV R0,#50H
MOV 65H, #2
MOV 64H, #3
MOV 63H, #5
MOV 62H, #9
MOV 61H, #5
MOV 60H, #9
MOV 59H, #1
MOV 58H, #2
ACALL OUT
LOOP1:ACALL DISP ;調用顯示程序
JNB P3.2,K1
JNB P3.3,K2
ACALL TIME
AJMP LOOP1
K1: LJMP CLEAR
K2: LJMP PAUSE
TIME:
MOV R0,#59H ;指向毫秒計時單元
ACALL ADD1 ;調用加1程序(加1毫秒操作)
MOV A,R3 ;毫秒數(shù)據(jù)放入A(R3為2位十進制數(shù)組合)
CLR C ;清進位標志
CJNE A,#60H,ADDS
ADDS: JC OUT ;小于60毫秒時中斷退出
ACALL CLR0 ;大于或等于60毫秒時對秒計時單元清0
MOV R0,#61H ;指向秒計時單元
ACALL ADD1 ;調用加1程序(加1秒操作)
MOV A, R3 ;秒數(shù)據(jù)放入A(R3為2位十進制數(shù)組合)
CLR C ;清進位標志
CJNE A, #60H,ADDM
ADDM: JC OUT ;小于60秒時中斷退出
ACALL CLR0 ;大于或等于60秒時對秒計時單元清0
MOV R0,#63H ;指向分計時單元
ACALL ADD1 ;分計時單元加1分鐘
MOV A,R3 ;分數(shù)據(jù)放入A
CLR C ;清進位標志
CJNE A,#60H,ADDH
ADDH: JC OUT ;小于60分時中斷退出
ACALL CLR0 ;大于或等于60分時分計時單元清0
MOV R0,#65H ;指向小時計時單元
ACALL ADD1 ;小時計時單元加1小時
MOV A,R3 ;時數(shù)據(jù)放入A
CLR C ;清進位標志
CJNE A,#24H,HOUR
HOUR: JC OUT ;小于24小時中斷退出
ACALL CLR0 ;大于或等于24小時計時單元清零
OUT:
MOV DISPBUF, 65H
MOV DISPBUF+1, 64H
MOV DISPBUF+2, 63H
MOV DISPBUF+3, 62H
MOV DISPBUF+4,61H
MOV DISPBUF+5, 60H
MOV DISPBUF+6,59H
MOV DISPBUF+7,58H
RETI
;======================================================================
;清零程序
;======================================================================
CLR0:
CLR A ;清累加器
MOV @R0,A ;清當前地址單元
DEC R0 ;指向前一地址
MOV @R0,A ;前一地址單元清零
RET
;======================================================================
;加1子程序
;======================================================================
ADD1:
MOV A,@R0 ;取當前計時單元數(shù)據(jù)到A
DEC R0 ;指向前一地址
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低四位
ADD A,#01H ;A加1操作
DA A ;十進制調整
MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位變0
MOV @R0,A ;放回前一地址單元
MOV A,R3 ;取回R3中暫存數(shù)據(jù)
INC R0 ;指向當前地址單元
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ANL A,#0FH ;高四位變0
MOV @R0,A ;數(shù)據(jù)放入當前地址單元中
RET
;======================================================================
;顯示程序
;======================================================================
DISP:
;-----------------------------------------------------------
MOV A,DISPBUF ;取第一個待顯示數(shù)
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A ;
MOV P0,A ;將字形碼送P0位(段口)
CLR LED1 ;開第一位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED1 ;關閉第一位顯示器(開始準備第二位的數(shù)據(jù))
;-----------------------------------------------------------
MOV A,DISPBUF+1 ;取顯示緩沖區(qū)的第二位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR
CPL A ;
MOV P0,A ;將第二個字形碼送P0口
CLR LED2 ;開第二位顯示器
LCALL DELAY ;延時5毫秒
SETB LED2 ;關第二位顯示
;-----------------------------------------------------------
MOV A,DISPBUF+2 ;取顯示緩沖區(qū)的第三位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A ;
MOV P0,A ;將第三個字形碼送P0位(段口)
CLR LED3 ;開第三位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED3 ;關閉第三位顯示器
;-----------------------------------------------------------
MOV A,DISPBUF+3 ;取顯示緩沖區(qū)的第四位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A ;
MOV P0,A ;將第四個字形碼送P0位(段口)
CLR LED4 ;開第四位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED4 ;關閉第四位顯示器
;-----------------------------------------------------------
MOV A,DISPBUF+4 ;取顯示緩沖區(qū)的第五位
MOV DPTR ,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A
MOV P0,A ;將第五個字形碼送P0位(段口)
CLR LED5 ;開第五位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED5 ;關閉第五位顯示器
;-----------------------------------------------------------
MOV A,DISPBUF+5 ;取顯示緩沖區(qū)的第六位
MOV DPTR ,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A
MOV P0,A ;將第六個字形碼送P0位(段口)
CLR LED6 ;開第六位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED6 ;關閉第六位顯示器
;-----------------------------------------------------------
MOV A,DISPBUF+6 ;取顯示緩沖區(qū)的第七位
MOV DPTR ,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A
MOV P0,A ;將第七個字形碼送P0位(段口)
CLR LED7 ;開第七位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED7 ;關閉第七位顯示器
;-----------------------------------------------------------
MOV A,DISPBUF+7 ;取顯示緩沖區(qū)的第八位
MOV DPTR ,#DISPTAB
MOVC A,@A+DPTR ;取字形碼
CPL A
MOV P0,A ;將第八個字形碼送P0位(段口)
CLR LED8 ;開第八位顯示器位口
LCALL DELAY ;延時5毫秒
SETB LED8 ;關閉第八位顯示器
;-----------------------------------------------------------
RET
PAUSE:
ACALL DISP
JNB P3.2,K3
AJMP PAUSE
K3: acall CLEAR
CLEAR:
MOV 58H, #0
MOV 59H, #0
MOV 60H, #0
MOV 61H, #0
MOV 62H, #0
MOV 63H, #0
MOV 64H, #0
MOV 65H, #0
LJMP LOOP1
RETI
;======================================================================
;延時程序
;======================================================================
DELAY:
MOV R6,#20H ;延時約5mS
D1: MOV R7,#10H
D2: DJNZ R7,D2
DJNZ R6,D1
RET
;======================================================================
DISPTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0ffh
上一篇:18B20溫度LCD顯示程序
下一篇:計數(shù)測試數(shù)碼管顯示程序
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- 光電融合突破算力邊界:曦智科技2025 WAIC發(fā)布多維度創(chuàng)新成果
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡, 適配復雜磁場環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機精準控制
- 9.5億美元收購恩智浦MEMS傳感器業(yè)務,意法半導體 在傳感器領域的地位再升級
- 高性能電動滑板車 BLDC 電機驅動器:技術解析與應用展望
- 5G工業(yè)網(wǎng)關的“邊緣計算+AI推理”一體化設計,PLC協(xié)議解析與缺陷檢測的實時聯(lián)動
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實時疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設計
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢”多模態(tài)交互設計
- 帶上速度與激情,曬出你的TI WEBENCH 得意之作!
- 機智云Gokit3免費測評試用!用熟悉的方式,快速實現(xiàn)每一個想法!
- 有獎直播報名:賽靈思和安富利專注嵌入式視覺應用,助力人工智能和汽車輔助駕駛!
- 免費申請 | DFRobot蓋革計數(shù)器模塊
- MPS探索營 “正經玩技術”!創(chuàng)意征集 | 解鎖鋰電池充電的無限玩法!
- 有獎直播:MPS新一代微功率隔離電源模塊MIE系列產品介紹
- 有獎調查 | 您是如何采購或選擇電子元器件的?
- Keysight感恩月:每天送出一臺示波器,一次注冊即可參與
- 據(jù)說,來挑戰(zhàn)的都是“老司機”,TE答題排位賽火熱進行中,不服來戰(zhàn)!
- Littelfuse第2期 | 符合AEC-Q200 車規(guī)的保險絲/熔斷器