|
这个问题困扰了我很久,十几天都没有解决,希望有站内大佬帮我一下。
1.问题描述:
通过按键操作控制LCD1602的显示循环显示两个页面。现有的现象是程序开始时,LCD屏保持在第一个页面不变,但是按动(按下再抬起)按钮后,LCD就自己不停的在两个页面之间循环跳变。只有在按下按钮不抬起来的时候LCD屏幕才能一直显示一个页面。PS:按键和LCD显示单独测试均正常,且引脚定义也已确定无误。
2.问题代码:#include<REG52.h>
#include"LCD1602.h"
#include"delay.h"
#include"Level_1Menu.h"
#include"Level_2Menu.h"
#include"Level_3Menu.h"
#include"Level_4Menu.h"
#include"EC11.h"
#include"PowerMode.h"
#include"interrupt.h"
#include"relay.h"
unsigned char menu = 0;
unsigned char key_num = 0;
unsigned char EC11_Action()
{
if(ENTER == 0)//判断ENTER键是否按下
{
DelayXms(5);//延时消抖,时间一般为5-10ms
if(ENTER == 0)
{
key_num = 1;//分配ENTER的键值为“1”
while(ENTER == 0);//等待松手
LCDWriteCmd(LCD_SCREEN_CLR); //清屏
}
}
return key_num;
}
unsigned char EC11_Scan()
{
switch(EC11_Action())
{
case 0:break;
case 1:menu++;if(menu>1) menu = 0;break;
default:break;
}
return menu;
}
void LCDShowService()
{
switch(EC11_Scan())
{
case 0:BAIC_C62X();break;
case 1:BAIC_B40();break;
default:break;
}
}
void T0_Service() interrupt 1 using 0
{
TR0=0; //关闭定时器
TL0=0x33; //低八位赋初值
TH0=0XFE; //高八位赋初值
LCDShowService();
TR0=1;//重新开启定时器
}
void main()
{
LCDInit();
T0_Init();
while(1);
}
|
|