新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 復(fù)習(xí)一下PS2鍵盤解碼

復(fù)習(xí)一下PS2鍵盤解碼

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
#include

#define uchar unsigned char
#define uint unsigned int
/**************1602部分******************/
sbit lcden=P1^2;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit psdat=P3^4;
sbit psclk=P3^3;
/*char code Tab[]={0,1,2,3,4,5,6,7,8,
9,A,B,C,D,E,F};*/
char code Tab[]="0123456789abcdef";
uchar key[3];
uchar numbit,keyv,keynum,m,n,o,p,q,r;
void delay(uint z) //延時(shí)子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

本文引用地址:http://butianyuan.cn/article/201612/324697.htm

void write_com(uchar com)//定義一個(gè)帶參數(shù)的寫命令子程序
{
lcdrs=0; //1602的rs為0時(shí),接收命令,為1時(shí)接收數(shù)據(jù)
P0=com;//把void write_com(uchar com)中的COM中的數(shù)據(jù)給P0口
delay(2);
lcden=1;
delay(2);
lcden=0;
delay(2);
}

void init_1602()//定義一個(gè)初始化子程序
{
lcden=0;
lcdrw=0;
write_com(0x38);//調(diào)用 write_com子程序并把0x38賦給P0口,顯示模式打開
write_com(0x0f);//調(diào)用 write_com子程序并把“開顯示,顯示光標(biāo),光標(biāo)閃爍”指令碼賦給P0口
write_com(0x06);//調(diào)用 write_com子程序并把“地址指針加1,整屏不移動(dòng)”指令碼賦給P0口
write_com(0x80);//數(shù)據(jù)指針初始化,讓指針指向最左端,顯示從第一行開始
write_com(0x01);//調(diào)用 write_com子程序并把"清零指"令碼賦給P0口
}

void write_dat(uchar dat)//定義一個(gè)帶參數(shù)的寫數(shù)據(jù)子程序
{
lcdrs=1; //1602的rs為0時(shí),接收命令,為1時(shí)接收數(shù)據(jù)
P0=dat;//把void write_shu(uchar shu)中的COM中的數(shù)據(jù)給P0口
delay(2);
lcden=1;
delay(2);
lcden=0;
delay(2);
}

/******************/

void main()
{
init_1602();
IT1=1;//接P3^3,所以用外部中斷1,用下降沿IT1=0是用低電平
EX1=1;// 打開外部中斷1。
EA=1;//打開總中斷
while(1)
{
if(keynum==3)
{
keynum=0;
m=key[0]/16;
n=key[0]%16;
o=key[1]/16;
p=key[1]%16;
q=key[2]/16;
r=key[2]%16;
write_com(0x80);
write_dat(Tab[m]);
write_dat(Tab[n]);
write_dat(Tab[o]);
write_dat(Tab[p]);
write_dat(Tab[q]);
write_dat(Tab[r]);
}

}
}
void int1() interrupt 2
{
if((numbit>0)&&(numbit<9))
{
keyv=keyv>>1;
if(psdat)
keyv=keyv|0x80;
}
numbit++;
if(numbit>10)

{
numbit=0;
key[keynum]=keyv;
keynum++;
}
}



關(guān)鍵詞: PS2鍵盤解

評(píng)論


技術(shù)專區(qū)

關(guān)閉