當前位置:製作窩 >

創意生活 >電子DIY >

8位數碼管數字鐘的製作線路圖及視訊教程

8位數碼管數字鐘的製作線路圖及視訊教程

下面是數碼管 數字鐘視訊,在視訊廣告時間你可以瀏覽後面的圖文資料哦~
8位數碼管數字鐘的製作線路圖及視訊教程
顯示格式依然是23-59-59(同樣是小時十位如果為0則不顯示),調整時間增加了一隻按鈕,通過調整選擇鍵SET_KEY選擇調整位,選中位開始閃爍,此時再按增加鍵ADD_KEY或減少鍵DEC_KEY調整選中位,如果長按ADD_KEY或DEC_KEY,系統識別後則進行調時快進,此時停止閃爍,方便人眼觀察。同時還增加了調秒功能:如果選中位是秒,則按增加鍵或減少鍵都是將秒清零。

電路原理圖:

8位數碼管數字鐘的製作線路圖及視訊教程 第2張


彙編程式設計:

/**************************************************************
程式名稱:51微控制器8位數碼管數字鐘彙編程式
簡要說明:實現24小時制電子鐘,8位數碼管顯示,顯示時分秒
顯示格式:23-59-59(小時十位如果為0則不顯示)
通過3只按鍵來調整時間
調整選擇鍵SET_KEY:P1.0;通過選擇鍵選擇調整位,選中位閃爍
增加鍵ADD_KEY:P1.1;按一次使選中位加1
減少鍵DEC_KEY;P1.2;按一次使選中位減1
如果長按ADD_KEY或DEC_KEY,識別後則進行調時快進,此時停止閃爍
如果選中位是秒,則按增加鍵或減少鍵都是將秒清零
P0口輸出數碼管段選訊號,P2口輸出數碼管位選訊號。晶振12M
編 寫:
最後更新:08/12/31晚
**************************************************************/
ORG 0000H;程式入口地址
LJMP START
ORG 000BH;定時器0中斷入口地址
LJMP TIMER_0

ORG 0300H

/*****程式開始,初始化*****/
START:
SETB 48H;使用一個bit位用於調時閃爍標誌
SETB 47H;使用一個bit位用於產生脈衝用於調時快進時基
MOV R1,#0;調整選擇鍵功能標誌:0正常走時、1調時、2調分、3調秒

MOV 20H,#00H;用於控制秒基準時鐘源的產生
MOV 21H,#00H;清零秒暫存器
MOV 22H,#00H;清零分暫存器
MOV 23H,#00H;清零時暫存器
MOV 24H,#00H;用於控制調時閃爍的基準時鐘的產生

MOV IP,#02H;IP,IE初始化
MOV IE,#82H
MOV TMOD,#01H;設定定時器0工作方式1
MOV TH0,#3CH
MOV TL0,#0B0H;賦定時初值,定時50ms
SETB TR0;啟動定時器0
MOV SP,#40H;重設堆疊指標

/*****主程式*****/
MAIN:
LCALL DISPLAY ;呼叫顯示子程式
LCALL KEY_SCAN ;呼叫按鍵檢測子程式
JZ MAIN;無鍵按下則返回重新迴圈
LCALL SET_KEY ;呼叫選擇鍵處理子程式
JB 46H,MAIN;如果已進行長按調整(調時快進),則不再執行下面的單步調整
LCALL ADD_KEY;呼叫增加鍵處理子程式,加一
LCALL DEC_KEY;呼叫減少鍵處理子程式,減一
LJMP MAIN ;重新迴圈

/*****定時器中斷服務程式*****/
TIMER_0:
PUSH ACC
PUSH PSW ;保護現場
MOV TH0,#3CH
MOV TL0,#0B0H ;重新賦定時初值
CPL 47H;產生脈衝用於調時快進時基
INC 24H
MOV A,24H
CJNE A,#10,ADD_TIME;產生0.5秒基準時鐘,用於調時閃爍
CPL 48H;取反調時閃爍標誌位
MOV 24H,#00H

ADD_TIME:;走時
INC 20H
MOV A,20H
CJNE A,#20,RETI1;產生1秒基準時鐘
MOV 20H,#00H ;一秒鐘時間到,清零20H
MOV A,21H
ADD A,#01H
DA A;作十進位制調整
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H ;一分鐘到
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H ;一小時到
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H ;到24點,清零小時

RETI1:
POP PSW
POP ACC ;恢復現場
RETI ;中斷返回

/*****顯示處理*****/
DISPLAY:
MOV A,21H ;秒
ANL A,#0FH
MOV 2FH,A;轉換出秒個位,存入2FH
MOV A,21H
ANL A,#0F0H
SWAP A
MOV 2EH,A;轉換出秒十位,存入2EH
JB 46H,MIN;如果長按按鍵(調時快進),則跳過閃爍處理程式
CJNE R1,#3,MIN;如果R1為3,閃爍秒位待調整
JB 48H,MIN
MOV 2FH,#0AH;使該位為10,查表得到使該位不顯示的輸出
MOV 2EH,#0AH

MIN:
MOV A,22H ;分
ANL A,#0FH
MOV 2DH,A;轉換出分個位,存入2DH
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2CH,A;轉換出分十位,存入2CH
JB 46H,HOUR;如果長按按鍵(調時快進),則跳過閃爍處理程式
CJNE R1,#2,HOUR;如果R1為2,閃爍分位待調整
JB 48H,HOUR
MOV 2DH,#0AH;使該位為10,查表得到使該位不顯示的輸出
MOV 2CH,#0AH

HOUR:
MOV A,23H ;時
ANL A,#0FH
MOV 2BH,A;轉換出時個位,存入2BH
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2AH,A;轉換出時十位,存入2AH
JB 46H,DISP;如果長按按鍵(調時快進),則跳過閃爍處理程式
CJNE R1,#1,DISP;如果R1為1,閃爍時位待調整
JB 48H,DISP
MOV 2BH,#0AH;使該位為10,查表得到使該位不顯示的輸出
MOV 2AH,#0AH

/*****數碼管動態掃描顯示*****/
DISP:
MOV DPTR,#TABLE
MOV A,2FH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
LCALL DELAY
SETB P2.7;顯示秒個位

MOV A,2EH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
LCALL DELAY
SETB P2.6;顯示秒十位

MOV A,#0BFH
MOV P0,A
CLR P2.5
LCALL DELAY
SETB P2.5;顯示“-”

MOV A,2DH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
LCALL DELAY
SETB P2.4;顯示分個位

MOV A,2CH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.3
LCALL DELAY
SETB P2.3;顯示分十位

MOV A,#0BFH
MOV P0,A
CLR P2.2
LCALL DELAY
SETB P2.2;顯示“-”

MOV A,2BH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
LCALL DELAY
SETB P2.1;顯示時個位

MOV DPTR,#TABLE1;該位使用TABLE1以消除前置0
MOV A,2AH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
LCALL DELAY
SETB P2.0;顯示時十位
RET

/*****按鍵檢測子程式*****/
KEY_SCAN:
CLR 46H;關閉長按調整(調時快進)標誌
MOV P1,#0FFH ;將P1口設定成輸入狀態
MOV A,P1
CPL A
ANL A,#07H;P1口低3位連線3個按鍵,只判斷該3位
JZ EXIT_KEY ;無鍵按下則返回
LCALL DELAY;延時去抖動
MOV A,P1;重新判斷
CPL A
ANL A,#07H
JZ EXIT_KEY ;鍵盤去抖動
MOV R5,A ;臨時將鍵值存入R5
MOV R4,#00H;用於控制調時快進速度
;設定為00H是為了在進入長按處理前加長延時區分使用者的長按與短按,防止誤快進

LOOP:;進入長按處理
LCALL DISPLAY;使長按時顯示正常
MOV A,P1
CPL A
ANL A,#07H
JB 47H,LOOP1
INC R4;調時快進間隔時間基準加1

LOOP1:
CJNE R1,#03H,LOOP2;如果調秒時長按,則不處理
LJMP LOOP3

LOOP2:
CJNE R4,#99H,LOOP3
MOV R4,#70H;確認使用者長按後,重新設定起始值,加快調時快進速度
SETB 46H;長按調整(調時快進)標誌
LCALL ADD_KEY
LCALL DEC_KEY

LOOP3:
JNZ LOOP ;等待鍵釋放
MOV A,R5;輸出鍵值
RET

EXIT_KEY:
RET

/*****延時子程式*****/
DELAY:
MOV R7,#150
DJNZ R7,$
RET

/*****選擇鍵處理子程式*****/
SET_KEY:
CJNE R5,#01H,EXIT;選擇鍵鍵值
INC R1;調整選擇功能標誌加一
CJNE R1,#4,EXIT
MOV R1,#0
MOV 24H,#00H;調時閃爍基準清零
RET

/*****增加鍵處理子程式*****/
ADD_KEY:
CJNE R5,#02H,EXIT;增加鍵鍵值
CJNE R1,#01H,NEXT1;選擇鍵功能標誌為1,調時,否則跳出
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,EXIT
MOV 23H,#00H

NEXT1:
CJNE R1,#02H,NEXT2;選擇鍵功能標誌為2,調分,否則跳出
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,EXIT
MOV 22H,#00H

NEXT2:
CJNE R1,#03H,EXIT;選擇鍵功能標誌為3,調秒,否則跳出
MOV 21H,#00H;如增加鍵按下直接清零秒
RET

/*****減少鍵處理子程式*****/
DEC_KEY:
CJNE R5,#04H,EXIT;減少鍵鍵值
CJNE R1,#01H,NEXT3;選擇鍵功能標誌為1,調時,否則跳出
MOV A,23H
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#99H,EXIT
MOV 23H,#23H

NEXT3:
CJNE R1,#02H,NEXT4;選擇鍵功能標誌為2,調分,否則跳出
MOV A,22H
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,EXIT
MOV 22H,#59H

NEXT4:
CJNE R1,#03H,EXIT;選擇鍵功能標誌為3,調秒,否則跳出
MOV 21H,#00H;如較少鍵按下直接清零秒
RET

/*****萬用返回子程式*****/
EXIT:
RET

/*****數碼管字形編碼表*****/
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;字形顯示編碼

TABLE1:
DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小時位的十位數編碼,該位如果為0則不顯示

END;程式結束

  • 文章版權屬於文章作者所有,轉載請註明 https://zhizuowo.com/shenghuo/dianzidiy/gmzyp.html