我想用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++;
}

我想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一...
全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。然后一个全局变量代表秒 编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第三种状态则没反应(或者要重置什么随你)然后定时器,一直开着就好,...

51单片机两个阳极数码管显示24倒计时怎么显示00
1、基于51单片机共阴两位数码管显示倒计时#includeunsigned char s=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char count,d1,d2,g,y;signed int time=10; void delay(unsigned char i);void sm()d1=time\/10;d2=time%10;P1=sd1;P3=0x00;delay(2);P3=0x01;P1...

51单片机接2个led数码管,怎么让数码管倒计时?
include<reg52.h> define uchar unsigned char define uint unsigned int uchar a , b=0;sbit wei1=P1.0;sbit wei2=P1.1;\/\/共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) \/\/1ms延时程序 { uint ...

求两位数码管显示一个倒数时间的单片机程序,比如显示从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^...

求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 ...

编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法
编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法 用单片机的定时器T0定时,计时1秒,实现倒计时的秒表的功能。程序如下 include<reg51.h> unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};\/\/共阳数码管段码表 unsigned char second;\/\/秒倒...

51单片机c程序用定时器控制两个数码管显示0到59,一直没弄懂段位和位选...
分为 a b c d e f g h 八个 段码脚,四个 位码脚(四个数字位)数码管 的 显示 方法 需要 扫描显示,就是每次 只能 显示 一位数字,四位数字 分 四次显示,这样 要让人 眼 能 同时 看到 四位数字,并且 不闪烁,需要每个数字 每秒钟 显示 50 次 以上,这样 就有了 ...

基于51单片机的999倒计时C语言程序。
\/ 要求是能进行9999秒倒计时 用C语言实现 \/ include<at89X51.h> define uchar unsigned char define uint unsigned int uchar num_qian,num_bai,num_shi,num_ge;\/\/定义千位,百位,十位,个位。uint time;\/\/要显示的时间0~9999 uint tcnt;\/\/计时单元 \/\/***\/\/ \/\/以下是端口定义 \/\/*...

求大神编一道51单片机实现多种倒计时功能
程序的组成是:两个按键,一组四位数码管,两个LED发光二极管 程序的功能是:按下按键A,两个LED同时点亮,并延时10秒(时间随意修改)按下按键B,两个LED同时熄灭,并延时10秒(时间随意修改)无按键按下时,两个LED交替点亮,达到闪烁的效果 程序如下,并加了注释,若满意请采纳!include <reg51....

keil写程序 单片机二位数码管显示倒计时
sbit wei4=P2^7;uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};\/\/共阴数码管0~9的十六进制码 void delay(uchar xms) \/\/软件延时 { int i,j;for(i=xms;i>0;i--)for(j=125;j>0;j--);} void display(int tens,ones) \/\/用来显示数字...

相似回答