我在用keil写一个89s52的矩阵键盘输入程序,其中我想纪录键盘输入的次数,但是变量"y"老是无变化,
都不知道怎么回事。哪位老大能告诉我一下是怎么回事?还有keil的C语言和VC或TC有什么不同吗(语句、变量、类型...)?
keil的C语言里有类似VC里的CString这种东西吗?这东西我刚用,不是很明白,请老大们多指教一下,先谢谢了。
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分别对应相应的数码管点亮
uchar keyscan(void);
void delay(uint i);
void printdata(uint i,uint j);
void main()
{
uint y=0;
uchar key;
while(1)
{
key=keyscan();//调用键盘扫描,
switch(key)
{
case 0xee: //printdata(0,7); //这里都是没问题的,只是为了单独测试注释掉了
y++; //为按下的字符串记数
break;
case 0xed: //printdata(1,7);
y++;
break;
case 0xeb: //printdata(2,7);
y++;
break;
case 0xe7: //printdata(3,7);
y++;
break;
case 0xde: //printdata(4,7);
y++;
break;
case 0xdd: //printdata(5,7);
y++;
break;
case 0xdb: //printdata(6,7);
y++;
break;
case 0xd7: //printdata(7,7);
y++;
break;
case 0xbe: //printdata(8,7);
y++;
break;
case 0xbd: //printdata(9,7);
y++;
break;
case 0xbb: y=0; //清楚输入数量
break;
case 0xb7: y--; //删除一个输入数量
break;
case 0x7e: break;
case 0x7d: break;
case 0x7b: break;
case 0x77: break;
default: //printdata(10,7); //默认 没有输入就下划线 _
break;
}
printdata(y, 0); //问题主要是这里,数字管老显示的是下划线,不知道为什么
}
}
uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行列值
P3=0xf0;
cord_h=P3&0xf0;
if(cord_h!=0xf0) //先检测有无按键按下
{
delay(100);
if(cord_h!=0xf0)
{
cord_h=P3&0xf0; //逐个检测是哪个按键按下?
P3=cord_h|0x0f;
cord_l=P3&0x0f;
return(cord_h+cord_l);//键盘最后码值
}
}
return(0xff); //返回该值
}
void delay(uint i)//延时函数
{
while(i--);
}
void printdata(uint i,uint j) //输出数字到数码管
{
P2=seg[j]; //表示最后一个数码管
switch(i)
{
case 0: P0=0xc0;break; //0
case 1: P0=0xf9;break; //1
case 2: P0=0xa4;break; //2
case 3: P0=0xb0;break; //3
case 4: P0=0x99;break; //4
case 5: P0=0x92;break; //5
case 6: P0=0x82;break; //6
case 7: P0=0xf8;break; //7
case 8: P0=0x80;break; //8
case 9: P0=0x90;break; //9
case 10: P0=0xf7;break; //_
}
}
复制代码