数码管显示的密码锁设计;为什么按一个键没用不显示数字,按了两个键才显示数字。C51单片机

#include<reg51.h>char scan_key(void);void delay(unsigned int i);sbit P30=P3^0;void main(){unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char led1[]={0xbf,0x8c,0x86};unsigned char i;P1=led1[0];P30=1;P0=0xff;while(1){i=scan_key();if(i==-1)continue;else if(i!=8){P1=led[i];delay(1000);P1=led1[2];delay(2000);P1=led1[0];}else{P1=led[i];delay(1000);P1=led1[1];P30=0;delay(2000);P1=led1[0];P30=1;}}}char scan_key(){char i,temp,m,n;bit find=0;P0=0xf0;i=P2;i&=0x0f;if(i!=0x0f){delay(4);i=P2;i&=0x0f;if(i!=0x0f){for(i=0;i<4;i++){P0=0xfe<<i;temp=~P2;temp=temp&0x0f;if(temp!=0x00){n=i;find=1;switch(temp){case 0x01:m=0;break; case 0x02:m=1;break;case 0x04:m=2;break;case 0x08:m=3;break;default:break;}break;}}}}if(find==0)return-1;else return(n*4+m);}void delay(unsigned int i){unsigned int k,j;for(j=0;j<i;j++)for(k=0;k<120;k++);}

unsigned char i;
P1=led1[0];
P30=1;
P0=0xff;
while(1)
{
i=scan_key();
if(i==-1)continue;//i是无符号数,怎么可能等于-1?

键盘扫描也有些问题,怎么低四位发扫描码,检测的还是低四位的值?而且
P0=0xfe<<i;这样移位的结果是低位填0,不是循环移位,达不到想要的效果。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网