我想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一个按键

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一个按键

并用一个按键啥? 51单片机我没设计过电路,用的学习板是现成的,对着电路图。 那个学习板上没有锁存器啥的,只能靠扫描来显示2个数字(就是两个数码管轮流显示数字,因为轮流速度非常快人眼看不出来一次其实只有一个在显示) 思路的话,按键和计时器都用中断控制会比较方便, 1个全局变量代表当前剩余秒数,一个全局变量代表当前剩余分钟数(或者你要一个16位变量代表秒数也行) 因为计时器无法定时1秒所以还要一个变量来辅助计时器实现每1秒引发一次事件的操作。 加上按键,这样就有2个事件:一个是1秒引发一次,一个是按钮引发 按钮作用是什么我不知道,你自己看着办 计时器就是全局变量的秒数减去1 这两个事件实现以后,主程序逻辑就是一开始启用中断、启用定时器、初始化全局变量, 然后就开始死循环,循环里的功能是把全局变量里的数字显示到数码管上,只管显示不管别的的话还是很容易的,别的(计时、按钮)全部交给中断去完成,即可。

从60秒到30秒再到90秒并循环倒计时显示。
----
有点不好理解。

从60秒到30秒,看来,是倒计时。
到了30之后,怎么办?是立即改为90吗?
到了90之后,再怎么办?是立即改为60吗?

你这数码管的1、2口就这么悬着或者接dp一起了真的没问题吗……
全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。
然后一个全局变量代表秒
编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第三种状态则没反应(或者要重置什么随你)
然后定时器,一直开着就好,比如定10ms,每10ms就给一个全局变量的值+1
这个变量到了100的时候就说明一秒过了,重设值,全局变量的秒减一。如果到0了,就恢复60,然后给分钟的个位减一。如果个位不够减,就把十位减一然后个位设9。如果十位和不够减,就是时间到了,flag设置为第三种状态
主函数在初始化各种状态之后不断循环给数码管显示数字,就ok了。

你这个图有问题,两数码管只接了8个IO口,也就是同时点亮两个数码管

#include<reg51.h>
#define uchar unsigned char
sbit P13=P3^0;
sbit P14=P3^1;
uchar c,i,a=60,z;
uchar code Numcode[]={0XC0,//;0
0XF9,//;1
0XA4,//;2
0XB0,//;3
0X99,//;4
0X92,//;5
0X82,//;6
0XF8,//;7
0X80,//;8
0X90,//;9
};
void delay(z)
{ while(z--);
}
void main()
{TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
c=0;
i=0;
EA=1;
ET0=1;
TR0=1;
while(1)
{ if(c==20)
{ c=0;
a--;}
/*if(a>=0)
{i=a/10;
P13=1;
P0=Numcode[i];
P14=0;
delay(20);
i=a%10;
P14=1;
//i=a%10;
P0=Numcode[i];
P13=0;
delay(10);}*/
if(a>=0)
{P13=1;
i=a/10;
P0=Numcode[i];
P14=0;
delay(10);
P14=1;
i=a%10;
P0=Numcode[i];
P13=0;
delay(10);}

else
{a=60;}
}
}
void timer0() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
c++;
}

  • 如何用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延时...
  • 51单片机两个阳极数码管显示24倒计时怎么显示00
    答:c语言51单片机数码管倒计时 c语言51单片机数码管倒计时,基于51单片机共阴两位数码管显示倒计时 婚礼策划粒粒 转载 关注 0点赞·1493人阅读 《基于51单片机共阴两位数码管显示倒计时》由会员分享,可在线阅读,更多相关《基于51单片机共阴两位数码管显示倒计时(2页珍藏版)》请在装配图网上搜索。1...
  • 高手帮忙51c单片机——想制作倒计时报警器,求个c程序
    答:刚写的程序,可以通过S0(功能键),S1(加键),S2(减键)设定初值,倒数为00-00-00时蜂鸣器响,通过八位LED显示;include<reg52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位选...
  • 51单片机30秒倒计时,用数码管显示的,c程序,元件只有at89c51和数码管,没...
    答:include<reg52.h> define uint unsigned int define uchar unsigned char sbit dula=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);vo...
  • 求两位数码管显示一个倒数时间的单片机程序,比如显示从99到0
    答://两位数码管显示倒计数99~00,51单片机。include<reg52.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};uchar bai,shi;uint a1,a2;sbit D1=P3^...
  • 51单片机 数码管实现九秒倒计时的程序
    答:主程序可以这样写:a=9;while(a>0){ P0=table[a];delayms(1000);a--;}
  • 求C51单片机汇编语言控制两位数码管倒计时程序,最好能说明下思路_百度...
    答:MOV R4,#60 ;60S开始倒计时 SETBEA SETBET0 SETB TR0 MOV DPTR,#TABLE MAIN1:ACALLDISP AJMPMAIN1 DISP:MOV A,R4 MOV B,#10 DIV AB ;当前值除以10 MOV 20H,A ;得出的商送给十位 MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示 MOVC A,@A+DPTR ...
  • 用LED灯显示倒计时10秒 51单片机C语言编程 跪求
    答:sbit dula=P2^6; //段控制位 sbit wela=P2^7; //位控制位 uchar miao,fen,aa,n1,n2,n3,n4;uchar code table[]={ //显示编码 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z); //延时程序声明 void init(void)...
  • 求C51单片机汇编语言控制两位数码管60秒倒计时的程序,最好能说明下思路...
    答:include <at89x52.h> include <intrins.h> define uchar unsigned char define uint unsigned int define seg P0 define sw P2 int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};int dis[]={0,0};uint X;uchar Count=0;uchar sec=60;void display(){ int a;int...
  • 怎样用51单片机实现累加计时和倒计时,并用六个共阴极数码管显示出来。用...
    答:include<reg51.h>unsigned char ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};unsigned char sec,min,hour,scanled;unsigned char key,mode,time; unsigned char disdat[6];bit upbit;sbit keyu=P3^0;sbit keyd=P3^1;...