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

在单片机P3.2口控制启动和暂停,怎么编程?求高手帮忙啊,谢谢啦,呵呵(有可能图不正确)... 在单片机P3.2口控制启动和暂停,怎么编程?求高手帮忙啊,谢谢啦,呵呵(有可能图不正确) 展开
 我来答
空雪梦见
2013-05-20 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1205万
展开全部
你这数码管的1、2口就这么悬着或者接dp一起了真的没问题吗……
全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。
然后一个全局变量代表秒
编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第三种状态则没反应(或者要重置什么随你)
然后定时器,一直开着就好,比如定10ms,每10ms就给一个全局变量的值+1
这个变量到了100的时候就说明一秒过了,重设值,全局变量的秒减一。如果到0了,就恢复60,然后给分钟的个位减一。如果个位不够减,就把十位减一然后个位设9。如果十位和不够减,就是时间到了,flag设置为第三种状态
主函数在初始化各种状态之后不断循环给数码管显示数字,就ok了。
SHUZILEIDA
2013-05-20 · TA获得超过256个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:255万
展开全部
你这个图有问题,两数码管只接了8个IO口,也就是同时点亮两个数码管
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小马达SSDDN
2017-10-11
知道答主
回答量:2
采纳率:0%
帮助的人:1970
展开全部
#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++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式