51单片机中按键检测时间问什么将数据清零的这段代码取消注释后,数码管不会亮,加注释的这段代码有问题?

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num1,num;
uchar code table[]={ //显示数据编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
sbit key1=P3^0;//数值加1
sbit key2=P3^1;//数值减1
sbit key3=P3^4;//数值归零
sbit key4=P3^3;//数值保持
sbit dula=P2^0;
sbit wela=P2^1;
void unt();
void delay(uint z);
void display(uchar shu);
void keyscan();
void main()
{
unt();
while(1)
{
keyscan();
display(num1);
}
}

void unt() //初始化函数
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;

}
void delay(uint z)
{
uint x,y;
for (x=z;x>0;x--)
for (y=110;y>0;y--);
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{num=0;
num1++;
if(num1==60)
num1=0;

}
}
void display(uchar shu)
{
uchar shi,ge;
shi=shu/10;
ge=shu%10;

dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);

dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
}
void keyscan()
{
if (key1==0 )//给数码管加1
{
delay(5);
if(key1==0)
{
num1++;
if(num1==60)
num1=0;
while(!key1);
}
}
if (key2==0)
{
delay(5);
if(key2==0)//给数码管减1
{
num1--;
if(num1==0)
{
num1=59;
}
while(!key2);
}
}
/* if(key3==0)//给数码管清零(这段代码取消注释的话,不管按键与否,数码管全都不亮了?)
{
delay(10);
if(key3==0)
{
num1=0;
}
while(!key3);
} */
}
请大神指教,为什加入清零按键,加1按键,减一按键都不能显示,数码管不亮?

第1个回答  2015-02-02
代码上看是没问题的
估计是你的KEY3一直被按下了吧
检查电路连接是不是有问题
也就是说KEY1和KEY2和KEY3是不是一样的电路追问

这是它的原理图,key1和key2、key3都是独立键盘,但是还是加上key3的程序,数码管就不会亮,也不清楚程序是怎么回事?

追答

KEY3就是和KEY2是一样的结构,应该不会出问题
这样你把KEY3的功能复制的和KEY1一模一样,就说说KEY3也是加1
你看是不是会出问题,还出问题就是KEY3电路问题

还有你把num1==60的判断都改成num1>=60

本回答被提问者和网友采纳
第2个回答  2015-02-02
关注这个问题

51单片机中按键检测时间问什么将数据清零的这段代码取消注释后,数码管...
代码上看是没问题的 估计是你的KEY3一直被按下了吧 检查电路连接是不是有问题 也就是说KEY1和KEY2和KEY3是不是一样的电路

51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续...
int i=0;\/\/定义一个变量用来累计长按的时间 if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)\/\/如果有按键按下 { while(!KEY1)\/\/如果按键1按下 { xianshi(neirong);\/\/执行显示 delay_ms(1);\/\/延时 i++;\/\/每次i自加1 if(i>=1000){ k=11;\/\/按键1长按 } else { k=1;\/\/按...

51单片机问题:按键,停止计数,数码管不显示数字变化
你的定时中断,是用来显示的,令TR0=0,不可。只能使计数值不变即可。

51单片机中为什么有时数码管不太亮呢
数码管串接的电阻有关,跟动态扫描的延时长短也有关

51单片机C语言程序4个独立按键实现对数码管数字显示的加减清零等
P1是LED.P2是按键sbit KEY_OUT_1 = P2^3;sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1;sbit KEY_OUT_4 = P2^0;#define uchar unsigned char#define ulint unsigned long#define Frequency 10\/\/定时器中断时间 = f*T#define Time 1\/\/一个周期1ms#define TubeNumber 6\/\/数码管个...

51单片机如何让一个数码管闪烁而其他数码管一直保持亮的状态不受影响...
\/\/4个0表示4个数码管都可以正常亮 void display(uint m,uchar mode )\/\/4位显示子程序 带某位闪烁功能 \/\/mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁 \/\/mode=5 全部闪烁 { uchar a1,a2,a3,a4;staic ia;uchar modeaa;a1=m\/1000;a2=m\/100%...

51单片机二段数码管如何显示数字并且不闪烁?
显示时,就不用再检查按键了,if(num>=10){ \/\/while(k1==1);\/\/删掉这行 P2=0xfe; \/\/这行和下行交换一下 P0=Dsy_Code[num\/10];下图是仿真的结果,可以正常显示了。但是,在按键的时候,个位会闪一下,这是因为按键后有等待按键的语句 if(k1==0){ while(k1==0); \/\/因为这行,...

关于STC51单片机按键影响数码管亮度的问题
你的程序是在等待按键释放吧,不再去执行显示子程序了,所以,才出现这种情况。你可以在等待按键释放的同时调用显示子程序。假设按键定义为ins1,显示子程序是display(),可以这么写:if(ins1==0){ 想要写的语句;while(ins1==0) display(); \/\/等待按键释放时调用显示子程序 } ...

想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一...
你这数码管的1、2口就这么悬着或者接dp一起了真的没问题吗……全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。然后一个全局变量代表秒 编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第...

51单片机相关的问题 里面的delayms() 什么作用 为什么不会影响数码...
delayms() 是延时函数在里面起消影的作用 里面影响数字变化的是你的定时器 void T0_time() interrupt 1

相似回答
大家正在搜