likemanweb 发表于 2016-8-25 16:53 楼主方便说说是哪里出了问题吗? |
是不是没有采用动态扫描 |
likemanweb 发表于 2016-8-25 16:56 是哪里出了问题?可否告知一下? |
读输入的时候要把P1^4~P1^7拉高,也就是置一,其他的写零,也就是P1=0xf0;除此之外,还要考虑到按键抖动,这点楼主是考虑到了,不过感觉有些不妥,有些啰嗦,不知道楼主把数码管段选都置一是什么意思?建议楼主可以这样写: void main() { P1=0xf0; while(1) { if((P1|0x00)!=0xf0) { delay5(1);//延时消抖 if((P1&0x00)!=0xf0) { switch(P1&0xf0) { case 0xe0:SMG=DIG_CODE[1];ws1=1;delay5(400);ws1=0;break; //延时加长,这样看到的时间长点 case 0xd0:SMG=DIG_CODE[2];ws2=1;delay5(400);ws2=0;break;//NPN型三极管,发射极接地,高电平导通,做开关用 case 0xb0:SMG=DIG_CODE[3];ws3=1;delay5(400);ws3=0;break; case 0x70:SMG=DIG_CODE[4];ws4=1;delay5(400);ws4=0;break; } } } } } |
找到问题了,还是要谢谢你们 |
huangfuxi2002 发表于 2016-8-25 15:18 找到问题了,还是要谢谢你们 |
huangfuxi2002 发表于 2016-8-25 15:18 找到问题出在那了,还要是谢谢你 |
找到问题出在那了,还是要谢谢你们 |
switch(P1&0xf0) { case 0xe0: ws1=1;ws2=0;ws3=0;ws4=0; SMG=DIG_CODE[1]; break; case 0xd0:;;break; 同上打开相应的led位 case 0xb0:;;;break; case 0x70:;;break; } |
按key1的时候把LED1为1其他的全部写为0; switch(P1&0xf0) { case 0xe0: ws1=1;ws2=0;ws3=0;ws4=0; SMG=DIG_CODE[1]; break; case 0xd0:;;break; 同上打开相应的led位 case 0xb0:;;;break; case 0x70:;;break; } |
thest 发表于 2016-8-25 10:31 按你说的试了,不可以的 |
case语句少了大括号吧,应该是case 0xe0:{SMG=DIG_CODE[1];ws1=0;delay5(1);ws1=1;}break; |
简单任务 |