Ⅰ 單片機秒錶設計
用AT89C51設計一個2位的LED數碼顯示作為「秒錶」,這應該是一個模擬題,可用兩位一體的共陰數碼管,用定時器T0定時,得到1秒計時。
Ⅱ 用51單片機設計一個秒錶。主要要求: 1.用單片機的定時/計數器實現一個
KEYVALEQU 30H
DATEQU 33H
SCANLEDEQU 39H
CLKEQU 77H
SECEQU 78H
SEC1EQU 79H
SEC2EQU 7AH
DOTBIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR;50ms定時
ORG 001BH
LJMP T1ISR;掃描顯示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2;啟動
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3;暫停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP;清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB:DB 0FCH;"0"00H
DB 60H;"1"01H
DB 0DAH;"2"02H
DB 0F2H;"3"03H
DB 66H;"4"04H
DB 0B6H;"5"05H
DB 0BEH;"6"06H
DB 0E0H;"7"07H
DB 0FEH;"8"08H
DB 0F6H;"9"09H
DB 0EEH;"A"0AH
DB 3EH;"B"0BH
DB 9CH;"C"0CH
DB 7AH;"D"0DH
DB 9EH;"E"0EH
DB 8EH;"F"0FH
DB 00H;" "10H
END
Ⅲ 利用51單片機設計一個秒錶 (一定要按要求做到0.01秒)
最低位,是0.01s 變化一次,一秒鍾,變化 100 次。
這么快,人的眼睛,分辨不出來。
只能看到一個 8。
停止時,才能看到穩定的數字。
程序如下:
#include<reg52.h>
sbit P3_5 =P3^5;
unsigned char counet, m[4] = {0,0,0,0};
void display()
{
unsigned char code Tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code Bit[] = {8, 4, 2, 1};
unsigned char i, j;
for (i = 0; i < 4; i++) {
P0 = Tab[m[i]]; if (i == 2) P0 &= 127;
P2 = Bit[i]; for(; j > 0; j++); P2 = 0;
}
}
void wait_key()
{
while( P3_5) display();
while(!P3_5) display();
}
main()
{
TMOD = 0x02;
IE = 0x82;
while(1) {
wait_key(); TR0 = 1; TH0 = TL0 = 6;
wait_key(); TR0 = 0;
wait_key(); m[0] = m[1] = m[2] = m[3] = 0;
}
}
void time0() interrupt 1
{
counet++;
counet %= 40;
if(!counet) {
m[0]++; m[0] %= 10;
if(!m[0]) {
m[1]++; m[1] %= 10;
if(!m[1]) {
m[2]++; m[2] %= 10;
if(!m[2]) {
m[3]++; m[3] %= 10;
}}}}
}
Ⅳ 課程設計數字秒錶設計 求高手解答。
一 設計說明書
1.設計任務
(1) 進行設計方案的比較,並選定設計方案;
(2) 完成單元電路的設計和主要元器件說明;
(3) 安裝各單元電路,要求布線整齊、美觀;
(4) 寫出課程設計報告文檔。
2.設計要求
(1) 設計並製作符合要求的電子秒錶;
(2) 秒錶由6 位七段LED顯著器顯示,其中兩位顯示分,四位顯示
秒,其中顯示的分辯率為0.01 秒;
(3)計時最大值為99 分59點99秒;
(4)計時誤差不得超過0.01秒;
(5)具有自動清零、啟動計時、暫停計時及繼續計時等控制功能;
(6) 控制操作按鍵不得超過2個。
3.提高部分
3.1 安裝自己設計的電路
(1)檢查元器件
(2)對電路進行組裝:按照自己設計的電路,在麵包板上插接元器件或在通用板上焊接。焊接完畢後,應對照電路圖仔細檢查,看是否有錯接、少接、虛焊的現象。
3.2. 通電調式
(1)通電測試:對安裝完成的電路板的參數及工作狀態進行測量,以便提供調整電路的依據。
(2)通電調試:經過反復的調整和測量,使電路的性能達到要求。
3.3 書寫調試報告
課程設計說明書書寫格式
參照「課程設計說明書書寫格式」文件。
4.參考資料
1、《數字電子技術導論》西安交通大學 . 何金茂主編
2、《數字電子技術基礎》高等教育出版社. 康華光主編
3、《數字電子技術》 高等教育出版社。 楊志忠主編
二.方案論證
2.1.方案的選擇
通過對設計要求的分析,應用相關的數字電子電路方面的知識畫出原理圖,檢查無誤後,將原理圖在EWB中模擬,驗證通過無誤後,可以考慮使用何種方案來實現設計電路。我們可以通過對照原理圖在萬能板上焊接來實現所設計的電路;也可以在PROTEL中畫出原理圖並布好線通過做PCB板來實現所設計的電路;還可以通過在麵包板上插線來實現設計的電路。因在商店只買到萬能板,所以我們採用萬能板接線。
2.2電路總體功能、結構的分析
本電路的目標為設計一個數字式秒錶。如圖2.1所示,數字式秒錶電路系統由主體電路和擴展電路兩部分組成。其中主體電路完成計數功能,控制電路完成控制的擴展功能。通過所設計電路將實現具有清零、啟動、暫停、繼續等控制功能的計時數字式秒錶。
根據電路所需要達到的要求,可以將電路的總體結構框圖描述(如圖2.2):
圖2.2 多功能數字式秒錶系統的組成框圖
設計時各部分所用的器件名稱如下:
時鍾信號:由555組成的多諧振盪器。
計數器:74LS190
鎖存器:CT74LS373
解碼器:CT74LS47
顯示器:BS201
三. 555組成的多諧振盪器簡介
3.1 555與RC組成多諧振盪器
由門電路組成的多諧振盪器雖具有多種電路的形式,但它們無一例外地具有如下的共同的特點。首先,電路中含有開關器件,如門電路、電壓比較器、BJT等。這些器件主要用作產生高、低電平;其次,具有反饋網路,將輸出電壓恰當地反饋給開關器件,使之改變輸出狀態;另外,還要有延遲環節,利用RC電路的充、放電特性可實現延時,以獲得所需要的振盪頻率。在許多實用電路中,反饋網路兼有延時的作用。圖3.1.1是一種最簡型多諧振盪器。
3.2振盪周期的計算
在振盪過程中,電路狀態的轉換主要取決於電容的充、放電時間,而轉換時刻則取決於 的數值。根據以上分析所得電路在狀態轉換時 的幾個特徵值,可以計算出周期T
四 晶元簡介
4.1 74LS190
74LS190是一種較為典型的集成同步十進制加/減法計數器。圖中 ̄LD為非同步
置數控制端, ̄CT為計數控制端,D0-D3為並行數據輸入端,Q0-Q3為輸出端, ̄U/D為加減計數控制端。CO/BO為進位/借位輸出端。 ̄(RC)為行波時鍾輸出端。CT74LS190沒有專門的置0輸入端,但可以藉助於數據D3D2D1D0=0000時,實現計數器的置0功能。
74LS190的引腳圖、功能表如下圖所示。
4.1.1 74LS190的引腳圖
表4.1.1 74LS190的功能表
輸入 輸出
CP R0(1) R0(2) S9(1) S9(2) QA QB QC QD
X 1 1 0 X 0 0 0 0
1 1 X 0 0 0 0 0
X X 1 1 1 0 0 1
↓ X 0 X 0
計數
0 X 0 X
0 X X 0
X 0 0 X
(1)非同步置數功能:當 ̄LD=0時,不論有無脈沖CP和其他信號輸入,並行輸入的數
據d3-d0被置入計數器相應的觸發器中,這時Q3Q2Q1Q0=d3d2d1d0.
(2) 計數功能: 取 ̄CT=0, ̄LD=1。當 ̄U/D=0時,在CP脈沖上升沿作用下,進行
十進制加法計數。當 ̄U/D=1時,在CP脈沖上升沿作用下,進行減法計數。
(3) 保持功能:當 ̄CT= ̄LD=1時,計數器保持原來的狀態不變。
4.2 CT74373
鎖存器的原理圖如下圖
圖4.2.1鎖存器的原理圖
C是鎖存器信號的輸入端,D是數據輸入端Q和Qo是數據互補輸出端。當C=0時,G2被封鎖,輸出0,G3被封鎖輸出1。G5輸出Q=D,Qo=Do(D和Do是數據互補)。當C由0變1時,分兩種情況討論:一是當C由0變1時,Qo=1,Q=0,G2被封鎖,由於G3兩個輸入都為1,其輸出為0。G4門也被封鎖。G2門的輸出Qo=1。原來的狀態不改變。其二是當C由0變1時,Qo=0,Q=1。G2門的兩輸入均為1,則輸出Qo=0,使Q=1。D無論是0還是1也不改變原來的狀態。綜合上述分析,可看出:C=0時,Q=D,電路不鎖存數據,相當於緩沖器。當C=1時,D不影響電路狀態。C由0變1時將數據D鎖定並保持。直到C由1變回0。
圖4.2.2 CT74LS373的引腳圖
CT74LS373是一種典型的8位鎖存器,OC是三態輸出控制,低電平有效。即此端加低電平時輸入數據能達到輸出端,加高電平時8個輸出均呈高阻態,C是鎖存器的鎖存控制輸入端。C下降沿鎖存數據並低電平保持,高電不鎖存,輸入數據直達輸出端。每個鎖存器只有一個同相輸出沒有互補輸出。符號中輸出輸入端引線上所標帶的數字是該端在晶元上的引腳號。
表4.2.1 CT74373功能表:
輸入 輸出
OC C D Q
L H H H
L H L L
L L X Qo
H X X Z
表中第1、2行表示在OC為低電平、C為高電平時,Q隨D變化,第三行表示OC和C都為低電平Q保持原狀態QO不變。第四行表示OC為高電平時輸出Q為高組態Z。
4.3 74LS47
圖4.3.1 74LS47引腳
1腳:二進制的置位輸入端;2腳:使能端;
3腳:五進制置位端輸入;4腳:輸出
5腳:輸出;6腳:使能端;7腳:接地端
8腳:輸出端;9腳:輸出端;10腳:二進制時鍾信號;11腳:五進制時鍾信號;12腳:二進制復位輸入;13腳:五進制復位輸入;14腳:接電源
表4.3.1 74LS47功能表
4.4 顯示解碼器
現在的許多電器設備上都有顯示十進制字元的字元顯示器,以直觀的顯示出電器設備的運行數據。目前廣泛使用的字元顯示器是七段字元顯示器,或稱七段數碼管。常見的七段數碼管有液晶顯示數碼管和半導體數碼管兩種。
液晶顯示數碼管是利用液晶材料的透明度或者顯示的顏色受外加電場控制的特點製成的,簡稱LCD。
半導體數碼管是由七段發光二極體(Light Emitting Diode)組成,簡稱LED。圖4.4.1是LED的引腳及其等效電路。
圖4.4.1 (a)LED的引腳及其等效電路。
LED產品的種類繁多,有圖4.4.1(b)、(c)所示的共陰極電路,還有共陽極電路,常用的數碼顯示器有BS201,BS202等。
要驅動LED正常的顯示十進制數的十個字元,LED前面必須接一個顯示解碼器。
顯示解碼器可實現的邏輯功能是:將輸入的8421BCD碼轉化成驅動LED發光的高、低電平信號,驅動LED顯示出不同的十進制數字元,下面來討論顯示解碼器的組成。
因顯示解碼器可以驅動LED顯示出0~9這十個數字字元,十個數字字元對應十種高低電平的組合狀態,要描述這十種高、低電平的組合狀態必須用4位二進制數,根據LED發光的特點可得描述顯示解碼器邏輯功能的真值表如表4.4.1所示。
表4.4.1 顯示解碼器邏輯功能真值表
4.4.2七段數字顯示器發光段組
4.5 四2輸入與非門74LS00
圖4.5.1 74LS00引腳圖
上圖中1、2、3組成一個與非門,其中1、2是輸入,3為輸出。4、5、6組成一個與非門,其中4、5是輸入,6為輸出。8、9、10組成一個與非門,其中9、10是輸入,8為輸出。11、12、13組成一個與非門,其中12、13是輸入,11為輸出。
4.6 四二輸入與門74LS08
五設計原理圖
一百進制
接線時按照原理圖的腳將各個晶元連接,連接 時小心短路。
二十四進制
六.安裝工藝
6.1 安裝工具
焊烙鐵 1個,松香 1盒,焊錫 1卷,剝線鉗 1個, 尖嘴鉗 1個, 電工刀 1個, 數字萬用表 1個, 鑷子 1個。
6.2. 安裝具體步驟
⑴ 首先要弄清萬能板的結構原理,分清各插空是否是等位點;
⑵ 其次合理安排集成塊和元器件的位置,盡可能的保持在同一條直線上。
⑶ 注意導線的剖削,剖削導線絕緣層,要求剖削後的芯線長度必須適應連接需要,不應過長或過短,且不應損傷芯線。為了美觀剖削導線時不用火燒,用剝線鉗或電工刀剖削。具體操作方法如下:按連接所需要長度,用鉗頭刀口輕切絕緣層,用左手捏緊導線,右手適當用力,即可使端部的絕緣層脫離芯線,用電工刀時,刀口對導線成45度角切入塑料絕緣層。
⑷ 導線的布置,布線要注意整齊不交叉。要求導線豎的要直、橫要平,盡量減少懸線的存在。這樣便於調整與測試工作的順利進行。布線具體方法步驟如下:為了最大可能避免錯誤的出現,應按元件的排列順序依次布線,同一元件可按管腳的順序依次布線。
6.3. 安裝注意事項
(1) 安裝應接觸良好,保證被安裝元件間能穩定可靠地通過一定的電流。
(2) 應避免元器件損壞的發生。插拔元器件時候要垂直插拔以免造成不必要的機械損壞。
(3) 安裝時必須採用絕緣良好的絕緣導線,連線的時候要取好元件與元件的距離。連接的時候線和線之間的交叉盡量的少。
7.調試與測試
7.1調試前的檢測
電子安裝完畢,通常不宜急於通電,先要認真檢查一下。檢查內容包括:
(1)連線是否正確
檢測的方法通常有兩種方法:
a. 根據電路圖連線,按元件的排列順序依次檢查
這種方法的特點是,按一定順序一一檢查安裝好的線路,同一元件按管腳的順序依次檢察。由此,可比效容易查出錯線和少掉的線。
b.按照實際線路來對照原理圖電路進行查線
這是一種以元件為中心進行查線的方法。把每個元件引腳的連線一次查清,檢查每個去處在電路圖上是否存在,這種方法不但可以查出錯線和少掉的線,還容易查出多線。
為了防止出錯,對於已查過的線,應在電路圖上做出標記,最好用指針式萬用表「歐姆1」檔,或用數字萬用表的「二極體」檔的蜂鳴器來測量元器件引腳,這樣可以同時發現接觸不良的地方。
(2)元器件的安裝情況
檢查元器件引腳之間有無短路;連接處有無接觸不良;二極體的極性和集成元件的引腳是否連接有誤。
(3)電源供電,信號源連接是否正確。
(4)電源端對地是否有短路的現象。
註:在通電前,斷開一根電源線,用萬用表檢查電源端對地是否存在短路。若電路經過上述檢查,並確認無誤後,就可以轉入調試。
7.2通電觀察
把經過准確測量的電源接入電路。觀察有無異常現象,包括有無冒煙,是否有異味, 手摸器件是否發燙,電源是否有短路現象等。如果出現異常,應立即斷電源,待排除故障後才能再通電。然後測量各路總電壓和各器件的引腳的電源電壓,以保證元器件正常工作。
7.3調試中注意事項
調試結果是否正確,很大程度受測量正確與否和測量精度的影響。為了保證調試的效果,必須減小測量誤差,提高測量精度。為此,需注意以下幾點:
(1) 調試前先熟悉各種儀器的使用方法,並仔細加以檢查,以避免由於使用儀器不當,或儀器的性能達不到要求,而造成測量結果不準,以至做出錯誤的判斷。
(2) 測量儀器的地線應於被測量儀器的地線連在一起,並形成系統的參考地電位,這樣才能保證測量結果的准確性。
(3) 要正確選擇測量點和測量方法。
(4) 調試過程中自始至終要有嚴謹的科學作風,決不可急於求成。在調試過程中,不但要認真觀察測量,還要記錄並善於進行分析、判斷。切不可一遇問題,就沒有目的的亂調和亂改接線,甚至把電路拆掉重新安裝。這樣,不但不能解決問題,相反還會發生更大的故障,甚至損壞元器件及測量儀器。
7.4 故障的排除
新電路板出現故障是常見的,每個學生都必須認真對待。查找故障時,首先要有耐心,還要細心,切忌馬馬虎虎,同時還要開動腦筋, 認真進行分析、判斷。
當電路工作時,首先應關掉電源,再檢查電路是否有接錯、漏掉線、斷線,有沒有接觸不良、元器件損壞、插錯了的元器件、元器件引腳接錯等。查找時可藉助萬用表進行。
對於一個完整的系統電路,迅速而准確的排除故障,需要一定的實際工作經驗,對於初學者來說,首先應認真分析電路圖,並善於將全電路分解成幾個功能塊,明確各部分信號傳遞關系及工作原理。然後根據故障現象及有關測試數據,分析和初步確定故障可能出現的部位,再按上述步驟仔細檢查這一部分電路,就可能比較快地找到故障點及故障原因。
8. 元器件清單
(1) CT74LS191——同步十進制計數器(7片);
(2) CT74LS08——四二輸入與門(2片);
(3) CT74LS373——8位鎖存器(3片);
(4) CT74LS48——BCD七段解碼器/驅動器(6片);
(5) CT74L00——四二輸入與非門(2片);
(6) BS201——----共陽極數碼顯示管(6片);
(7) 電阻2個,電阻48KΩ2個, 電阻2 1個;
(8) 開關2個,電源VCC +5V一個;
(9) 導線若干。
(備註:有些元件買不到,因而用相似功能的晶元代替)
9.心得體會
通過幾個星期的努力,最終把這次課程設計的任務完成了。這是我們進行的第一個課程設計,讓我懂得了很多以前不知道的知識,如萬能板的內部結構、相關晶元的引腳功能等等。在設計中,遇到了很多問題,甚至有一些是以前沒有見到的。經過同學的幫助和老師的指導,最終克服了那些難題,鍛煉了我們的實踐動手能力,使我們真正做到了理論與實踐的有效結合。
製作電路時,深深體會到連接電路時一定要細仔細,一定要確保每條線路接觸性良好。實驗線路出現問題時,要耐心一步一步的去檢查。在實驗測試時,應保持冷靜,要有條理,遇問題時要聯系書本知識積極思考,同時記錄好實驗數據。
在這次課程設計過程中,我發現光有理論知識是不夠的,還必須懂一些實踐中的知識。所以在課程設計的實踐中,我們應將實驗與課堂教學結合起來,鍛煉自己的理論聯系實際的能力和實際動手能力。例如:檢查和排除故障的能力。
本次課程設計,也培養了我們小組的合作精神,所謂團結就是力量,就是一個再好不過的解釋。它不僅為我以後的課程設計打下基礎,而且還培養了我們的合作精神和分析問題的能力。
10. 參考文獻
[1] 康華光 .電子技術基礎(數字部分). 第四版 北京: 高等教育出版社,2005
[2] 閻 石 .數字電子技術基礎. 第四版 北京:高等教育出版社,1998
[2] 楊志忠 .數字電子技術. 北京:高等教育出版社,2000
[3] 張建華 .數字電子技術. 北京:機械工業出版社,1994
[4] 李亞伯 .數字電路與系統. 北京:電子工業出版社,1998
[5]陳華容 賈雅瓊.數電實驗指導書. 湖南:湖南工學院,2005
[6]謝自美 .電子線路設計-實驗-測試. 武漢:華中科技大學出版社,2005
[7]趙雅興 . 數字電路與FPGA. 北京 人民郵電出版社,2004
[8]鄧勇 鄧斌. 數字電路設計完全手冊 北京.國防工業出版社,2004
Ⅳ 單片機秒錶功能實現的原理
利用單 片機內定時器,一次定時50ms,定義4 個變數,分別是時、 分、秒和中斷次數,每中斷一次中斷次數變數加1,累積20次,即是1S,然後秒加1,夠60秒後秒清0,分加1,60 分後,分清0,時加1,24小時後 ,小時清0,這些都在中斷程序中完成,主程序中不斷地顯示時間,這就是一個時鍾。在此基礎上,增加按鍵控制,可以調整時間,設定鬧鍾,使功能更加完善。
Ⅵ 51單片機製作一個秒錶
//功能:0~99秒的簡易秒錶設計,兩個靜態數碼管,定時器採用中斷方式
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar count=0;//對50ms定時時間進行計數
uchar miao=0; //秒計數器
//函數名:timer_1()
//函數功能:定時器T1的中斷函數,T1在工作方式1下每50秒產生中斷,執行該中斷函數
//形式參數:無
//返回值:無
void timer_1() interrupt 3 //T1的中斷類型號為3
{
TH1=(65536-50000)/256; //重新設置T1計數初值高8位
TL1=(65536-50000)%256; //重新設置T1計數初值低8位
count++; //50ms計數器加1
if(count==20) //1s時間到
{
count=0; //50ms計數器清0
miao++; //秒計數器加1
if(miao==100)miao=0; //miao計數到100,則從0開始計數
}
}
bit b=0;
void int_0() interrupt 0
{
if(b == 0){TR1 = 0;b = 1;}
else
{
b = 0;
TR1 = 1;
}
}
void int_1() interrupt 2
{
miao=0;
count = 0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
}
//函數名:disp
//函數功能:將i的值顯示在兩個靜態連接的數碼管上
//形式參數:i,取值范圍0~99
//返回值:無
void disp(uchar i)
{
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定義0~9顯示碼,共陽極數碼管
P1=led[i/10]; //顯示i高位
P2=led[i%10]; //顯示i地位
}
void main()
{
TMOD=0x10;//設置T1在工作方式1
TH1=(65536-50000)/256;//設置T1計數初值高8位,定時時間50ms
TL1=(65536-50000)%256;//設置T1計數初值低8位
ET1=1;//開放T1中斷允許
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1=1;
EA=1;//開放總中斷允許
TR1=1;//啟動T1開始計時
while(1)
{
disp(miao);//顯示秒計數器值
}
}
Ⅶ 單片機 按鍵秒錶
秒錶的設計程序
用89C51,外接晶振,復位電路,二個數碼管,二個按鍵,做一個電子秒錶,具體要求為用按鍵起停電子表,可用按鍵設計倒計時時間(如10S,20S,60S),並啟動倒計時功能。能用按鍵選擇以上兩功能之一。
三、程序代碼:
A_BIT EQU 20H ;數碼管個位數存放內存位置
B_BIT EQU 21H ;數碼管十位數存放內存位置
TEMP EQU 22H ;計數器數值存放內存位置 ;開機初始化
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#0FFH;使顯示時間數碼管熄滅
CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表啟始地址
;等待按鍵輸入
;根據按鍵的輸入判斷執行什麼功能;按鍵1按下則執行功能1
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#0FFH;使顯示時間數碼管熄滅
START:JB P3.6,START1;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,START;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
LJMP GN1 ;按鍵2按下則執行功能2START1: JB P3.7,START;循環判斷開始按鈕K2是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.7,START1;如果是干擾就返回
JNB P3.7,$
LJMP GN2;數碼管顯示秒錶時間的程序
GN1: ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個位在B LCALL DPLOP1 ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C1: JB P3.6,B1
ACALL DELAY10;延時10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按鍵松開
CPL F0
ZT1: ; MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
JB P3.6,$;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,ZT1;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
LCALL DPLOP1
B1: JB P3.7,LOOP1
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVERLOOP1: DJNZ R3,TIME1 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS1 ;循環執行2次,時間為1 秒鍾INC TEMP;滿一秒鍾對時間加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判斷TEMP的數值是否為60?不為60循環
ACALL OVER
RET
GN2: MOV A,#14H ; 設定倒計時的時間20S
MOV TEMP,A;數碼管顯示倒計時時間的程序
;初始化
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#14H;使顯示時間為設定的倒計時時間 GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個位在B MOV DPTR,#NUMTAB ;指定查表啟始地址
DPLOP2: MOV A,A_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼
CLR P2.5 ;開個位顯示
ACALL DELY1;顯示1毫秒
SETB P2.5;關閉個位顯示,防止鬼影
MOV A,B_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.6 ;開十位顯示
ACALL DELY1;顯示1毫秒
SETB P2.6;關閉十位顯示,防止鬼影 ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C2: JB P3.6,B2
ACALL DELAY10;延時10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按鍵松開
ZT2: MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
JB P3.6,$;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,ZT2;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
B2: JB P3.7,LOOP2
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVERLOOP2: DJNZ R3,TIME2 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS2 ;循環執行2次,時間為1 秒鍾DEC TEMP;滿一秒鍾對時間減1
MOV A,TEMP
JNZ GOON2;判斷TEMP的數值是否為0?不為0循環
ACALL OVER
RET
;結束定時
OVER: AJMP START;退到開機初始化狀態;1毫秒延時子程序
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET;10毫秒延時子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET;實驗板上的兩位一體的數碼管0~9各數字的顯示代碼
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼
CLR P2.5 ;開個位顯示
ACALL DELY1;顯示1毫秒
SETB P2.5;關閉個位顯示,防止鬼影
MOV A,B_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.6 ;開十位顯示
ACALL DELY1;顯示1毫秒
SETB P2.6;關閉十位顯示,防止鬼影
RET
END