导航:首页 > 操作系统 > c51单片机倒计时

c51单片机倒计时

发布时间:2022-07-30 04:06:32

㈠ 51单片机做一个10秒倒计时的程序

C语言
#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
p27=P2^7;//数码管位选端定义
uchar
c,i;
//数码管译码表
unsigned
char
code
NumDecode[]
=
{
0XC0,//;0
0XF9,//;1
0XA4,//;2
0XB0,//;3
0X99,//;4
0X92,//;5
0X82,//;6
0XF8,//;7
0X80,//;8
0X90,//;9
};
void
main()
{
i=0;//10秒计时设置
c=0;//中断次数计数
p27=1;//数码管位选端关闭
TMOD=1;//设置定时器0为工作方式1
TH0=(65536-46080)/256;//定时50ms高8位求模
TL0=(65536-46080)%256;//定时50ms低8位求余
EA=1;//开总中断
ET0=1;//定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(c==20)//50ms中断20次
{
c=0;
i++;//倒计时总数每秒减1
}
if(i<10)
{
p27=0;//数码管位选选通
P0=NumDecode[i];//显示数据
}
else
//循环计时设置
{
i=0;
}
}
}
void
timer0()
interrupt
1//定时器0中断入口
{
TH0=(65536-46080)/256;//定时器重新赋初值
TL0=(65536-46080)%256;
c++;//中断次数
}

㈡ 51单片机怎么用三个按键控制分别为时钟,秒表,倒计时

假如三个按键分别为k1,k2,k3。
用k1选择3个功能,按一下切换一个功能。
在时钟状态下,用k2选择调节位,用于调时,分别选小时的十位,个位,分的十位,个位,开始计时这5个状态。k3调节位加一,只能按加一调节了。
在秒表状态下,k2为计时和停止切换。k3为清0。
在倒计时状态下,k2和k3作用与秒表相同。倒计时初始值只好固定的。

㈢ 用51单片机显示交通灯倒计时原理是什么

就是实时显示剩余数时间,并且以秒为单位,每秒刷新一次显示,其原理是通过单片机端口驱动LED字段显示对应数字。

㈣ c51单片机倒数 按键控制停止 倒数然后按下恢复倒数

include<reg51.h>
unsigned char code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsigned char sec=30,scanled;
unsigned char disdat[2];
sbit keys=P1^0;
sbit keyc=P1^1;
sbit fmq=P3^0;
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec/10;
disdat[1]=sec%10;
}
void t0isr() interrupt 1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
if(sec>0 && flag==0)sec--;
}
dischg();
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0xfe;
P0=ledtab[disdat[1]];
break;
case 1:
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单片机利用两个数码管实现60秒倒计时

个位数能够显示正常,那么就说明十位数的处理代码出了问题;

给出代码看看吧

㈥ c51单片机时钟,按键可使其从当前时间倒计时

#include<reg51.h>

#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsignedcharsec=0,min=0,hour=24,scanled;
unsignedcharkey,mode,time;
unsignedchardisdat[8];
unsignedcharalarm[3]={23,59,0},dly;
sbitkeyhu=P1^0;
sbitkeyhd=P1^1;
sbitkeymu=P1^2;
sbitkeymd=P1^3;
sbitkeysu=P1^4;
sbitkeysd=P1^5;
sbitkeyst=P1^6;
sbitfmq=P3^0;
bitflag=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;

disdat[2]=min%10;
disdat[3]=min/10;

disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
break;
case1:
if(time==20)
{
time=0;
if(sec>0&&flag==0)sec--;
elseif(min>0&&flag==0){sec=59;min--;}
elseif(hour>0&&flag==0){sec=59;min=59;hour--;}

if((hour==alarm[0])&&(min==alarm[1])&&(sec==alarm[2])){fmq=1;flag=1;dly++;}
}
break;
}
if(dly>=2){fmq=0;flag=0;TR0=0;dly=0;}
dischg();
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x20;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x10;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x08;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x04;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x02;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x01;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
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;
time=0;
mode=1;
dischg();
while(1)
{
if(keyhu==0)
{
while(keyhu==0);
TR0=0;
hour++;
hour%=24;
}
if(keyhd==0)
{
while(keyhd==0);
TR0=0;
if(hour>0)hour--;
if(hour==0)hour=23;

}
if(keymu==0)
{
while(keymu==0);
TR0=0;
min++;
min%=60;
}
if(keymd==0)
{
while(keymd==0);
TR0=0;
if(min>0)min--;
if(min==0)min=59;
}
if(keysu==0)
{
while(keysu==0);
TR0=0;
sec++;
sec%=60;
}
if(keysd==0)
{
while(keysd==0);
TR0=0;
if(sec>0)sec--;
if(sec==0)sec=59;
}
if(keyst==0)
{
while(keyst==0);
TR0=~TR0;
}
dischg();
}
}

㈦ 用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

㈧ c51单片机循环显示如下:(倒计时30s后流水灯右依次点亮)点亮一次再30倒计时~,求c程序代码

单片机流水灯的程序很简单,常用延时子程序来实现。现在改为用定时器实现定时,完成30秒倒计时。在主程序中先初始化定时器,启动定时后计中断次数,再计秒。以下面仿真图为例。


把红框内的延时改为秒计数就行了。

阅读全文

与c51单片机倒计时相关的资料

热点内容
手机网站图片压缩 浏览:168
前端程序员干嘛 浏览:562
女权主义pdf 浏览:458
阿里云服务器低价续费 浏览:337
python监控日志脚本 浏览:134
云服务器实例是什么意思 浏览:710
小寻app是做什么的 浏览:649
c语言中编译和运行 浏览:1000
画流图找循环编译原理 浏览:155
oppo手机西瓜视频的文件夹 浏览:867
骑手一般用哪个app 浏览:610
程序员老板用什么手机 浏览:848
比心app头像不通过为什么 浏览:105
加密币市值前十走势 浏览:190
单片机学习推荐课程 浏览:473
对数ln的运算法则图片 浏览:735
仿微博app源码 浏览:781
怎么取消调用app 浏览:545
程序员去哪里求助 浏览:834
服务器里的端口是什么 浏览:975