導航:首頁 > 裝置知識 > 微機倒計時顯示裝置設計

微機倒計時顯示裝置設計

發布時間:2023-01-15 17:11:33

① LCD顯示 基於單片機的秒錶/倒計時定時器設計 C語言 謝謝了

這首先得選定單片機,工作時鍾頻率,LCD型號,驅動方式。完成這些都才到設計電路,編寫程序這一步。

② 求大神用單片機設計可編倒計時裝置

給你了

③ 利用單片機設計實現一個60秒倒計時顯示裝置,並且計時到後發出報警聲音。

#include<reg52.h>
sbitbz=P3^1;
unsignedchara[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsignedcharn,time=60;
main()
{
P1=a[0];
P2=a[6];
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
timer0()interrupt1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(time!=0)
{
n++;
if(n==100)
{
n=0;
time--;
P1=a[time%10];
P2=a[time/10];
}
}
elsebz=~bz;
}

④ 單片機設計秒錶倒計時

#include<reg51.h>

unsignedcharmsec,sec;

voiddelay()

{unsignedchari;

for(i=0;i<100;i++);}

voidT0_INT(void)interrupt1

{

TH0=0x3c;

TL1=0Xb0;

msec++;

if(msec==20)

{

msec=0;

sec++;

if(sec==60)

{

sec=0;

}

}

}

voidmain()

{

unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedchartemp;

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

P3=0xff;

while(1)

{

P2=0x01;

P0=led[sec/10];

delay();

P2=0x02;

P0=led[sec%10];

delay();

temp=~P3;

temp=temp&0x07;

if(temp==0x01)

TR0=1;

if(temp==0x02)

TR0=1;

if(temp==0x04)

{TR0=0;sec=0;msec=0;}

}

}

⑤ 30秒倒計時電路的設計

首先要有個可以產生1秒的時鍾電路,可以通過CD4040加32768HZ的晶鎮分頻,分頻後是2HZ,還要在分一次可以用CD4013之類的雙D觸發器實現,但我一般1秒的記時喜歡使用家庭的石英鍾的電路.他的脈沖的0.5HZ也就是2秒發一次,但需要通過二極體來整出來,因為他的0.5HZ是分別發的然後對地是1赫茲. 然後就是記時電路,可以用2 個CD4028是帶有正負記時的十進制記數電路,有進位和借位(在減記數時用到借位)BCD碼輸出,通過CD4511或CD4543(我比較喜歡CD4543,因為他的6和9顯示的比較人性化,而4511顯示的6沒有最上面的橫,和b的樣子差不多,9沒有下面的一橫和q差不多)來進行數碼管驅動,而4543的好處是他可以選擇共陽極還是共陰數碼管.然後把4028設定到負計時方式(通過引腳的電平來控制)然後可以用個電子開關比如CD4066來控制設定的時間這個可以定時到99秒,但要是顯示30秒,需要預先設定到3和0十位的3需要先自己做個小脈沖發生器,來進行設定,這個自己就可以設計出電路來了吧~

⑥ 微機原理與介面技術課程設計之數字顯示倒計時器

DATAS SEGMENT
sec db 24 ;倒數的秒數,可以隨意更改
osec db 0
startmsg db "Counting down .... press [p] to puase, [c] to continue, [s] to stop",13,10,"$"
timesup db 13,10,"Times up!"
endmsg db 13,10,"Thanks for using, bye~$"
secStr db 6 p ("$")
curpg db 0
ispause db 0
x db 0
y db 0
DATAS ENDS

STACKS SEGMENT
db 64 p(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
push ax
push bx
push cx
push dx

MOV AX,DATAS
MOV DS,AX

lea dx,startmsg
call puts

;讀取時間
mov ah,2ch
int 21h
mov osec,dh ;記下秒數
call getxy ;取得游標的位置

;倒數,顯示倒數,查鍵盤。
;倒數的原理就是 osec 和現在秒數的對比得出
timer:
mov ah,2ch
int 21h
mov ah,6 ;檢查鍵盤
mov dl,0ffh
int 21h
cmp al,"s" ;終止程式
jz done
cmp al,"p" ;暫停程式
jz pause
cmp al,"c" ;繼續程式
jz continue
cmp ispause,0
jg timer
cmp osec,dh ;檢查秒數的變化
jnz interval
jmp timer
interval:
mov osec,dh ;更新秒數
dec sec
call showcountdown ;顯示倒數秒數(sec)
cmp sec,0
jg timer
lea dx,timesup
call puts
jmp done

pause:
mov ispause,1
jmp timer

continue:
mov ispause,0
jmp timer

puts:
mov ah,9
int 21h
ret

showcountdown:
call setxy ;保持顯示倒數的位置
xor ax,ax
xor dx,dx
mov al,sec
cbw
mov bl,10
div bl
add al,"0"
add ah,"0"
lea bx,secStr
mov byte ptr[bx],al
mov byte ptr [bx+1],ah
mov dx,bx
call puts
ret

;讀取游標的位置
getxy:
mov ah,3
int 10h
mov x,dl
mov y,dh
mov curpg,bh
ret

;設置游標的位置
setxy:
mov ah,2
mov bh,curpg
mov dl,x
mov dh,y
int 10h
ret

done:
pop dx
pop cx
pop bx
pop ax
MOV AH,4CH
INT 21H
CODES ENDS
END START

⑦ 30秒倒計時器課程設計

【摘 要】籃球比賽30秒鍾規則規定:進攻球隊在場上控球時必須在30秒鍾內投籃出手(NBA比賽為24秒,全美大學體育聯合會比賽中為35秒),因此在比賽時裁判既要看比賽又要看秒錶計時,而本文介紹的30秒倒計時器可以解決此問題。

【關鍵詞】AT89C51單片機、30秒倒計時器、LED

30秒倒計時器的設計和製作有很多方法,本文介紹的30秒倒計時器以AT89C51單片機作為控制單元,採用兩個數碼管顯示時間,用三個按鍵分別控制計時器的計時開始、復位和暫停。倒計時器初始狀態顯示「30」,當裁判員按下計時鍵,30秒倒計時開始,當計時器時間減到0時,計時器發出聲光報警,提示裁判計時時間已到。

一、電路設計

30秒倒計時器的電路主要由電源電路、單片機最小系統、按鍵輸入、顯示驅動電路、報警電路組成,30秒倒計時器控制電路如圖1所示。

圖1 30秒倒計時器電路原理圖

1、按鍵輸入

「30秒倒計時器」採用了三個按鍵來完成計數器的啟動計數、復位、暫停/繼續計數等功能。

(1)K1鍵:啟動按鈕(P3.2)。

按下K1鍵,計數器倒計時開始,數碼管顯示數字從30開始每秒遞減計數,當遞減到到零時,報警電路發出聲、光報警信號。當計數器處於暫停狀態時按下K1鍵將回到計時狀態。

(2)K2鍵:復位按鈕(P3.3)。

按下K2鍵,不管計數器工作於什麼狀態,計數器立即復位到預置值 「30」 ,在報警狀態時按下K2鍵還可取消報警。

(3)K3鍵:暫停/計時切換按鈕(P3.4)。

當計數器處於計時狀態時按下該鍵計數器暫停計時,數碼管顯示數字保持不變;當計數器處於暫停狀態按下該鍵計數器將回到計時狀態;初始狀態時該鍵無效。

2、顯示驅動電路

「30秒倒計時器」用兩個共陽數碼管來顯示時間,數碼管顯示方式為動態顯示。顯示驅動電路中,數碼管的段碼引腳通過470歐的電阻接到單片機的P1口,兩個片選引腳各通過一個9012連接到正5V電源,由P3.0和P3.1控制。

4、報警電路

計時時間減到0,顯示數碼管顯示「00」時,發光二極體D1由P3.5控制發出光報警,同時蜂鳴器由P3.7控制發出聲報警。

二、軟體編程思路

1、全局變數

「30秒倒計時器」動作流程主要受三個全局變數控制。首先是bit變數「act」,當「act」為「1」時倒計時開始,為「0」時倒計時停止,「act」初值為「0」,可以由按鈕操作將其置「1」或清「0」。第二個全局變數是char變數「time」,存放倒計時的時間,當倒計時時間為0時,發出聲光報警。變數「time」的初值為30,定時中斷服務程序在「act」為1時,每1s對其進行減1操作,減到0時保持為0,按下「復位鍵」可將「time」復位為30。第三個全局變數是int變數「t」,記錄響應定時中斷0的次數。根據初始化定義,定時器0以方式1工作,每1ms發出一次中斷請求。控製程序只開放了定時器0中斷,因此不會有比定時器0中斷更高級的中斷被允許,所以每次請求都會立刻被響應。響應後在中斷服務程序中將全局變數「t」加1記錄響應中斷次數,每響應1000次即為1秒鍾。變數「t」初值為0,在中斷服務程序中加1,當「t」為2000時由中斷服務程序清0。在按鍵驅動程序中,按下啟動鍵、復位鍵、暫停/啟動鍵時將「t」清0,目的是從0ms開始計時。

2、控制流程

主程序主要用來檢測全局變數「time」當「time」為0時發出「聲光報警」。按鍵驅動、顯示驅動和「time」操作都在定時器0中斷服務程序中進行。其控制流程如圖2所示。

圖2 控制流程圖

三、軟體程序設計

1、數碼管驅動程序

到計時器的兩個數碼管以動態顯示的方式顯示計時時間「time」(全局變數),LED1顯示「time」的十位,LED2顯示「time」的個位。

(1)定義段碼數據口和片選信號

根據實際電路,在C51中定義段碼的數據口為P1,兩個片選信號為P3.0和P3.1。定義如下:

#define an P1

sbit wei1=P3^0;

sbit wei2=P3^1;

(2)定義字形碼

LED顯示數字0~9以及全滅的字形碼表格放在數組zixing[]中。字形碼是固定的表格,定義時加上關鍵字「code」 表示該表格存放在程序存儲器中。

unsigned char code zixing[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff

};

(3)定義數碼管LED1和LED2的顯示變數

為了增加驅動程序的可移植性,筆者為數碼管LED1和LED2定義了顯示變數。顯示變數就是本驅動程序的對外介面,外部程序只要改變顯示變數的值就可改變數碼管顯示的數值。定義方式如下:

unsigned char led_str[2]={10,10};

led_str[0]直接對應數碼管LED1, led_str[1]直接對應數碼管LED2。本項目中由專門的子程序將全局變數time計算拆分成led_str[0]和led_str[1]。

void js()

{

led_str[1]=time/10%10;

led_str[0]=time%10;

}

(4)數碼管驅動程序

數碼管驅動程序「void chushi(char i)」在定時中斷服務程序中被調用執行。根據初始化程序的定義,定時中斷服務程序每1ms被執行一次。定時中斷服務程序中運用全局變數「t」記錄進入該服務程序的次數,「t」計滿2000由定時中斷服務程序清零。

數碼管驅動程序的參數「char i」是用來確定當前點亮的是LED1還是LED2,當參數為「0」時點亮LED1,參數為「1」時點亮LED2。如果我們希望偶數次進入定時中斷服務程序時點亮LED1,奇數次進入定時中斷服務程序時點亮LED2,我們可以用程序調用語句「chushi(t%2);」輕松實現。

進入數碼管驅動程序後首先調用子函數js(),計算當前的led_str[0]和led_str[1]。接下來將兩個數碼管全部熄滅以防止余暉的出現。最後點亮需要點亮的數碼管並送出字型碼。驅動程序代碼如下:

void chushi(char i)

{

js(); //計算顯示變數

an=0xff; //去余暉

wei1=i; wei2=!i; //確定片選

an=zixing[led_str[i]]; //送字型碼

}

2、按鍵驅動程序

按鍵驅動程序分為按鍵識別和按鍵功能執行兩部分。按鍵功能執行可在按鍵按下時或按鍵抬起後執行,文中將其設計在按鍵抬起後執行。

(1)定義按鍵I/O地址

根據實際電路,三個按鍵(啟動鍵、復位鍵、暫停/啟動鍵)分別接在P3口的P3.2,P3.3和P3.4三個引腳上。為了取鍵值方便還將P3口定義為「iokey」,程序中可作定義如下:

#define iokey P3

sbit key1=P3^2;

sbit key2=P3^3;

sbit key3=P3^4;

(2)按鍵驅動流程

按鍵識別的通用流程為:I/O口寫「1」→判斷有無鍵按下→延時去抖→確定鍵值→等待按鍵抬起→執行按鍵功能。按鍵驅動程序中定義了兩個靜態變數「ts」 和「kv」,分別用來延時去抖和存放鍵值。

(3)延時去抖

靜態變數「ts」用來延時去抖。按鍵驅動程序在定時中斷服務程序中每1ms被執行一遍,每檢測到有鍵按下「ts」加1,檢測到無鍵按下「ts」清0。按鍵連續按下20ms,則連續20次執行按鍵驅動程序時都檢測到有鍵按下,此時靜態變數「ts」累加到20,可確認按鍵按下有效。

為防止按鍵一直按著不放而使「ts」累加到溢出,確認有鍵按下後可使「ts」的值保持為20,或大於20的某一個值如21。

(4)取鍵值

確認有鍵按下後即可通過讀取按鍵的I/O口狀態來得到鍵值。為讀取P3.2、P3.3和P3.4引腳狀態,屏蔽P3口其他引腳的影響,可將讀取後的數值按位或上11100011B(0xE3)再送給靜態變數「kv」。

靜態變數「kv」存放按鍵的鍵值,無鍵按下或按鍵抬起後kv的值為0。按下啟動鍵key1時kv=11111011B(0xFB),按下復位鍵key2時kv=11110111B(0xF7),按下暫停/啟動鍵key3時kv=11101111B(0xEF)。

(5)執行按鍵功能

按鍵抬起後第一次執行按鍵驅動程序時,靜態變數「kv」任保持著按鍵按下時最後得到的鍵值,以該鍵值作為參數調用按鍵執行程序「actkey(kv);」即可執行按鍵功能。調用後kv值立刻清0,確保按一次鍵執行一次按鍵功能。驅動程序代碼如下:

void key()

{

static unsigned char kv=0;

static unsigned char ts=0;

key1=1;key2=1;key3=1;

if(!(key1&key2&key3))

{

ts++;

if(ts>=20)ts=20; //有鍵按下

if(ts==20)

kv=iokey|0xe3; //取鍵值

}

else

{ //無鍵按下或按鍵已抬起

actkey(kv);

ts=0;

kv=0;

}

}

函數actkey(kv)用來根據鍵值「kv」執行相應操作。當「kv」等於0xFB時代表啟動鍵key1按下,函數actkey(kv)將全局變數act賦值為「1」。當「kv」等於0xF7時代表復位鍵key2按下,函數actkey(kv)將全局變數「time」復位為「30」。當「kv」等於0xEF時代表暫停/啟動鍵按下,函數actkey(kv)將全局變數act取反。每按一個按鈕都有將全局變數「t」清0的操作,目的是每當復位、或啟動計時時,進入定時中斷的次數都從0開始計算,否則會出現第1秒計時不準確的現象。程序代碼如下:

void actkey(unsigned char k)

{

switch(k)

{

case 0xfb:act=1;t=0;break;

case 0xf7:time=30;t=0; break;

case 0xef:act=~act;t=0; break;

}

}

四、結束語

本文在編程過程中以面向對象的編程思路封裝了兩個LED數碼管和三個獨立按鍵。當其驅動程序在定時中斷服務程序中被調用,編程者只要操作其介面:數組「led_str[2]」和函數「actkey(unsigned char k)」,無需直接對硬體進行編程即可改變功能,增強了軟體的通用性和可移植性。

⑧ 用單片機設計一個電子時鍾倒計時提醒器

8155
pa0-7
接led
a-h
8155
pb0-7
接顯示小燈
(顯示秒功能計數)
89c51p2.0-2.3
接x1-x4
(鍵盤控制功能)
89c51p1.6
1.7
接8155cs端和
i/0-m端
8155
pc0
pc1
接y1
y2
然後設計匯編程序
有主程序
顯示子程序
小時、分、秒子程序
鬧鍾、鍵盤子程序等。

閱讀全文

與微機倒計時顯示裝置設計相關的資料

熱點內容
油料呼吸閥檢測儀器怎麼使用 瀏覽:549
定陶都有什麼機械公司 瀏覽:523
萬向傳動裝置實物 瀏覽:873
製冷系統一般什麼時候過壓 瀏覽:405
探金儀器是什麼公司 瀏覽:810
上圖是探究凸透鏡成像的實驗裝置 瀏覽:699
空調打多少度不製冷算缺氟 瀏覽:229
微信登新設備怎麼進不去 瀏覽:446
高中課本所有實驗裝置及原理 瀏覽:572
冰箱製冷有氣怎麼回事 瀏覽:319
腹腔鏡裡面有哪些器材 瀏覽:912
寶豐有什麼機械表專賣 瀏覽:936
機械設備怎麼貯存 瀏覽:144
垃圾桶健身器材做什麼資料 瀏覽:821
寧海健身器材怎麼選 瀏覽:436
復合廠有什麼設備 瀏覽:735
美國對中國工具箱 瀏覽:506
機床6140和6150差什麼 瀏覽:846
機械師英文怎麼讀 瀏覽:569
機械類考研究生怎麼搞 瀏覽:144