求单片机C语言程序:0~9秒计数器;第1个独立按键控制加法功能,第2个独立按键控制减法功能,第3个独立按键控制清零功能,第4个独立按键控制实现定时器1方式1定时1S使得数码管逐渐显示0~9功能,再按一次第4按键的话数字会暂停,以下是1个数码管实现的类似程序,1、2、3功能均已实现,就是第4个按键再按一次的话数字会暂停想不出怎么编,求补充!!
#include <reg51.h>
unsigned int num,a;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
unsigned char code led_code[20]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,
0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
void delay(unsigned char i)
{
unsigned char j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void keyscan()
{
/*实现加法功能*/
if(key0==0)
{
delay(7);
if(key0==0)
{
num++;
if(num==10) num=0;
while(key0!=1);
delay(7);
while(key0!=1);
}
}
/*实现减法功能*/
if(key1==0)
{
delay(7);
if(key1==0)
{
if(num==0) num=10;
num--;
while(key1!=1);
delay(7);
while(key1!=1);
}
}
/*实现清零功能*/
if(key2==0)
{
delay(7);
if(key2==0)
{
num=0;
while(key2!=1);
delay(7);
while(key2!=1);
}
}
/*实现定时器1方式1定时1S使得数码管加1显示功能*/
if(key3==0)
{
delay(7);
if(key3==0)
{
while(1)
{
if(a>20)
{
a=0;
if(num==10) num=0;
P3=led_code[num];
num++;
}
}
}
}
}
void T1_ini()
{
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void timer1() interrupt 3
{
a++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
void display()
{
P3=led_code[num];
}
void main()
{
T1_ini();
while(1)
{
keyscan();
display();
}
}
这个可以啊,超级感谢啊,我想知道那个flag是干什么用的?求大神解释!!!
追答flag 是用来记录按键按下奇偶次数的标志位。
追问这种bit定义的方法我们还没有教过,可以详细的解释一下吗?flag是怎么变化的?初始值是多少
追答肯定学过 char、int...。
这些,分别是定义八位的、16位的变量。
在单片机的 C51 语言中,还可以用 bit 定义一个 1 位的变量。
这种变量的值,只有 0 和 1。
初始值,应该自己设定。
对于本题目,设定不设定,也没有多大的关系。
if(a >= 20 && flag) {
a = 0;
num++;
if(num==10) num=0;
}
那这里是指只要flag有变化且a>=20就会执行吗?
只要:flag == 1,并且 a >= 20,就会执行。
flag == 1,可简写成 flag。
不好意思啊,程序好像有问题。。没有那个效果