用89C52做了一个温度数据采集器,LCD12864显示,自己添加了外接矩阵键盘,但按下键盘无法实现界面切换。求大神帮忙解决一下
之前的子函数经过测试,没有问题,皆可独立显示,但在按键反馈切换上出了问题
部分代码如下:
unsigned char xdata K; //键盘返回值
/*************************************************************************/
unsigned char KeyScan() //按键扫描
{
unsigned char cord_l,cord_h; //声明列线和行线的值的储存变量
P1 = 0xf0; //P1^7-P1^0=11110000
if( (P1 & 0xf0) != 0xf0) //判断是否有按键按下
{
delay(5); //软件消抖
if( (P1 & 0xf0) != 0xf0) //判断是否有按键按下
{
cord_l = P1 & 0xf0; // 储存列线值
P1 = cord_l | 0x0f;
cord_h = P1 & 0x0f; // 储存行线值
//while( (P1 & 0x0f) != 0x0f ); //松手检测
return (cord_l + cord_h); //返回键值码
}
}
}
/*********************************************************************/
主界面(可单独显示):
void tempmenu1(); //分别是三个界面的子函数,都可以独立显示
void tempmenu2();
void presmenu();
void mainmenu()
{
unsigned char code TITLE[]={"****功能菜单****"};
unsigned char code DAT1[]={"1:温度监测----"};
unsigned char code DAT2[]={"2:相关指标----"};
unsigned char code DAT3[]={"3:其它参数----"};
lcd_int();
delay(25);
write_cmd(0x01);
showstring1(0x80,TITLE,0x10);
delay(20);
showstring1(0x90,DAT1,0x07);
delay(20);
showstring1(0x88,DAT2,0x06);
delay(20);
showstring1(0x98,DAT3,0x07);
delay(20);
do
{
K=KeyScan();
delay(1);
}
while( (K!=0xee)&&(K!=0xde)&&(K!=0xbe) );
if (K==0xee)
{lcd_int();
tempmenu1();}
else if (K==0xde)
{lcd_int();
tempmenu2();}
else if (K==0xbe)
{lcd_int();
presmenu();}
else
delay(1);
}
/*********************************************************************/
温度界面1(可单独显示):
void mainmenu();
void tempmenu1() //温度显示界面
{
unsigned char code TITLE[]={"****温度监测****"};
unsigned char code DAT1[]={"温度1 :"};
unsigned char code DAT2[]={"温度2 :"};
unsigned char code DAT3[]={"温度3 :"};
unsigned char code DW[]={"℃----"};
unsigned int T1,T2,T3;
unsigned char t1[6];
unsigned char t2[6];
unsigned char t3[6];
lcd_int();
delay(25);
write_cmd(0x01); //显示温度一二三标识
showstring1(0x80,TITLE,0x10);
delay(50);
showstring1(0x90,DAT1,0x07);
delay(50);
showstring1(0x88,DAT2,0x07);
delay(50);
showstring1(0x98,DAT3,0x07);
delay(50);
do
{
delay(20);
T1 = MAX6675_ReadReg1();
delay(40); //获取温度值
T2 = MAX6675_ReadReg2();
delay(40);
T3 = MAX6675_ReadReg3();
delay(40);
sprintf(t1,"%d",T1);
sprintf(t2,"%d",T2);
sprintf(t3,"%d",T3);
showstring1(0x94,t1,0x04);
delay(50);
showstring1(0x95,DW,0X03);
delay(50);
showstring1(0x8c,t2,0x04);
delay(50);
showstring1(0x8d,DW,0X03);
delay(50);
showstring1(0x9c,t3,0x04);
delay(50);
showstring1(0x9d,DW,0X03);
delay(50);
K=KeyScan();
}
while(K!=0x7d);
if(K==0x7d)
mainmenu();
else
delay(1);
}
/******************************************************/
剩下的两个界面代码与温度界面1相似,但按下矩阵键盘后没有反应
/****************************************************/
主函数就是初始的主菜单,但烧录后按下键盘没有反应
void main()
{
tempmenu1();
}
/**************************************************************/
只是想利用矩阵键盘来实现界面的切换,但是无法成功,特在此求助。。。
不知道是不是代码有问题?
已经解决了,没事了,要用switch语句才行