#include <REGX52.H>
unsigned char Nixietable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned char xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
}
while (--i);
}
}
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=Nixietable[Number];
Delay(1);
}
void main()
{
unsigned char number=0,num;
while(1)
{
if(P3_1=0)
{
Delay(20);
while(P3_1==0);
Delay(20);
number++;
if(number>=10)
number=0;
num=number;
}
Nixie(1,num);
}
}
这是51的码想用K1控制1号位数值从0到9的增加,但不知道为什么K1按下之后没有反应求解
1条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题出在if语句的条件判断上,应该使用双等号“==”用来判断是否相等,而不是单等号“=”用于赋值操作。所以代码中的if语句应该改为if(P3_1==0)。 同时,为了确保K1按下时只有一次数字增加的操作,需要在K1按下之后加入延时操作,以避免连续触发数字增加操作。 另外,由于K1的状态是按下才能执行操作,应该在while循环中进行判断,并在K1松开后才能执行数字增加操作。代码中的num=number;应该放在if语句内部。 下面是修正后的代码示例:#include <REGX52.H> unsigned char Nixietable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void Delay(unsigned char xms) { unsigned char i, j; while(xms--) { i = 2; j = 199; do { while (--j); } while (--i); } } void Nixie(unsigned char Location, unsigned char Number) { switch(Location) { case 1: P2_4=1; P2_3=1; P2_2=1; break; case 2: P2_4=1; P2_3=1; P2_2=0; break; case 3: P2_4=1; P2_3=0; P2_2=1; break; case 4: P2_4=1; P2_3=0; P2_2=0; break; case 5: P2_4=0; P2_3=1; P2_2=1; break; case 6: P2_4=0; P2_3=1; P2_2=0; break; case 7: P2_4=0; P2_3=0; P2_2=1; break; case 8: P2_4=0; P2_3=0; P2_2=0; break; } P0 = Nixietable[Number]; Delay(1); } void main() { unsigned char number = 0, num; while(1) { if(P3_1 == 0) { Delay(20); while(P3_1 == 0); Delay(20); number++; if(number >= 10) number = 0; num = number; } Nixie(1, num); } }解决 无用评论 打赏 举报