基于51單片機的時鐘仿真及程序,實現校時功能
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (15.77 KB, 下載次數: 80)
下載附件
2018-3-26 03:09 上傳
0.png (51.74 KB, 下載次數: 87)
下載附件
2018-3-26 03:09 上傳
單片機匯編語言源程序如下:
- ORG 0000H
- LJMP START
- ORG 000BH ;定時器/計數器T0中斷程序入口
- LJMP INTT0
- ////////////////////////////////////////////////////////
- START: MOV R0,#70H
- MOV R7,#0CH
- INIT: MOV @R0,#00H
- INC R0
- DJNZ R7,INIT ;清空70H-7CH中的內容,用于存儲時間的各位數
- MOV 72H,#10
- MOV 75H,#10 ;數碼管顯示中間的橫杠,取TAB中的第11個代碼
- MOV TMOD,#01H ;定時器方式
- MOV TL0,#0B0H ;初值設定
- MOV TH0,#03CH
- SETB EA ;開中斷,啟動
- SETB ET0
- SETB TR0
- START1: LCALL SCAN
- LCALL KEYSCAN
- SJMP START1
- DL1MS: MOV R6,#14H ;延時1MS子程序
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- DL20MS: MOV R1,#20
- DL3: LCALL DL1MS ;延時20MS子程序
- DL4: DJNZ R1,DL2
- RET
- //////////////////////////////////////////////////////
- ;數碼管顯示程序
- SCAN: MOV A,78H ;取秒的個位給70H,十位給71H
- MOV B,#0AH
- DIV AB
- MOV 71H,A
- MOV 70H,B
- MOV A,79H ;取分的個位給73H,十位給74H
- MOV B,#0AH
- DIV AB
- MOV 74H,A
- MOV 73H,B
- MOV A,7AH ;取時的個位給76H,十位給77H
- MOV B,#0AH
- DIV AB
- MOV 77H,A
- MOV 76H,B
- MOV R1,#70H ;從70H-77H循環掃描顯示
- MOV R5,#80H
- MOV R3,#08H
- SCAN1: MOV A,R5
- MOV P2,A ;位碼賦給P2
- MOV A,@R1 ;從70H儲存的秒的個位開始掃描,通過查表將段碼賦給P0
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,R5
- LCALL DL1MS
- INC R1
- MOV A,R5
- RR A ;位碼右移一位
- MOV R5,A
- DJNZ R3,SCAN1 ;8次一個循環
- MOV P2,#00H
- MOV P0,#0FFH
- RET
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
- ;“0~9”,“-”的共陽極字段碼
- INTT0: PUSH ACC ;定時器/計數器T0中斷服務程序
- PUSH PSW
- CLR ET0
- CLR TR0
- MOV TL0,#0B0H ;重裝初值
- MOV TH0,#03CH
- SETB TR0
- INC 7BH ;50ms緩沖單元
- MOV A,7BH
- CJNE A,#14H,OUTT0 ;計滿20次50ms單元清零,秒單元加一
- MOV 7BH,#00
- INC 78H ;
- MOV A,78H ;78H存秒單元
- CJNE A,#3CH,OUTT0 ;秒計滿60次,分單元加一,秒單元清零
- MOV 78H,#00
- INC 79H ;
- MOV A,79H ;79H存分單元
- CJNE A,#3CH,OUTT0 ;分計滿60次,時單元加一,分單元清零
- MOV 79H,#00
- INC 7AH ;7AH存時單元
- MOV A,7AH
- CJNE A,#18H,OUTT0 ;時單元滿24清零
- MOV 7AH,#00
- OUTT0:
- SETB ET0
- pop psw
- pop acc
- RETI
- //////////////////////////////////////////////////////////
- ;按鍵處理程序
- KEYSCAN:JNB P1.0,KEYSCAN0
- JNB P1.1,KEYSCAN1
- JNB P1.2,KEYSCAN2
- KEYOUT: RET
- KEYSCAN0: LCALL DL20MS ;防按鍵抖動程序
- JB P1.0,KEYOUT
- WAIT0: JNB P1.0,WAIT0 ;k1是高電平則順序執行,每按一次循環一下7CH計數加一
- INC 7CH
- MOV A,7CH
- CLR TR0
- CLR ET0
- CJNE A,#03H,KEYOUT ;按三次則繼續計時,按不到三次則跳轉
- MOV 7CH,#00
- SETB TR0
- SETB ET0
- SJMP KEYOUT
- KEYSCAN1: LCALL DL20MS
- JB P1.1,KEYOUT
- WAIT1: JNB P1.1,WAIT1 ;按k2值加一
- MOV A,7CH
- CJNE A,#02H,KSCAN11 ;判斷k1,按一次則跳轉到時值調整,按兩次則順序執行分值調整
- INC 79H ;分值加一
- MOV A,79H
- CJNE A,#3CH,KEYOUT ;若分值到60,則清零
- MOV 79H,#00
- SJMP KEYOUT
- KSCAN11: INC 7AH ;小時加一
- MOV A,7AH
- CJNE A,#18H,KEYOUT ;若小時滿24,則清零
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
時鐘程序.zip
(50.17 KB, 下載次數: 42)
2018-3-25 15:46 上傳
點擊文件名下載附件
7黑幣 下載積分: 黑幣 -5
|