導航:首頁 > 操作系統 > 51單片機30秒倒計時

51單片機30秒倒計時

發布時間:2022-08-25 00:59:54

❶ 急求51單片機倒計時三十秒程序

ORG 0000H
START:MOV R0,#30

MOV DPTR,#TABLE
LOOP: LCALL DISPLAY
EDC R0
CJNE R0,#100,LOOP
DISPLAY: MOV A,R0
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R3,#50
LOOP1: MOV A,R2
LCALL CHANGE
CLR P3.1
LCALL DELAY
SETB P3.1
MOV A,R1
LCALL CHANGE
CLR P3.0
LCALL DELAY
SETB P3.0
CLR A
DJNZ R3,LOOP1
CHANGE: MOVC A,@A+DPTR
MOV P0,A
RET

DELAY: ;10ms延時
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END
說明:P0口接數碼管 p3.0 p3.1為位選

❷ 51單片機30秒倒計時,用數碼管顯示的,c程序,元件只有at89c51和數碼管,沒有其他的,

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;tt;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
num=0;
tt=0;
TMOD=0x11;//設置定時器0為工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
//EA=1;//開總中斷
ET0=1;//開定時器0中斷
ET1=1;
TR0=1;//啟動定時器0
TR1=1;
wela=1;//11101010
P0=0xea;
wela=0;
la=1;
P0=0x3f;
la=0;
while(1)
{
if(num1==25)
{
num1=0;
P1=~P1;
}
if(tt==100)
{
tt=0;
num++;
if(num==16)
num=0;
la=1;
P0=table[num];
la=0;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
void time1() interrupt 3
{
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
num1++;
}
自己發掘吧

❸ c51單片機循環顯示如下:(倒計時30s後流水燈右依次點亮)點亮一次再30倒計時~,求c程序代碼

單片機流水燈的程序很簡單,常用延時子程序來實現。現在改為用定時器實現定時,完成30秒倒計時。在主程序中先初始化定時器,啟動定時後計中斷次數,再計秒。以下面模擬圖為例。


把紅框內的延時改為秒計數就行了。

❹ 用51單片機顯示交通燈倒計時原理是什麼

void main()

{

P3 = 0;

P1 = 0;

P2 = 0xff;

initTimer();

TR0=1;

ET0=1;

EA=1;

while(1)

{

switch(state)

{

// 狀態跳轉

case 0:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 10;

state = 1;

}

break;

case 1:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 2;

state = 2;

}

break;

case 2:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 2;

state = 3;

}

break;

case 3:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 10;

state = 4;

}

break;

case 4:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 2;

state = 5;

}

break;

case 5:

if(ct == 0)

{

P3=0;P1=0;P2=0xff;

ct = 2;

state = 0;

}

break;

default:break;

}

// 執行

switch(state)

{

case 0:

//東西綠燈,南北紅燈,倒計時30秒;

E_G = 1;W_G = 1;S_R = 1;N_R = 1;

break;

case 1:

//數碼管倒計時10秒;

E_G = 1;W_G = 1;S_R = 1;N_R = 1;

display(ct,0);

display(ct,2);

display(ct+2,1);

display(ct+2,3);

break;

case 2:

//東西黃燈,倒計時2秒;

E_Y = 1;W_Y = 1;S_R = 1;N_R = 1;

display(ct,1);

display(ct,3);

break;

case 3:

//南北綠燈,東西紅燈,倒計時30秒;

E_R = 1;W_R = 1;S_G = 1;N_G = 1;

break;

case 4:

//數碼管倒計時10秒;

E_R = 1;W_R = 1;S_G = 1;N_G = 1;

display(ct,1);

display(ct,3);

display(ct+2,0);

display(ct+2,2);

break;

case 5:

//南北黃燈,倒計時2秒;

E_R = 1;W_R = 1;S_Y = 1;N_Y = 1;

display(ct,0);

display(ct,2);

break;

default:break;

}

}

}

❺ 用51單片機C語言版設計秒錶倒計時

K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB TR0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#99
CLR 00H
CLR 01H
LOOP:
JB K1,LP01
JNB K1,$
CLR 01H
INC R3
CJNE R3,#100,LOOP0
MOV R3,#0
SJMP LOOP0
LP01:
JB K2,LP02
JNB K2,$
CLR 01H
CJNE R3,#0,LP011
MOV R3,#99
SJMP LOOP0
LP011:
DEC R3
SJMP LOOP0
LP02:
JB K3,LOOP
JNB K3,$
SETB 01H
SJMP LOOP
LOOP0:
MOV A,R3
MOV B,#10
DIV AB
MOV R0,B
MOV R1,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
MOV DPTR,#TABLE
T0C:
CPL 00H
JB 00H,T001
MOV P3,#0FDH
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
T002:
JNB 01H,T0E
INC R2
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR 01H
MOV R4,#16
T005:
CPL P0.0
LCALL DELAY
DJNZ R4,T005
RETI
DELAY:
MOV R6,#200
DLY:
MOV R7,#250
DJNZ R7,$
DJNZ R6,DLY
RET
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END

❻ 51單片機控制1602不使用時鍾晶元可以直接實現倒計時嗎

可以,51有定時器功能,你可以使用定時器定時,例如定時50毫秒,那麼定時20次就是 1秒,於是定時600次就是30秒

❼ c51單片機定時器30秒倒計時程序,一個按鍵控制開始,另一個按鍵控制暫停和繼續

#include<reg51.h>
unsignedcharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsignedcharsec=30,scanled;
unsignedchardisdat[2];
sbitkeys=P1^0;
sbitkeyc=P1^1;
sbitfmq=P3^0;

voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
disdat[0]=sec/10;
disdat[1]=sec%10;
}
voidt0isr()interrupt1 //秒計時
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
if(sec>0&&flag==0)sec--;
}
dischg();
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0xfe;
P0=ledtab[disdat[1]];
break;
case1:
P2=0xfd;
P0=ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=2;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=0;
ET0=1;
ET1=1;
EA=1;
fmq=0;
scanled=0;
while(1)
{
if(keys==0)
{
while(keys==0);
TR0=1;
}
if(keyc==0)
{
while(keyc==0);
TR0=~TR0;
}
}
}

❽ 51單片機定時器實現延時30秒中斷

51單片機定時器實現延時30秒中斷,這不可能,如果晶振是12M,最大定時時間是65.536ms。
但是,要計時30秒是可以的,對中斷計數,算好定時的時間,如定時50ms,則中斷600次為30秒。

❾ 下面是51單片機30秒倒計時程序,怎麼把它改成24小時倒計時程序,別的不變,十分感謝

#include "reg51.h"
sbit start=P3^2; //外部中斷0引腳 開始
sbit rst=P3^3; //外部中斷1引腳 復位
sbit breakk=P3^4;
sbit led=P3^5;
sbit beep=P3^7;

sbit P30=P3^0;
sbit P31=P3^1;
unsigned char code anma[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};

char time=24;//【原來的30s改為24小時】
char flag_t=0; // 1秒輔助計時
char now=0; // 0停止 1 計時 2報警 3復位
unsigned int temp=0;//【添加此行】// 【定義一個16位臨時變數】

unsigned char g=0,s=3,i=0;

void delay(unsigned int n)
{
while(--n);
}

void t0_srv() interrupt 1 using 1
{
TH0=0X3C;
TL0=0XB0;
flag_t++;
if(flag_t>=20){ //20*50ms=1s
flag_t=0;
temp++; //【添加此行】
if(temp>=3600)//1小時=3600s //【添加此行】
{
temp=0;//【添加此行】
time--;
if(time<=0){
beep=0;
led=0;
TR0=0;
now=2;
time=0;
}
}
}
}
void button_start() interrupt 0 using 1 //外部中斷0
{
delay(1500);
if(start==0) {
now=1;
TR0=1;
}
else return;
while(start==0);
delay(1500);

}
void button_rst() interrupt 2 using 1
{
delay(1500);
if(rst==0) {
TR0=0;
time=24;//【原為time=30;】
i=0;
led=1;
beep=1;
now=0;
}
else return;
while(rst==0);
delay(1500);

}

void disp()
{

g=time%10;
s=time/10;
g=anma[g];
s=anma[s];

P1=g;
P31=0;
delay(250);
P31=1;

P1=s;
P30=0;
delay(250);
P30=1;
//

}
void key()
{
if(breakk==0)delay(1500);
else return;
if(breakk==0) {
if(now==1){
i++;
if(i%2)TR0=0;
if(!(i%2))TR0=1;
}
}
else return;
while(breakk==0);
delay(1500);
}
main()
{
TMOD=0X01;//定時器0工作在方式1,
EA=1;
IT0=1;
ET0=1;
TH0=0X3C;//在12M 晶振下,定時時間為50ms
TL0=0XB0;

EX0=1;
EX1=1;

//TR0=1;
while(1){
disp();
key();
}

}

閱讀全文

與51單片機30秒倒計時相關的資料

熱點內容
關於葉寸心的小說 瀏覽:146
移動通信指南pdf 瀏覽:791
php移動應用開發 瀏覽:631
福州生活用什麼app 瀏覽:916
海綿寶寶電影版有幾部 瀏覽:906
安卓保留的文件夾 瀏覽:999
網站源碼的分類 瀏覽:207
linux命令和dos命令 瀏覽:585
壓電池單片機 瀏覽:795
android虛擬機root許可權 瀏覽:702
台灣男老師女學生電影 瀏覽:43
中寰樂駕app為什麼還收費 瀏覽:361
重生推到母親 瀏覽:119
伺服器為什麼會爆服 瀏覽:407
活著余華演員表 瀏覽:406
韓國影視高分溫情片 瀏覽:643
人工智慧及其應用pdf 瀏覽:617
有漏胸的電影 瀏覽:625
打真軍香港電影 瀏覽:617
匯款app原理是什麼 瀏覽:170