?? lcdkey.c
字號:
/********************************************/
/* LJD-IV 液晶、鍵盤驅動
/* 作者:劉延軍
/* 2007年10月2日
/********************************************/
#include <lcdkey.h>
#include <reg52.h>
/***********LCD******************************/
/*LCD顯示初始化*/
void LcdInitialize(void)
{
LCD8255CONTROL=0x88;
LCD8255C=0x84;
LCD8255C=0x82;
LCD8255B=0;
}
/*查詢ASK狀態*/
bit QueryAsk()
{
if(LCD8255C&0x80)
return 1;
else
return 0;
}
/*延時*/
void LcdDelay()
{
unsigned char t1,t2;
for(t1=0;t1<0x0a;t1++)
for(t2=0;t2<0xff;t2++)
{
}
}
/*向LCD發送數據ch,握手協議ASK/ANSWER*/
void SendDataToLcd(unsigned char ch)
{
LCD8255A=ch; //命令ch送數據口
LcdDelay(); //延時
LCD8255B=0xff; //置ANSWER為高電平,鎖存數據到LCD
LcdDelay(); //延時
while(QueryAsk==0)
{
//判斷LCD模塊是否忙于內部處理數據(ASK=1?)
}
LCD8255B=0; //ASK=1后,拉低ANSWER
while(QueryAsk==1)
{
//等待ASK=0,準備發送下一個數據
}
}
/*顯示ASCII字符*/
void LcdDisplayAsc(unsigned char xx,unsigned char yy,unsigned char asc)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF1); //顯示ASCII字符,操作碼F1
SendDataToLcd(xx);
SendDataToLcd(yy);
SendDataToLcd(asc);
}
/*顯示區位碼漢字*/
void LcdDisplayWord(unsigned char xx,unsigned char yy,
unsigned char qq,unsigned char ww)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF0); //顯示區位碼漢字,操作碼F0
SendDataToLcd(xx);
SendDataToLcd(yy);
SendDataToLcd(qq);
SendDataToLcd(ww);
}
/*顯示浮點型數據*/
void LcdDisplayFloat(unsigned char xx,unsigned char yy,float fdata)
{
unsigned char ascArr[17],*p,x,y;
x=xx;y=yy;
p=ascArr;
sprintf(p,"%f",fdata);
for(;*p;p++)
{
LcdDisplayAsc(x++,y,*p);
}
}
/*顯示位點陣*/
void LcdDisplayDotBit(unsigned char xx,unsigned char yy)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF2); //顯示位點陣,操作碼F2
SendDataToLcd(xx);
SendDataToLcd(yy);
}
/*顯示字節點陣*/
void LcdDisplayDotByte(unsigned char xx,unsigned char yy,unsigned char bt)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF3); //顯示字節點陣,操作碼F3
SendDataToLcd(xx);
SendDataToLcd(yy);
SendDataToLcd(bt);
}
/*清屏*/
void LcdClear(void)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF4);
}
/*局部清屏*/
void LcdClearSection(unsigned char xx,unsigned char yy)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF0);
SendDataToLcd(xx);
SendDataToLcd(yy);
SendDataToLcd(55);
SendDataToLcd(90);
}
/*上移*/
void LcdShiftUp(void)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF5);
}
/*下移*/
void LcdShiftDown(void)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF6);
}
/*左移*/
void LcdShiftLeft(void)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF7);
}
/*右移*/
void LcdShiftRight(void)
{
while(QueryAsk==1) ; //ASK為0后方可發送數據
SendDataToLcd(0xF8);
}
/*************LCD END****************/
/*************KEY********************/
void KeyInitialize(void)
{
KEY8279COM=0xDF; //總清除命令
do
{
ACC=KEY8279COM; //讀取8279狀態
}while(ACC^7==1); //等待清除命令結束
KEY8279COM=0x01; //譯碼掃描鍵盤
KEY8279COM=0x32; //18分頻,8279CLK接ALE(主頻/6)
}
bit KeyPressed(void) /*判斷FIFO有鍵按下*/
{
if( KEY8279COM&0x0f)
return 1;
else
return 0;
}
unsigned char ReadKey(void) //讀取鍵盤碼
{
unsigned char ScanCode,Key;
while(KeyPressed()==0) ; //無鍵按下等待
KEY8279COM=0x40; //讀FIFO RAM的命令
ScanCode=KEY8279DATA; //取鍵盤數據
//ScanCode=ScanCode&0x3f; //取低六位為鍵盤值
switch(ScanCode)
{
case 0xd8:{Key=1;break;}
case 0xd9:{Key=2;break;}
case 0xda:{Key=3;break;}
case 0xdb:{Key=4;break;}
case 0xdc:{Key=5;break;}
case 0xd0:{Key=6;break;}
case 0xd1:{Key=7;break;}
case 0xd2:{Key=8;break;}
case 0xd3:{Key=9;break;}
case 0xd4:{Key=0;break;} //數字鍵
case 0xc8:{Key=0x0a;break;} //Next
case 0xc9:{Key=0x0b;break;} //Pre
case 0xca:{Key=0x0c;break;} //OK
case 0xcb:{Key=0x0d;break;} //Cancel
case 0xcc:{Key=0x0e;break;} //STOP
default : Key=0xff;
}
return Key;
}
/*************KEY END****************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -