當前位置:編程學習大全網 - 編程語言 - 設計電子時鐘 要用AT89S51單片機的定時器實現,用4位數碼管顯示,用點的閃爍表示秒,我需要電路原理圖

設計電子時鐘 要用AT89S51單片機的定時器實現,用4位數碼管顯示,用點的閃爍表示秒,我需要電路原理圖

帶鬧鐘智能電子鐘

源程序

源程序如下: ORG 0000H ;程序開始入口

LJMP START

ORG 0003H ;外中斷0中斷程序入口

RETI

ORG 000BH ;定時器T0中斷程序入口

LJMP INTT0 ;跳至INTTO執行

ORG 0013H ;外中斷1中斷程序入口

RETI

ORG 001BH ;定時器T1中斷程序入口

LJMP INTT1

ORG 0023H ;串行中斷程序入口地址

RETI

;---------------主程序----------------------;

START:MOV R0,#70H ;70給R0,清70-7FH顯示內存

MOV R7,#0FH

CLEARDISP:MOV @R0,#00H ;0給R0中的數為地址的內存中存放(70H)

INC R0

DJNZ R7,CLEARDISP

MOV 78H,#2 ;默認時間為12:00,鬧鐘5:00

MOV 79H,#1

MOV 74H,#2 ;防止上電時數碼管顯示00小時

MOV 75H,#1

MOV 66H,#1 ;中斷退出時66H為1時,分、時計時單元數據移入顯存標誌

MOV 68H,#1 ;上電默認鬧鐘開狀態

MOV 7DH,#6 ;鬧鐘時十位

MOV 7CH,#3

MOV 69H,#0

MOV 7AH,#0AH ;放入"熄滅符"數據

MOV TMOD,#11H ;設T0、T1為16位定時器

MOV TL0,#0B0H ;50MS定時初值(T0計時用)

MOV TH0,#3CH

SETB EA ;總中斷開放

SETB ET0 ;允許T0中斷

SETB TR0 ;T0定時器開始計時

MOV R4,#14H ;1秒定時用初值(50MS×20)

START1:LCALL DISPLAY ;顯示子程序

LCALL BEEP ;鬧鐘查詢

JNB P1.7,SETTIME ;P1.7口為0時轉時間調整程序

JMP START1 ;P1.7口為1時跳回START1

;-----------------------時間鬧鐘調整系統--------------------------;

NFLAG:MOV A,68H ;設置鬧鐘開關狀態

CJNE A,#1,BEE68

MOV 68H,#0

JMP E6

BEE68:MOV 68H,#1

E6:MOV 66H,#8 ;中斷退出66H不為1時分、時計時單元數據移入顯存標誌

MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

LCALL DDL

LCALL DDL

MOV 72H,68H

MOV 73H,69H

MOV 74H,7AH

MOV 75H,7AH

LCALL DDL

LCALL DDL

MOV 66H,#1

LJMP START1

SETTIME:LCALL DDL

JB P1.7,NFLAG ;鍵按下時間小於1秒,設置鬧鐘開關狀態並查看鬧鐘時間,不關走時,確保準確,大於1秒調時

MOV TL1,#0B0H ;T1閃爍定時初值

MOV TH1,#3CH

MOV R2,#06H ;進入調時狀態,賦閃爍定時初值

MOV 66H,#8 ;調鬧鐘時保持走時,關閉時鐘顯示數據

SETB ET1 ;允許T1中斷

SETB TR1 ;開啟定時器T1

SET1:LCALL DISPLAY ;調用顯示,防止鍵按下無顯示

JNB P1.7,SET1 ;P1.7口為0等待鍵釋放

MOV R5,#00H ;清設置類型閃爍標誌

SETN1:INC R5 ;鬧鐘分調整

SET5:LCALL DISPLAY

JB P1.7,SET5

SEETN1:LCALL DDL ;有鍵按下大於1秒分時間連續加(0.5秒加1),小於1秒轉調時狀態

JB P1.7,SET6 ;鍵釋放查詢,鍵釋放自動轉調時

MOV R0,#7CH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,HHN1

HHN1:JC SEETN1

LCALL CLR0

JMP SEETN1

SET6:INC R5 ;鬧鐘時調整

SEET6:LCALL DISPLAY

JB P1.7,SEET6

SEETNH1:LCALL DDL

JB P1.7,SETF

MOV R0,#7EH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU1

HOUU1:JC SEETNH1

LCALL CLR0

JMP SEETNH1

SETF:LCALL DISPLAY

JB P1.7,SETF

LCALL DDL

JNB P1.7,SETOUT ;短按調時,長按退出

CLR ET0

CLR TR0

MOV 70H,#00H ;設定後的時間從00秒開始走時

MOV 71H,#00H

INC R5

SET3:LCALL DISPLAY

JB P1.7,SET3

SETMM:LCALL DDL

JB P1.7,SET4

MOV R0,#77H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,MMH

MMH:JC SETMM

LCALL CLR0

AJMP SETMM

SET4:INC R5

SEET4:LCALL DISPLAY

JB P1.7,SEET4

SETHH:LCALL DDL

JB P1.7,SETOUT1

MOV R0,#79H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU

HOUU:JC SETHH

LCALL CLR0

AJMP SETHH

SETOUT1:SETB ET0

SETB TR0 ;計時開始

SETOUT:MOV R5,#00H ;清設置類型閃爍標誌

CLR TR1 ;關閉T1

CLR ET1 ;關T1中斷

MOV 66H,#1

SETOUT2:LCALL DISPLAY

JNB P1.7,SETOUT2

LJMP START1

;--------------------------延時1秒鐘-----------------------;

DDL:MOV 18H,#36

DDL0:MOV 17H,#239

DDL1:LCALL DISPLAY

DJNZ 17H,DDL1

DJNZ 18H,DDL0

RET

;----------------------------T0中斷程序------------------------;

INTT0: PUSH ACC ;打包

PUSH PSW

CLR ET0

CLR TR0

MOV A,#0B7H

ADD A,TL0

MOV TL0,A

MOV A,#3CH

ADDC A,TH0

MOV TH0,A

SETB TR0

DJNZ R4, OUTT0 ;20次中斷未到中斷退出

ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值

MOV R0,#71H ;指向秒計時單元(70-71H)

ACALL ADD1 ;調用加1程序(加1秒操作)

MOV A,R3 ;秒數據放入A(R3為2位十進制數組合)

CLR C ;清進位標誌

CJNE A,#60H,ADDMM

ADDMM: JC OUTT01 ;小於60秒退出

ACALL CLR0 ;等於或大於60秒清0

MOV R0,#77H ;指向分計時單元(76H-77H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,ADDHH

ADDHH: JC OUTT0

ACALL CLR0

MOV R0,#79H ;指向小時計時單元(78H-79H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUR

HOUR: JC OUTT0

ACALL CLR0

OUTT0: MOV A,66H ;查詢標誌

CJNE A,#1,OUTT01

MOV 72H,76H ;中斷退出時將分、時計時單元數據移入對應顯示單元

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

OUTT01:POP PSW ;出棧

POP ACC

SETB ET0 ;開放T0

RETI ;中斷返回

;---------------------------加1程序--------------------------;

ADD1: MOV A,@R0 ;取當前計時單元數據到A

DEC R0 ;指向前壹地址

SWAP A ;A中數據高四位與低四位交換

ORL A,@R0 ;前壹地址中數據放入A中低四位

ADD A,#01H ;A加1操作

DA A ;十進制調整

MOV R3,A ;移入R3寄存器

ANL A,#0FH ;高四位變0

MOV @R0,A ;放回前壹地址單元

MOV A,R3 ;取回R3中暫存數據

INC R0 ;指向當前地址單元

SWAP A ;A中數據高四位與低四位交換

ANL A,#0FH ;高四位變0

MOV @R0,A ;數據放入當削地址單元中

RET

CLR0: CLR C

CLR A ;清累加器

MOV @R0,A ;清當前地址單元

DEC R0 ;指向前壹地址

MOV @R0,A ;前壹地址單元清0

RET ;子程序返回

;-------------------------調時閃爍程序----------------------;

INTT1: PUSH ACC

PUSH PSW

MOV TL1,#0B0H

MOV TH1,#3CH

DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)

MOV R2,#06H ;重裝0.3秒定時用初值

CPL 02H ;0.3秒定時到對閃爍標誌取反

JB 02H,FLASH1 ;02H位為1時顯示單元"熄滅"

MOV A,R5

CJNE A,#01H,NL

JMP NNN1

NL:CJNE A,#02H,NL1

LJMP NNN1

NL1:CJNE A,#03H,NL2

LJMP NLL

NL2:CJNE A,#04H,INTT1OUT

LJMP NLL

NLL:MOV 72H,76H

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

NNN1:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

INTT1OUT:POP PSW ;恢復現場

POP ACC

RETI ;中斷退出

FLASH1:MOV A,R5

CJNE A,#01H,ML

LJMP MNN1

ML:CJNE A,#02H,ML1

LJMP MNN2

ML1:CJNE A,#03H,MN

LJMP MLL

MN:CJNE A,#04H,INTT1OUT

LJMP MHL

MLL:MOV 72H,7AH

MOV 73H,7AH ;顯示單元(72-73H),將不顯示分數據

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

MHL:MOV 72H,76H

MOV 73H,77H

MOV 74H,7AH ;顯示單元(74-75H),小時數據將不顯示

MOV 75H,7AH

AJMP INTT1OUT

MNN1:MOV 72H,7AH

MOV 73H,7AH ;顯示單元(72-73H),將不顯示鬧鐘分數據

MOV 74H,7DH

MOV 75H,7EH

AJMP INTT1OUT

MNN2:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7AH

MOV 75H,7AH ;顯示單元(74-75H),鬧鐘小時數據將不顯示

AJMP INTT1OUT

;-------------------------顯示-------------------------------;

DISPLAY:MOV DPTR,#DISDATA

MOV A,70H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.0

NOP

NOP

NOP

SETB P1.0

MOV A,71H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.1

NOP

NOP

NOP

SETB P1.1

MOV A,72H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.2

NOP

NOP

查詢鬧鐘分十位

CJNE A,7CH,BEERE

BB:CLR P1.6

LCALL DDL

SETB P1.6

LCALL DDL

JNB P1.7,BEERR

BEERE:RET

BEERR:SETB P1.6

MOV 68H,#0

LCALL DISPLAY

JNB P1.7,BEERR

JMP BEERE

DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH ;0123456789空白

END

  • 上一篇:java課程分享java編程工程師的開發環境怎麽設置
  • 下一篇:許昌鯉魚IT計算機電腦軟件編程培訓中心告訴妳程序員面試技巧?
  • copyright 2024編程學習大全網