❶ 用單片機如何製作一個倒計時器
我用的是89C52單片機寫的,數碼管是共陰極的。99秒定時器,你只需要修改初始的值就可以了。#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar tt=0,flag;
uint i=0;
uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
void display(uint i);
void delay(uint del)
{
uchar i, j;
for(i=0; i<del; i++)
for(j=0; j<=148; j++);}
main()
{
TMOD=0X01;
TR0=1; //啟動定時器
ET0=1; //開定時器
TH0=0X40;
TL0=0X00;
EA=1; //開總中斷
while(1)
{
if(tt==20)
{
tt=0;
i++;
if(i==99)
i=0;
} display(i);
}
}
void display(uint k)
{
P2=0X04;
P0=table[k/100];
delay(5);
P2=0X02;
P0=table[k%100/10];
delay(5);
P2=0X01;
P0=table[k%10];
delay(5);
}
void timer0() interrupt 1
{
TH0=0X40;
TL0=0X00;
tt++;
}
❷ 誰能幫我編一個單片機倒計時定時器的課設,萬分感謝
這個設計挺簡單的,估計不用一天就完事了吧
❸ 如何用單片機做一個簡單的倒計時器
51單片機實現數碼管99秒倒計時,其實很簡單,就是使用定時器中斷來實現。目的就是學習怎樣用單片機實現倒計時,從而實現一些延時控制類的東西,99秒只是一個例子,你完全可以做出任意倒計時如10秒倒計時程序。定時器定時時間計算公式:初值X=M(最大計時)-計數值。
初值,換算成十六進制,高位給TH0,低位給TL0,如果用定時器0的話。
M(最大計時)如果是16位的,就是2的16次方,最大定時,65535 微秒,實現1秒定時,可以通過定時10毫秒,然後100次改變一次秒值即可。10*100毫秒=1S
計數值:你要定時多長時間,如果定時1毫秒,就是1000微秒,(單位為微秒),如果定時10毫秒,就是10000(微秒),當然,最大定時被定時器本身位數限制了,最大2的16次方(16位定時計數器),只能定時65.535毫秒。定時1S當然不可能1S定時器中斷。
下面為實現99秒倒計時C語言源程序
/*了解定時器,這樣的話,就可以做一些基本的實驗了,如定時炸彈~~,10秒後打開關閉繼電器*/
/*數碼管,12M晶振*/
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //連的是繼電器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01; /*定時器0 16位定時器 X=65535-10000(10毫秒)=55535=D8F0(十六進制)定時10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //這里是中斷優先順序控制EA=1(開總中斷),ET0=1(定時器0允許中斷),這里用定時器0來定時
TR0=1; //開定時器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的個位,
delay(300); //動態掃描數碼管延時
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定時器0中斷
{
static uchar second=99,count; //99隻是一個數,可以任意改,因為這里只學習怎樣實現倒計時
TH0=0xd8; //定時10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定時,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //這里讓繼電器動作,當然動作之後,要復位才能等下次倒定時再動作。
second=99; //回到99再循環來,當然,可以做其他的控制,
}
shiwei=tab[second/10]; //數碼管10位
gewei=tab[second%10]; //數碼管個位
}
❹ 我想用單片機做一個定時器,我在這方面就是個小白,但我願意虛心學習,求大神指導詳細方案,及所需的各種
sbit k1=P1^0 //按鍵埠
sbit led=P1^2 //LED指示燈
//延時子程序
delay(int m)
{ char m1;
int m2;
for(m2=0;m2<m;m2++)
{ for(m1=0;m1<200;m1++)}
}
//主程序
void main()
{ char bbz; //按鍵標志
long int n; // 計時隱銀沖次數
while(1)
{ if (k1==0) //按鍵判斷
{ delay(20);
if (k1==0) bbz+=1;
}
if (bbz%2==1) {dealy(1);n+=1;led=0;} /灶殲/延時,計數搏梁,點亮指示燈
else {n=0;led=1;} //計數,熄滅指示燈
}
}
❺ 設計一個基於單片機控制的專用定時器
按你說的意思,專門給你寫的程序
電路圖將放在http://www.hsz.ik8.com//mcu.jpg
使用51單片機,時種頻率為6MHz,
五個按鍵,1 復位鍵 2 開始/暫停鍵 3 調整鍵 4 +鍵 5 -鍵
程序如下:
;;;;;;;;;;;;;;;;;;;;;AT89S51,F=6MHz;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H ;程序從這里開始
SJMP MAIN ;主程序
ORG 0BH ;定時器0中斷入口
LJMP GOTO
ORG 40H
;初始化
MAIN:MOV SP,#5FH ;設堆棧
MOV 30H,#50H ;設初值50S
MOV 31H,#50H ;剩餘時間S
SETB P1.0 ;定時時間到輸出位P1.0,接個LED
SETB P1.1 ;1 復位鍵
SETB P1.2 ;2 開始/暫並納橡停鍵
SETB P1.3 ;3 調整鍵
SETB P1.4 ;4 +鍵
SETB P1.5 ;5 -鍵
MOV R3,#50 ;設定時次數
MOV R4,#50
CLR TR0
MOV TMOD,#02H ;設定時器0工作方式為方式2
MOV TH0,#56 ;設初始值
MOV TL0,#56
SETB ET0 ;啟動中斷
SETB EA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP:LCALL XIAN
LCALL AJ
SJMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中斷處理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO:PUSH A ;保護現絕旁場
DJNZ R3,GOTO1
MOV R3,#50
DJNZ R4,GOTO1
MOV R4,#50
MOV A,31H
LCALL DECBCD
MOV 31H,A
CJNE A,#00H,GOTO1
CLR TR0
CLR P1.0
GOTO1:POP A ;恢復現場
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2位LED顯示子程茄銷序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
XIAN:MOV A,31H ;將暫存的數轉成字形
MOV B,#10H
DIV AB
LCALL ZH
MOV P0,A ;LED顯示
MOV P2,#11111101B
LCALL DELAY
MOV A,B
LCALL ZH
MOV P0,A
MOV P2,#11111110B
LCALL DELAY
RET
DELAY:MOV R5,#0AH ;延時1mS(6MHz)
L1:MOV R6,#19H
L2:DJNZ R6,L2
DJNZ R5,L1
RET
ZH:MOV DPTR,#TAB ;字形轉換
MOVC A,@A+DPTR
MOV P2,#0FFH ;消影
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形0~9
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;-hsz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示子程序結束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BCD減1子程序HSZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DECBCD:CJNE A,#10H,DECA1
MOV A,#09H
RET
DECA1:CJNE A,#20H,DECA2
MOV A,#19H
RET
DECA2:CJNE A,#30H,DECA3
MOV A,#29H
RET
DECA3:CJNE A,#40H,DECA4
MOV A,#39H
RET
DECA4:CJNE A,#50H,DECA5
MOV A,#49H
RET
DECA5:CJNE A,#60H,DECA6
MOV A,#59H
RET
DECA6:CJNE A,#70H,DECA7
MOV A,#69H
RET
DECA7:CJNE A,#80H,DECA8
MOV A,#79H
RET
DECA8:CJNE A,#90H,DECA9
MOV A,#89H
RET
DECA9:CJNE A,#00H,DECAA
MOV A,#00H
RET
DECAA:DEC A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;按鍵;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AJ:JB P1.1,AJ2 ;復位
LCALL XIAN
JB P1.1,AJ2
CLR TR0
SETB P1.0
MOV R3,#50
MOV R4,#50
MOV TH0,#56
MOV TL0,#56
MOV 31H,30H
AJ1:JB P1.1,AJ2
LCALL XIAN
SJMP AJ1
AJ2:JB P1.2,AJ3 ;開始/暫停
LCALL XIAN
JB P1.2,AJ3
CPL TR0
AJ22:JB P1.2,AJ3
LCALL XIAN
SJMP AJ22
AJ3:JB P1.3,AJ4 ;設置調整
LCALL XIAN
JB P1.3,AJ4
CLR TR0
SETB P1.0
MOV R3,#50
MOV R4,#50
MOV TH0,#56
MOV TL0,#56
MOV 31H,30H
LOOP2:LCALL XIAN
AJ5:JB P1.4,AJ6 ;加1
LCALL XIAN
JB P1.4,AJ6
CJNE A,#99H,AJX
SJMP AJ55
AJX:MOV A,30H
ADD A,#01H
DA A
MOV 30H,A
MOV 31H,A
AJ55:JB P1.4,AJ6
LCALL XIAN
SJMP AJ55
AJ6:JB P1.5,AJ7 ;減1
LCALL XIAN
JB P1.5,AJ7
MOV A,30H
LCALL DECBCD
MOV 30H,A
MOV 31H,A
AJ66:JB P1.5,AJ7
LCALL XIAN
SJMP AJ66
AJ7:JB P1.2,AJ8 ;開始
LCALL XIAN
JB P1.2,AJ8
MOV 31H,30H
SETB TR0
AJ77:JB P1.2,AJ4
LCALL XIAN
SJMP AJ77
AJ8:SJMP LOOP2
AJ4:RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END ;程序結束
❻ 怎麼利用單片機定時器實現定時的編程過程
定時器其實就是單片機的一個內部自身時鍾的計數器,每一個周期計數器加1,所以使用定時器功能時候先要給定時器付初值,就是先寫TH0TL0的值(如下),寫完初值後就等著定時器功能的那個計數器記滿了數後也就是到了65536後就溢出了,所以一次定時的過程就是65536-初值 之間的數 所代表的時鍾周期,計數滿了溢出要產生中斷就要寫一個中斷服務子程序,子程序如下void timer0() interrrupt X 中斷服務子程序中還要給定時器計數器的TH TL付初值 進行下一次的計數,明白了吧。。樓上的那個沒寫interrupt 選擇定時器工作方式。哎呀,媽呀 累死我了
void main()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定時器0初值,定時50ms 定時多少MS就多少*1000
EA=1;//開啟總中斷
ET0=1;//定時器0中斷允許
TR0=1;//開啟定時器0
while(1)
{
}
}
void timer0() interrrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
❼ 如何用單片機製作電源定時器
豎肢消余知飢蘆
❽ 51單片機的定時器是怎麼設置的
單片機定時器的設置步驟為:
1、設置定時器的工作模式,共4種工作方式,兩種模式(計數器/定時器)。比如:
MOV TMOD,#01;設置定時器0位定時器模式,工作方式1
2、根據定時時間賦初值。比如定時10毫秒,那麼如果12M晶振的話是10000個機器周期。定時器是溢出申請中斷,所以用溢出值減去定時周期為初值。
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
3、開啟中斷、定時器。
SETB ET0
SETB EA
SETB TR0
❾ 想用單片機做個定時器,不知道寫程序,運行1個小時,停止5個小時(一直循環),求大神幫幫 。
麻煩點啊,用單片機做個時鍾鍵胡,根據時鍾的運行時間,設定即可,累或備計計算,五個小時即為300分鍾,這樣衫亮毀會很容易的