导航:首页 > 操作系统 > 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秒倒计时相关的资料

热点内容
程序员老公烫头 浏览:692
服务器文件地址格式 浏览:129
securecrtandroid 浏览:176
短字符串压缩 浏览:863
u盘插入后显示加密格式化 浏览:944
我的世界怎么用命令方块获得超级武器 浏览:382
狗语翻译器app链接怎么下 浏览:905
选择排序算法的流程图 浏览:881
如何对文件夹开启共享 浏览:527
常用的磁盘调度算法 浏览:662
怎么用返利app返利 浏览:127
java代码快速 浏览:243
单片机左移右移后是补1还是0 浏览:599
湛江一号命令 浏览:333
导出命令行 浏览:274
C和php交互 浏览:600
苹果手机里的通讯录如何导入安卓手机 浏览:170
怎么在京东app里面看自己会员等级 浏览:43
emerson服务器怎么短接启动 浏览:559
工控编程人员工资 浏览:398