|
這個(gè)問題困擾了我很久,十幾天都沒有解決,希望有站內(nèi)大佬幫我一下。
1.問題描述:
通過按鍵操作控制LCD1602的顯示循環(huán)顯示兩個(gè)頁面,F(xiàn)有的現(xiàn)象是程序開始時(shí),LCD屏保持在第一個(gè)頁面不變,但是按動(dòng)(按下再抬起)按鈕后,LCD就自己不停的在兩個(gè)頁面之間循環(huán)跳變。只有在按下按鈕不抬起來的時(shí)候LCD屏幕才能一直顯示一個(gè)頁面。PS:按鍵和LCD顯示單獨(dú)測(cè)試均正常,且引腳定義也已確定無誤。
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);//延時(shí)消抖,時(shí)間一般為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; //關(guān)閉定時(shí)器
TL0=0x33; //低八位賦初值
TH0=0XFE; //高八位賦初值
LCDShowService();
TR0=1;//重新開啟定時(shí)器
}
void main()
{
LCDInit();
T0_Init();
while(1);
}
|
-
-
-
DVP_MENU.rar
2021-3-4 11:10 上傳
點(diǎn)擊文件名下載附件
66.54 KB, 下載次數(shù): 5
LCD驅(qū)動(dòng)及相關(guān)模塊
|