导航:首页 > 操作系统 > 51单片机10秒倒计时题

51单片机10秒倒计时题

发布时间:2023-07-11 19:43:09

① 51单片机编程2位数码管倒计时,从10秒开始每隔一秒减一当减到零有重复回到10秒

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//主程序
void main()
{
P0=0x06; //显示10
P2=0x3f;
i=0;
Second_Counts=100;
TMOD=0x01; //定时器0方式1
TH0=(65536-50000)/256; //定时器0: 5ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1
while(1) ;
}
//T0中断函数
void DSY_Refresh() interrupt 1
{
TH0=(65536-50000)/256; //恢复定时器0初值
TL0=(65536-50000)%256;
if(++i==2) //50ms*2=0.1s转换状态
{
i=0;
Second_Counts--;
P0=DSY_CODE[Second_Counts/100];
P2=DSY_CODE[(Second_Counts/10)%10];
if(Second_Counts<=-1) Second_Counts=100; //显示10
}
}

② 求大神编一道51单片机实现多种倒计时功能

这个不算太难,只要利用标识符进行判断即可


标识符就是一个变量,常使用字符型变量作为标识符,占用空间小


每一种状态都用标识符表示出来,例如状态0,状态1,状态2 ..................状态254


字符型变量的值范围是 0 ~ 254 共255个值,够你用的了


给你一个类似的程序,我自己写的,你作为参考吧


程序的组成是:两个按键,一组四位数码管,两个LED发光二极管


程序的功能是:按下按键A,两个LED同时点亮,并延时10秒(时间随意修改)

按下按键B,两个LED同时熄灭,并延时10秒(时间随意修改)

无按键按下时,两个LED交替点亮,达到闪烁的效果


程序如下,并加了注释,若满意请采纳!


#include <reg51.h> //51单片机通用头文件

unsigned int i,t,h; char fe;

sbit a=P3^7; sbit b=P3^6; sbit led=P2^7; sbit lad=P2^6;//按键及LED端口定义

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

/***************************************************************************/

void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数

/***************************************************************************/

void XS(int xs) //数码管显示

{

char d1,d2,d3,d4;

d1=(xs/1)%10; d2=(xs/10)%10; d3=(xs/100)%10; d4=(xs/1000)%10;

P0=table[d1]; P1=0xf7; YS(10); P1=0xff;//个位显示

P0=table[d2]; P1=0xfb; YS(10); P1=0xff;//十位显示

P0=table[d3]; P1=0xfd; YS(10); P1=0xff;//百位显示

P0=table[d4]; P1=0xfe; YS(10); P1=0xff;//千位显示

}

/***************************************************************************/

void main()

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TMOD=0x01; TR0=1; ET0=1; EA=1;

led=0;lad=1;

while(1)

{

XS(h);//调用数码管显示函数

if(a==0){h=10;fe=0;}//按键 A, LED 亮10秒

if(b==0){h=10;fe=1;}//按键 B, LED 灭10秒

}

}

/***************************************************************************/

void t0()interrupt 1//定时器 0 中断

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++; t++;

if(h>0){t=0;}//如果按键按下,屏蔽 t 计数,

if(t>=5){t=0;led=~led; lad=~lad;}//t计数,用于两个LED闪烁

if(i>=20)//还是原来的时间判断

{

i=0;

if(h>0&&fe==0){h--;led=0;lad=0;}//如果是状态 0 同时点亮两个LED

if(h>0&&fe==1){h--;led=1;lad=1;}//如果是状态 1 同时关闭两个LED

}

if(h==0&&led==0&&lad==0){led=1;lad=0;}//此句防止数码管倒计时后两个LED继续同时点亮

}

/***************************************************************************/

③ 用51单片机,构成一个10秒倒计时器

程序很简单,你要是现在需要我用protues画个图给你,然后把程序也给你。

这种设计的话就利用定时器做变量的减法计数就行了,和0计数到10原理都一样;按键控制TRx就可以完成开始和停止。你也可以自己设计试试。

希望我的回答能帮助到你。



————————我做好了 给你吧。

④ 51单片机十秒简易计时器

因为楼主说,(不要太大面积修改)。
所以,就没有敢进行大面积的修改。

只简单的改改,未必能好用,仅供参考:

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

sbit key1=P2^7;
sbit key2=P2^6;
sbit weiH=P3^0;
sbit weiM=P3^1;
sbit weiL=P3^2;

uint num=0,ge=0,shi=0,fen=0,k;
//num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示

void delayms(uint xms) //i=xms即延时约xms毫秒
{
uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}

uchar key1scan()
{
if(key1==0) {
delayms(10);
if(key1==0) {
while(!key1) showtime();//等待释放期间,也进行显示
return 1;
}
}
return 0;//添上了返回值
}

uchar key2scan()
{
if(key2==0) {
delayms(10);
if(key2==0) {
while(!key2) showtime();
return 1;
}
}
return 0;//添上了返回值
}

void showtime() //时间显示
{

//这里去掉了while(1) ,避免了死循环

P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;//显示秒的个位
P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;//显示秒的十位
P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;//显示分钟,
}

⑤ 51单片机试题,写一个用单个数码管显示10秒倒计时的程序,急!!!!!

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit an=P2^6;
sbit wei=P2^7;
uchar disp=0;
uchar time=10;
int miao=0;
uchar code dispcode[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段码表

void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}

void main()
{
Timer0Init()
ET0=1; //开启定时器0中断
EA=1;
while(1);//等待中断
}
void time0(void)interrupt 1
{
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值

if(disp&1=0)
{
an=1;
P0=dispcode[time%10];
an=0;
wei=1;
P0=0xdf;
wei=0;
}
else
{
an=1;
P0=dispcode[time/10];
an=0;
wei=1;
P0=0xef;
wei=0;
}
disp++;
miao++;
if(miao==1000)
{
miao=0;
if(miao!=0)time--;
}

}

⑥ 如何用C51单片机做出以下程序 “秒表是倒计时,从100秒开始倒计时 用数码管实时显示当前计时值”

假设P0 P2接数码管,静态驱动,程序如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=100;
uchar time=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}

void main(void )//主程序
{
TMOD=0X01;
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
P0=table[num/10];
Delay1ms(2);
P2=table[num%10];
Delay1ms(2);
}
}
void TIMER0()interrupt 1//中断程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
num--;
}
if(num==0)
{
num=100;
}
}

⑦ 单片机编程:用数码管和led实现,用数码管倒计时10秒,LED左移闪烁一次,如此交替下去

#include<reg52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitled=P3^3;//P3^3--LED--电源,这样接法,即低电平点亮
//P0接数码管的段
//P2接数码管的位

//共阴数码管的段定义,0~9
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阳数码管的段定义,0~9
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voidDelay(uintn){
while(n--)
//voidDelay1ms()//@11.0592MHz
{
unsignedchari,j;

_nop_();
i=2;
j=199;
do
{
while(--j);
}while(--i);
}
}

voidmain(void){
ucharj=10,m=0;
while(1){
P2=1;//共阳。如果共阴,要取反
P0=table[j/10%10];//j值的十位数
Delay(5);

P2=2;//共阳。如果共阴,要取反
P0=table[j%10];//j值的个位数
Delay(5);

m++;
if(m==97){//前面显示占用约10毫秒,所以100次就是1秒
if(j==0){//倒计时到0
P2=0;//关闭数码管
for(m=0;m<5;m++){//LED闪烁
led=0;
Delay(100);
led=1;
Delay(100);
}
j=11;
}
j--;
m=0;
}
}
}


//经过测试的。。。

⑧ 用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单片机10秒倒计时题相关的资料

热点内容
手动添加dns服务器加什么数字 浏览:558
单片机中三位数码管原件 浏览:140
pdf可以删除其中一页 浏览:216
清dns缓存的命令 浏览:103
免费pdf在线转换 浏览:768
堆货算法 浏览:878
vsc编译vc程序 浏览:197
centos55命令 浏览:709
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:251
墨镜慧眼怎么下载厂商的app 浏览:63
iphone加密专线 浏览:493
aes产生加密文件 浏览:416
编程实现蓝牙通信 浏览:770
怎么恢复掉签的app 浏览:849
服务器部署ip地址 浏览:323
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:948
建行app怎么生成电子签章 浏览:510
获取当前时间javadate 浏览:75