標(biāo)題:
用單片機(jī)匯編語(yǔ)言寫(xiě)的數(shù)字鐘 按鍵調(diào)節(jié)時(shí)分秒不能用 求幫助
[打印本頁(yè)]
作者:
DPJDN
時(shí)間:
2020-7-6 21:31
標(biāo)題:
用單片機(jī)匯編語(yǔ)言寫(xiě)的數(shù)字鐘 按鍵調(diào)節(jié)時(shí)分秒不能用 求幫助
可以通過(guò)按鍵調(diào)節(jié)時(shí)分秒,用8255擴(kuò)展了IO口,并且擴(kuò)展了RAM和ROM各8KB
51hei.png
(19.63 KB, 下載次數(shù): 34)
下載附件
2020-7-7 01:30 上傳
單片機(jī)源程序如下:
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
;/**********主程序***********/
MAIN:
MOV SP,#60H ;確立堆棧區(qū)
MOV PSW,#00H
MOV R0,#20H ;RAM區(qū)首地址
MOV R7,#5FH ;RAM區(qū)單元個(gè)數(shù)
QL:
MOV @R0,#00H ;RAM清零
INC R0
DJNZ R7,QL
MOV IP,#02H ;IP初始化,優(yōu)先定時(shí)器0
MOV IE,#82H ;IE初始化
MOV TMOD,#01H ;定時(shí)器0方式1工作
LCALL PP ;調(diào)P.子程序
NEXT:
LCALL KEY ;按鍵檢測(cè)子程序
JB ACC.0,RUNF ;A鍵按下運(yùn)行
LCALL DISP ;調(diào)用顯示子程序
SJMP NEXT
RUNF:
LCALL OUTT ;調(diào)傳送子程序
LCALL TIME ;開(kāi)電子鐘
JK:
LCALL DISP
LCALL KEY
JZ JK
LCALL ANKEY ;調(diào)用鍵功能子程序
LCALL DISP
SJMP JK
;/***P點(diǎn)顯示的8LED段碼初始化子程序***/
PP:
MOV 37H,#12 ;P點(diǎn)編碼送寄存器,對(duì)應(yīng)最左LED (共陽(yáng)極,0CH )
MOV R0,#30H ;第8個(gè)LED,最右LED,段碼存儲(chǔ)的地址
MOV R7,#07H ;第8到第2個(gè)LED,共7個(gè),初始化段碼顯示空白
PPP:
MOV @R0,#10 ;顯示空白
INC R0
DJNZ R7,PPP
RET
;/*********鍵掃描子程序***********/
KEY:
LCALL KEYS ;調(diào)用鍵值處理子程序
JZ EXIT ;沒(méi)有鍵按下轉(zhuǎn)到返回
LCALL DISP
LCALL DISP ;調(diào)用顯示去抖動(dòng)
LCALL KEYS
JZ EXIT
MOV B,20H ;保存鍵值
KEYSF:
LCALL KEYS
JZ KEYY ;鍵釋放,轉(zhuǎn)到恢復(fù)鍵值
LCALL DISP ;調(diào)顯示子程序延時(shí)
AJMP KEYSF ;等到鍵釋放
KEYY:
MOV A,B ;鍵值送A
EXIT: RET
KEYS:
;MOV P1,#0FFH ;先向P1口寫(xiě)1
;MOV A,P1 ;P1口值送A (有按鍵按下,對(duì)應(yīng)0,取反后1)
;CPL A
;ANL A,#0FH ;保存P1口的低4位
;MOV 20H,A ;A值送20H保存
;RET
;MOV A,#82H
;MOV DPTR,#0003H
;MOVX @DPTR,A
;MOV DPTR,#0001H
;MOVX A,@DPTR
;CPL A
;ANL A,#0FH
;MOV 20H,A
;RET
CLR A
MOV A,P3
CPL A
ANL A,#0FH
MOV 20H,A
RET
;/********鍵功能子程序********/
ANKEY:
CLR EA ;關(guān)中斷
CHECK:
JB TR0,YXZ ;判斷是否運(yùn)行
K0:
CJNE A,#01H,K1
AJMP RUN ;A鍵按下,恢復(fù)運(yùn)行,轉(zhuǎn)運(yùn)行
K1:
CJNE A,#02H,K2
AJMP KEY1 ;轉(zhuǎn)時(shí)調(diào)整
K2:
CJNE A,#04H,K3
AJMP KEY2 ;轉(zhuǎn)分調(diào)整
K3:
CJNE A,#08H,OUT ;轉(zhuǎn)
AJMP KEY3 ;轉(zhuǎn)秒調(diào)整
YXZ:
JB ACC.0,STOP ;A鍵按下,暫停
AJMP OUT
KEY1:
MOV R0,#45H ;時(shí)調(diào)整
LCALL ADD1 ;調(diào)加一子程序
CLR C
CJNE A,#24H,OUTT ;轉(zhuǎn)傳送顯示數(shù)據(jù)子程序
ACALL CLR0 ;調(diào)時(shí)間清理子程序
AJMP OUTT
KEY2:
MOV R0,#43H ;分調(diào)整
LCALL ADD1
CLR C
CJNE A,#60H,OUTT
ACALL CLR0
AJMP OUTT
KEY3:
MOV R0,#41H ;秒調(diào)整
ACALL ADD1
CLR C
CJNE A,#60H,OUTT
ACALL CLR0
;/*****傳送顯示數(shù)據(jù)子程序*****/
OUTT:
MOV 30H,40H ;秒顯示單元40H-41H
MOV 31H,41H
MOV 32H,#11 ;"-"
MOV 33H,42H ;分顯示單元42H-43H
MOV 34H,43H
MOV 35H,#11 ;"-"
MOV 36H,44H ;時(shí)顯示單元44H-45H
MOV 37H,45H
RET
STOP:
CLR TR0
RET
RUN:
LCALL TIME ;調(diào)運(yùn)行電子鐘子程序
OUT:
SETB EA ;無(wú)鍵按下或完成功能跳出
RET
;/*****運(yùn)行電子鐘子程序*****/
TIME:
SETB EA
MOV TL0,#0B0H ;3CB0H
MOV TH0,#3CH
MOV R4,#20 ;50ms,20次循環(huán)
SETB TR0 ;啟動(dòng)定時(shí)器0
RET
;/******定時(shí)器0中斷處理子程序******/
INTT0:
PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV TL0,#0B0H ;重新設(shè)置定時(shí)初值
MOV TH0,#3CH
SETB TR0
DJNZ R4,OUTT0 ;r4-1 != 0 1秒未到,轉(zhuǎn)OUTTO
ADDSS:
MOV R4,#14H ;20次計(jì)數(shù)
MOV R0,#41H ;秒十位
ACALL ADD1
CLR C
CJNE A,#60H,ADDMM ;1分到
ADDMM:
JC OUTT0 ;1分,60秒未到
ACALL CLR0 ;1分到,清零
MOV R0,#43H ;分十位
ACALL ADD1
CLR C
CJNE A,#60H,ADDHH ;1小時(shí)到
ADDHH:
JC OUTT0
ACALL CLR0
MOV R0,#45H ;時(shí)十位
ACALL ADD1
CLR C
CJNE A,#24H,HOUR ;1天到
HOUR:
JC OUTT0
ACALL CLR0
OUTT0:
MOV 30H,40H ;秒顯示單元40H-41H
MOV 31H,41H
MOV 32H,#11 ;"-"
MOV 33H,42H ;分顯示單元42H-43H
MOV 34H,43H
MOV 35H,#11 ;"-"
MOV 36H,44H ;時(shí)顯示單元44H-45H
MOV 37H,45H
POP PSW
POP ACC
SETB ET0
RETI
;/*****時(shí)間清理子程序*****/
CLR0:
CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
;/*****加一子程序*****/
ADD1:
MOV A ,@R0 ;取十位
DEC R0
SWAP A
ORL A,@R0 ;組合十位與個(gè)位
ADD A,#01H ;加1
DA A ;十進(jìn)制調(diào)整
MOV R3,A ;暫存
ANL A,#0FH ;屏蔽十位
MOV @R0,A ;放入個(gè)位單元
MOV A,R3 ;取值
INC R0
SWAP A
ANL A,#0FH ;屏蔽個(gè)位
MOV @R0,A ;放入十位單元
MOV A,R3 ;數(shù)值放入A中等待判斷
RET
;/*****顯示子程序*****/
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
匯編語(yǔ)言數(shù)字鐘.zip
(64.58 KB, 下載次數(shù): 4)
2020-7-6 21:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
yycnnba
時(shí)間:
2021-1-2 20:45
你代碼呢
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1