共阳数码管段码不对吧 |
fenger112 发表于 2018-4-26 19:16 这是与你使用的数码管是共阴或共阳来确定的 |
对啦,我也刚看明白,学习了 |
wulin 发表于 2018-4-26 07:12 谢谢了,不过P0=~table;这句要改成P0=~table;才行 |
fenger112 发表于 2018-4-25 20:43 #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}; //共阴数码管码表0~F sbit key_s1 = P3^2; //独立按键S1 //uchar num; void delay(uint z); void main() { uchar i=0; P2 = 0xff; P0=~table; while(1) { if(key_s1 == 0) { delay(20); //按键消抖 if(key_s1 == 0) { i++; if(i>9) i=0; P0=~table; while(!key_s1); //松手检测 // num++; // if(num == 10) // num = 0; } } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } |
现在是正常了,可是怎么按下按键,直接从0跳到2,怎么回事啊,大家在帮我看看哪里出问题了。 #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}; //共阳数码管码表 sbit key_s1 = P3^2; //独立按键S1 uchar num; void delay(uint z); void main() { uchar i; P2 = 0xff; while(1) { if(key_s1 == 0) { P0=~table[i]; i++; if (i>9) i=0; delay(20); //按键消抖 if(key_s1 == 0) num++; if(num == 10) num = 0; while(!key_s1); //松手检测 } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } |
数码管数组用反了吧? |
逻辑混乱了 你现在实现的是0-f的抽奖显示吧 1.你的16次for循环应该去掉 2.要显示的应该是num,不是i 3.delay(1000)影响消抖,且你不按按键数码管显示数字不会变,这句应该去掉 暂时看到那么多 |
你的程序思路不对啊。 你先for,你知道你按键时,for到哪里了?所以,你按下键时,真的是碰运气,for到哪,就是哪儿,所以,不会跟你设想的按一下,走一个字。 我是这样改你的程序的 void main() { uchar i; P2 = 0xff; while(1) { if(key_s1 == 0) { delay(1000); P0=table[i]; i++; if (i>9) i=0; delay(20); //按键消抖 if(key_s1 == 0) num++; if(num == 10) num = 0; while(!key_s1); //松手检测 } } } 另外,我还不明白,你的num变量是干什么的,没什么用啊。 |
参与人数 1 | 黑币 +5 | 收起 理由 |
---|---|---|
![]() | + 5 |