我按下键 结果所有的数都显示了。。。原意是按一个显示一个数 在按下 下个数显示。。。主程序循环查询。。为什么按一下结果都显示了呢 明明应该只有一个数显示啊 。。
void main(void)
{
port_init();
delay(65536);
flag2=EEpromRead(255);
if(flag2!=0x01)//如果上次是1 说明这次上电是睡眠状态
{EEpromWrite(255,0x01);}
else
{
EEpromWrite(255,0xff);
asm("nop");
asm("sleep");
asm("nop");
while(1);
}
LCDinit();
displaydata[0]=8;
displaydata[1]=8;
displaydata[2]=8;
displaydata[3]=8;
displaydata[4]=8;
displaydata[5]=8;
displaydata[6]=8;
displaydata[7]=8;
setLCDsegment();
//delay(65536);
//tmint();
j=0;
while(1)
{
keyboradscan();//按键查询
switch(result)
{
case 0xeb: //假设0 第一个按键是第8个数码管
displaydata[7-j]=0;
setLCDsegment();
//j++;
break;
//这后面是送的显示
case 0xde: //1
displaydata[7-j]=1;
setLCDsegment();
break;
case 0xdd: //2
displaydata[7-j]=2;
setLCDsegment();
break;
case 0xbd: //3
displaydata[7-j]=3;
setLCDsegment();
break;
case 0xdb: //4
displaydata[7-j]=4;
setLCDsegment();
break;
case 0xd7: //5
displaydata[7-j]=5;
setLCDsegment();
break;
case 0xbe: //6
displaydata[7-j]=6;
setLCDsegment();
break;
case 0xee: //7
displaydata[7-j]=7;
setLCDsegment();
break;
case 0xed: //8
displaydata[7-j]=8;
setLCDsegment();
break;
}
j++;
if(j==8)
{
j=0;
}
}
}
void keyboradscan(void)
{
unsigned char key_a=3000,i=1;
//while(key_a--); //先消抖;
PORTC=0X7F; ////C7输出低电平,其他三位输出高电平 C7是列线
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0x0f; //清除高4位 因为我的布线 高四位是列线 低四位是行线
if(result!=0x0f) //判断低4位是否为全1(全1代表没按键按下)
{
result=result|0x70; //否,加上高4位0x70,做为按键扫描的结果
}
else //是,改变高4位输出,重新判断是否有按键按下
{
PORTC=0Xbf; //C6输出低电平,其他三位输出高电平 C6是列
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口结果
result=result&0x0f; //清除高4位
if(result!=0x0f) //判断低4位是否为全1(全1代表没按键按下)
{
result=result|0xb0; //否,加上高4位0xb,做为按键扫描的结果
}
else //是,改变高4位输出,重新扫描
{
PORTC=0Xdf; //C5输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0x0f; //清除高4位
if(result!=0x0f) //判断低4位是否为全1(全1代表没按键按下)
{
result=result|0xd0; //否,加上高4位0x0d,做为按键扫描的结果
}
else //是,改变高4位的输出,重新扫描
{
PORTC=0Xef; //C4输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0x0f;//清除高4位
if(result!=0x0f) //判断低四位是否为全1(全1代表没有按键按下)
{
result=result|0xe0;//否,加上高4位0x0e,做为按键扫描的结果
}
else //是,全部按键扫描结束,没有按键按下,置无按键按下标志位
{
result=0xff; //扫描结果为0xff,做为没有按键按下的标志
}
}
}
}
//return;
} |