天天看點

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

這是我們設計的單片機電子鐘/計時器學習闆,它采用6位LED數位管顯示時、分、秒,以24小時計時方式。可以通過按鍵實作時分調整、秒表/時鐘功能轉換、省電(關閉顯示)等功能。我們能提供的完整的彙編語言源程式清單及電路原理設計圖有助于學習者進行分析和進行實驗驗證。

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...
stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

硬體參數闆上資源:MCU STC89C52、6位Led顯示、3位按鍵。電源部分為5V直流電壓,需要穩壓、濾波電路,不能接反!

51單片機做的電子鐘在很多地方都有介紹, 對于單片機學習者來說這個程式基本上是一道門檻,掌握了電子鐘程式, 基本上可以說51單片機就掌握了80%。常見的電子鐘程式由顯示部分、計算部分、時鐘調整部分構成,本産品硬體上完全支援倒計時器,客戶隻要自己修改程式就能實作倒計時功能。

為了實作LED顯示器的數字顯示,可以采用靜态顯示法和動态顯示法。由于靜态顯示法需要資料鎖存器等硬體,接口複雜一些。考慮時鐘顯示隻有六位,且系統沒有其它複雜的處理任務,是以決定采用動态掃描法實作LED的顯示。單片機采用易購的AT89S51系列,這樣單片機可具有足夠的空餘硬體資源實作其它的擴充功能,硬體系統的總體構成如下圖所示:視訊示範

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

http://xie-gang.com/SZDZZ.htm視訊示範

該闆采用AT89S51單片機,最小化應用設計,采用共陽七段LED顯示器,P0口輸出段碼資料,P2.0~P2.5做列掃描輸出,P1.0,P1.2,P1.3,接三個按鍵開關,用以調時及功能設定。為了提高共陽數位管的驅動電壓,用9012做電源驅動輸出。采用12M晶振,有利于提高秒計時的精度。

本設計中,計時采用定時器T0中斷完成,其餘狀态循環調用顯示子程式,當端口開關按下時,轉入相應功能程式。其主程式執行流程圖見下左圖:

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...
stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

數位管顯示的資料存放在記憶體單元70H~75H中。其中70H~71H存放秒資料,72H~73H存放分資料,74H~75H存放時資料,每一位址單元内均為十進制BCD碼。由于采用軟體動态掃描實作資料顯示功能,顯示用十進制BCD碼資料的對應段碼存放在ROM表中。顯示時,先取出70H~~75H某一位址中的資料,然後查得對應的顯示用段碼,并從P0口輸出,P2口将對應的數位管選中供電,就能顯示該位址單元的資料值。

定時器T0用于時間計時。定時溢出中斷周期可分别設為50mst和10ms。中斷進入後,先判斷是時鐘計時還是秒表計時,時鐘計時累計中斷20次(即1s)時,對秒計數單元進行加1操作,秒表計時每10ms進行加1操作。時鐘計數單元位址分别在70H~71H(秒)、76H~77H(分)和78H~79H(時),最大計時值為23時59分59秒。而秒表計數單元位址也在70H~~71H(0.01毫秒)、76H~~77H(秒)和78H~~79H(分),最大計時值為99分59.99秒。7AH單元記憶體放“熄滅符”資料(#0AH)。在計數單元中采用十進制BCD碼計數,滿60(秒表功能時有100)進位,T0中斷服務程式執行流程見上圖右

T1中斷服務程式用于訓示調整單元數字的亮閃。在時間調整狀态下,每過0.3S将對應單元的顯示資料換成“熄滅符”資料(#0AH)。這樣在調整時間時,對應調整單元的顯示資料會間隔閃亮。

調時功能程式的設計方法是:按下P1.0口按鍵,若按下時間短于1 s則進入省電狀态(數位管不亮,時鐘不停);否則進入調分狀态,等待操作,此時計時器停止走動。當再按下按鈕時,若按下時間短于0.5s,則時間加1分;若按下時間長于0.5s,則進入[小]時調整狀态。在[小]時調整狀态下,當按鍵按下的時間長于0.5s時,退出調整狀态,時鐘繼續走動。P1.1口按鍵在調時狀态下可實作減1功能。

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

使用方法:按下K1按鍵,如果按下時間小于1秒,就會進入省電模式,這時數位管熄滅但是時鐘仍然運作。如果按下K1按鍵時間大于1秒,就會進入調分狀态,此時計時器停止走動等待操作,這時中間的兩位00會閃爍,這時當按下K1按鍵時間小于0.5秒時,時間資訊就會加1(機關分鐘);若時間大于0.5秒,這時左邊的兩位00會閃爍,進入小時調整,在小時調整狀态下按下S6按鍵時間小于0.5秒時,時間資訊就會加1(機關小時),如果按下按鍵時間大于0.5S時,就會退出調整狀态,時鐘繼續走動。

配件:采用PL2303晶片的USB轉TTL序列槽子產品 每個15元 含一根4芯杜邦連接配接線

stm8s單片機2位數位管顯示_AT89S51單片機對6位LED數位管實作顯示時計方式的設計...

你還可以另外購買我們的PL2303子產品,就能實作STC晶片的線上程式下載下傳。隻要連接配接3根線:一根序列槽入R連接配接單片機的P3.1TXD、一根序列槽出D連接配接單片機的P3.0 RXD、一根地線-連接配接單片機的電源地即可。

然後将PL2303的USB轉序列槽子產品插入電腦的USB口(已經安裝好2303的驅動),然後在STC程式設計軟體界面中選擇單片機型号STC89C52RC,選擇COM6(具體按電腦實際虛拟出的序列槽号)波特率選擇9600,點選“OPEN FILE”選擇你的燒寫檔案,點選“下載下傳”按鈕,然後接通超音波測距成品學習闆的電源,3秒左右就能完成程式下載下傳并運作。

以下是部分彙編源程式,購買我們産品後我們可以通過電子郵件将完整的單片機彙編源程式和燒寫檔案發送給客戶。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; AT89S51時鐘程式 ;;(該程式不全,不要直接使用。購買産品後提供全部程式和圖紙)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

; 定時器T0、T1溢出周期為50MS,T0為秒計數用, T1為調整時閃爍用,

; P1.0、P1.1、P1.2為調整按鈕,P0口 為字元輸出口,采用共陽顯示管。

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 中斷入口程式 ;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

ORG 0000H ;程式執行開始位址

LJMP START ;跳到标号START執行

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

RETI ;外中斷0中斷傳回

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

LJMP INTT0 ;跳至INTTO執行

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

RETI ;外中斷1中斷傳回

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

LJMP INTT1 ;跳至INTT1執行

ORG 0023H ;串行中斷程式入口位址

RETI ;串行中斷程式傳回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 主 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

START: LCALL ST ;上電顯示年月日及班級學号

MOV R0,#70H ;清70H-7AH共11個記憶體單元

MOV R7,#0BH ;

CLEARDISP: MOV @R0,#00H ;

INC R0 ;

DJNZ R7,CLEARDISP ;

MOV 20H,#00H ;清20H(标志用)

MOV 7AH,#0AH ;放入“熄滅符”資料

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

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

MOV TH0,#3CH ;50MS定時初值

MOV TL1,#0B0H ;50MS定時初值(T1閃爍定時用)

MOV TH1,#3CH ;50MS定時初值

SETB EA ;總中斷開放

SETB ET0 ;允許T0中斷

SETB TR0 ;開啟T0定時器

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

START1: LCALL DISPLAY ;調用顯示子程式

JNB P1.0,SETMM1 ;P1.0口為0時轉時間調整程式

JNB P1.1,FUNSS ; 秒表功能,P1.1按鍵調時時作減1加能

JNB P1.2,FUNPT ;STOP,PUSE,CLR

SJMP START1 ;P1.0口為1時跳回START1

SETMM1: LJMP SETMM ;轉到時間調整程式SETMM

FUNSS: LCALL DS20MS

JB P1.1,START1

WAIT11: JNB P1.1,WAIT11

CPL 03H

MOV 70H,#00H

MOV 71H,#00H

MOV 76H,#00H

MOV 77H,#00H

MOV 78H,#00H

MOV 79H,#00H

AJMP START1

FUNPT: LCALL DS20MS

JB P1.2,START1

WAIT22: JNB P1.2,WAIT21

CLR ET0

CLR TR0

WAIT33: JB P1.2,WAIT31

LCALL DS20MS

JB P1.2,WAIT33

WAIT66: JNB P1.2,WAIT61

MOV R0,#70H ;清70H-79H共10個記憶體單元

MOV R7,#0AH ;

CLEARP: MOV @R0,#00H ;

INC R0 ;

DJNZ R7,CLEARP ;

WAIT44: JB P1.2,WAIT41

LCALL DS20MS

JB P1.2,WAIT44

WAIT55: JNB P1.2,WAIT51

SETB ET0

SETB TR0

AJMP START1

WAIT21: LCALL DISPLAY

AJMP WAIT22

WAIT31: LCALL DISPLAY

AJMP WAIT33

WAIT41: LCALL DISPLAY

AJMP WAIT44

WAIT51: LCALL DISPLAY

AJMP WAIT55

WAIT61: LCALL DISPLAY

AJMP WAIT66

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 1秒計時程式 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中斷服務程式

INTT0: PUSH ACC ;累加器入棧保護

PUSH PSW ;狀态字入棧保護

CLR ET0 ;關T0中斷允許

CLR TR0 ;關閉定時器T0

JB 03H,FSS

MOV A,#0B7H ;中斷響應時間同步修正

ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重裝初值(低8位修正值)

MOV A,#3CH ;高8位初值修正

ADDC A,TH0 ;

MOV TH0,A ;重裝初值(高8位修正值)

SETB TR0 ;開啟定時器T0

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

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

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

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

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

CLR C ;清進位标志

CJNE A,#60H,ADDMM ;

ADDMM: JC OUTT0 ;小于60秒時中斷退出

ACALL CLR0 ;大于或等于60秒時對秒計時單元清0

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

ACALL ADD1 ;分計時單元加1分鐘

MOV A,R3 ;分資料放入A

CLR C ;清進位标志

CJNE A,#60H,ADDHH ;

ADDHH: JC OUTT0 ;小于60分時中斷退出

ACALL CLR0 ;大于或等于60分時分計時單元清0

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

ACALL ADD1 ;小時計時單元加1小時

MOV A,R3 ;時資料放入A

CLR C ;清進位标志

JB 03H,OUTT0 ;秒表時最大數為99

CJNE A,#24H,HOUR ;

HOUR: JC OUTT0 ;小于24小時中斷退出

ACALL CLR0 ;大于或等于24小時小時計時單元清0

OUTT0: MOV 72H,76H ;中斷退出時将分、時計時單中繼資料移

MOV 73H,77H ;入對應顯示單元

MOV 74H,78H ;

MOV 75H,79H ;

POP PSW ;恢複狀态字(出棧)

POP ACC ;恢複累加器

SETB ET0 ;開放T0中斷

RETI ;中斷傳回

;秒表計時程式(10MS加1),低2位為0.1、0.01秒,中間2位為秒,最高位為分。

;最大計數值為99

FSS: MOV A,#0F7H ;中斷響應時間同步修正,重裝初值(10ms)

ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重裝初值(低8位修正值)

MOV A,#0D8H ;高8位初值修正

ADDC A,TH0 ;

MOV TH0,A ;重裝初值(高8位修正值)

SETB TR0 ;開啟定時器T0

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

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

CLR C ;

MOV A,R3 ;

JZ FSS1 ;加1後為00,C=0

SETB C ;加1後不為00,C=1

FSS1: AJMP ADDMM ;

》》》》》》》》》》》省略》》》》》

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 加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 ;子程式傳回

》》》》》》》》》》》省略》》》》》

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 延時程式 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

;1MS延時程式,LED顯示程式用

DL1MS: MOV R6,#14H

打開APP閱讀更多精彩内容

點選閱讀全文