|
這是基于單片機(jī)的簡易數(shù)字時(shí)鐘,能顯示秒、分、時(shí)。其中第一個(gè)按鍵按下后是時(shí)加一,第二個(gè)按鍵按下后是分加一,第三個(gè)按鍵是清零
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (102.97 KB, 下載次數(shù): 41)
下載附件
2022-5-6 04:20 上傳
2.png (70.93 KB, 下載次數(shù): 39)
下載附件
2022-5-5 23:39 上傳
1.png (78.41 KB, 下載次數(shù): 45)
下載附件
2022-5-5 23:39 上傳
單片機(jī)匯編語言程序:
- ;====================================================================
- ; Main.asm file generated by New Project wizard
- ;
- ; Created: 周五 5月
- ; Processor: 80C51
- ; Compiler: ASEM-51 (Proteus)
- ;====================================================================
- $NOMOD51
- $INCLUDE (8051.MCU)
- ;====================================================================
- ; DEFINITIONS
- ;====================================================================
- ;====================================================================
- ; VARIABLES
- ;====================================================================
- ;====================================================================
- ; RESET and INTERRUPT VECTORS
- ;====================================================================
- ; Reset Vector
-
- ORG 0000H;程序開始地址
- LJMP MAIN;跳到MAIN
- ORG 000BH;TO 中斷程序入口
- LJMP INTT0;跳到To開始執(zhí)行程序
- ORG 0100H
- MAIN:
- MOV @R0,#70H;準(zhǔn)備7OH-79H 10個(gè)字節(jié)空間
- MOV R7,#09H
- XIANSHICHUSHIHUA:
- MOV @R0,#00H;將70H-79H初始化為00H
- INC R0
- DJNZ R7,XIANSHICHUSHIHUA
- MOV TMOD,#01H;設(shè)To為16位定時(shí)器
- MOV TL0,#0B0H;賦初始值
- MOV TH0,#3CH
- SETB EA;CPU開中斷
- SETB ET0;允許To中斷
- SETB TR0;啟動(dòng)To
- MOV R4,#14H;1S設(shè)定初始值
- LOOP:
- LCALL XIANSHI;調(diào)用顯示程序
- JB P1.0,LOOP1;判斷P1.0有無按下
- LCALL HOUR_SET;調(diào)用小時(shí)設(shè)定程序
- AJMP LOOP
- LOOP1:
- JB P1.1,LOOP2;判斷P1.1有無按下
- LCALL MIN_SET;調(diào)用分設(shè)定程序
- AJMP LOOP
- LOOP2:
- JB P1.2,LOOP3;判斷P1.2有無按下
- LCALL CLR0;調(diào)用清零程序,這里只清零秒
- AJMP LOOP
- LOOP3:
- AJMP LOOP
- HOUR_SET:
- ACALL XIANSHI;調(diào)用顯示程序
- JNB P1.0,HOUR_SET ;P1.0按下跳到調(diào)小時(shí)程序
- INC 78H;小時(shí)的個(gè)位加1
- MOV R6,78H
- CJNE R6,#10,HOUR1 ;個(gè)位不為10跳到HOUR1
- MOV 78H,#0;個(gè)位清零
- INC 79H;十位加1
- JMP EXIT;跳到EXIT
- HOUR1:
- MOV R6,78H
- CJNE R6,#4,EXIT;個(gè)位不為4跳到EXIT
- MOV R6,79H
- CJNE R6,#2,EXIT;十位不為2跳到EXIT
- MOV 78H,#0;小時(shí)清零
- MOV 79H,#0
- EXIT:
- RET;調(diào)時(shí)返回
- MIN_SET:
- CALL XIANSHI;調(diào)用顯示程序
- JNB P1.1,MIN_SET;P1.1按下跳到調(diào)分程序
- INC 76H;分的個(gè)位加1
- MOV R5,76H
- CJNE R5,#10,EXIT ;個(gè)位不為10 跳到 MIS1
- MOV 76H,#0;個(gè)位清零
- INC 77H;十位加1
- MOV R5,77H
- CJNE R5,#6,EXIT;十位不為6跳到MIS1
- MOV 77H,#0;分清零
- MOV 76H,#0
- RET
- INTT0:
- PUSH ACC;入棧,保護(hù)現(xiàn)場(chǎng)
- PUSH PSw
- CLR ET0;關(guān)閉中觀允許
- CLR TR0;關(guān)閉中斷
- MOV A,#0B7H;中斷響應(yīng)時(shí)間同步修正
- ADD A,TL0;低8位初值修正
- MOV TL0 ,A
- MOV A,#3CH;高8位初值修正
- ADDC A,TH0
- MOV TH0,A
- SETB TR0;開啟定時(shí)器TO
- DJNZ R4,OUT;20 次中斷未到中斷退出
- ADDS:
- MOV R4,#14H;20次中斷到重賦初值
- MOV R0,#71H;指向秒計(jì)時(shí)單元
- ACALL ADD1;調(diào)用ADD1
- MOV A,R3;秒數(shù)據(jù)放入A
- CLR C;清零進(jìn)位標(biāo)志
- CJNE A,#60,ADDMM;秒是否到了60.是則跳轉(zhuǎn)
- ADDMM:
- JC OUT;小雨60秒中斷退出
- ACALL CLR0;等于60秒調(diào)用 CLRO清零秒
- MOV R0,#77H;指向分計(jì)時(shí)單元
- ACALL ADD1;調(diào)用 ADD1
- MOV A,R3;分?jǐn)?shù)據(jù)放入A
- CLR C;清零進(jìn)位標(biāo)志
- CJNE A,#60,ADDH;分是否到了60,是則跳轉(zhuǎn)
- ADDH:
- JC OUT;小于60分時(shí)中斷退出
- ACALL CLR0;等于60分調(diào)用 CLRO清零秒
- MOV R0,#79H;指向時(shí)計(jì)時(shí)單元
- ACALL ADD1;調(diào)用ADD1
- MOV A,R3;時(shí)數(shù)據(jù)放入A
- CLR C;清零進(jìn)位標(biāo)志
- CJNE A,#24H,HOUR ;時(shí)是否到了24是則跳轉(zhuǎn)
- HOUR:
- JC OUT;小于24時(shí)時(shí)中斷退出
- ACALL CLR0;調(diào)用 CLRO
- OUT:
- MOV 72H,76H;將分的存儲(chǔ)地址轉(zhuǎn)移
- MOV 73H,77H
- MOV 74H,78H;將時(shí)的存儲(chǔ)地址轉(zhuǎn)移
- MOV 75H,79H
- POP PSW;恢復(fù)現(xiàn)場(chǎng)
- POP ACC
- SETB ET0
- RETI
- CLR0:
- CLR A;清零A
- MOV @R0,A;清零RO存放地址中的數(shù)據(jù)
- DEC R0;RO地址減1
- MOV @R0,A
- RET
- ADD1:
- MOV A,@R0;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到A
- DEC R0;指向前一地址
- SWAP A;A中數(shù)據(jù)高四位與低四位交換
- ORL A,@R0;前一地址中數(shù)據(jù)放入A中低四位
- ADD A,#01H;A加1操作
- DA A;十進(jìn)制調(diào)整
- MOV R3,A;移入R3寄存器
- ANL A,#0FH;高四位變0
- MOV @R0,A;放回前一地址單元
- MOV A,R3;取回R3中暫存數(shù)據(jù)
- INC R0;指向當(dāng)前地址單元
- SWAP A;A中數(shù)據(jù)高四位與低四位交換
- ANL A,#0FH;高四位變0
- MOV @R0,A;數(shù)據(jù)放入當(dāng)削地址單元中
- RET;子程序返回
- XIANSHI:
- MOV R1,#70H;指向顯示數(shù)據(jù)首址
- MOV R5,#01H;掃描控制字初值
- PLAY:
- MOV A,R5;掃描字放入A
- MOV P2,A;從P2口輸出
- MOV A,@R1;取顯示數(shù)據(jù)到A
- MOV DPTR,#TAB;取段碼表地址
- MOVC A,@A+DPTR;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
- MOV P0,A;段碼放入PO口
- LCALL DL1MS;顯示1MS
- INC R1;指向下一地址
- MOV A,R5;掃描控制字放入A
- JB ACC.5,ENDOUT ;ACC.5=0時(shí)一次顯示結(jié)束
- RL A;A中數(shù)據(jù)循環(huán)左移
- MOV R5,A;放回R5內(nèi)
- AJMP PLAY;跳回PLAY循環(huán)
- ENDOUT:
- CLR P2.5;一次顯示結(jié)束,P2口復(fù)位
- RET;子程序返回
- TAB:
- DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- DL1MS: ;1毫秒延時(shí)程序
- MOV R6,#14H
- DL1:
- MOV R7,#19H
- DL2:
- DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- END
- ;====================================================================
- ; CODE SEGMENT
- ;====================================================================
- ;====================================================================
-
復(fù)制代碼
51hei.png (2.52 KB, 下載次數(shù): 44)
下載附件
2022-5-6 04:20 上傳
Proteus8.8仿真文件下載:
時(shí)鐘.zip
(22.74 KB, 下載次數(shù): 39)
2022-5-5 23:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|