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

在单片机P3.2口控制启动和暂停,怎么编程?求高手帮忙啊,谢谢啦,呵呵(有可能图不正确)

你这数码管的1、2口就这么悬着或者接dp一起了真的没问题吗……
全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。
然后一个全局变量代表秒
编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第三种状态则没反应(或者要重置什么随你)
然后定时器,一直开着就好,比如定10ms,每10ms就给一个全局变量的值+1
这个变量到了100的时候就说明一秒过了,重设值,全局变量的秒减一。如果到0了,就恢复60,然后给分钟的个位减一。如果个位不够减,就把十位减一然后个位设9。如果十位和不够减,就是时间到了,flag设置为第三种状态
主函数在初始化各种状态之后不断循环给数码管显示数字,就ok了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-20
你这个图有问题,两数码管只接了8个IO口,也就是同时点亮两个数码管
第2个回答  2017-10-11
#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++;
}