招生熱線
0755-86191118 0755-86191118
我的位置: 首頁(yè) > 學(xué)習(xí)專(zhuān)區(qū) > .NET技術(shù) > 關(guān)于PS2鍵盤(pán)的C程序

關(guān)于PS2鍵盤(pán)的C程序

2013-06-01 08:51:11
來(lái)源:
[導(dǎo)讀] 用51操作和檢測(cè)PS2鍵盤(pán),接收數(shù)據(jù)已經(jīng)搞定了,可是發(fā)送數(shù)據(jù)卻出錯(cuò),不知道怎么回事。給它的命令和它所執(zhí)行的完全不同,請(qǐng)高手指教下,到底

用51操作和檢測(cè)PS2鍵盤(pán),接收數(shù)據(jù)已經(jīng)搞定了,可是發(fā)送數(shù)據(jù)卻出錯(cuò),不知道怎么回事。給它的命令和它所執(zhí)行的完全不同,請(qǐng)高手指教下,到底是哪里錯(cuò)了,還是沒(méi)錯(cuò),電路接得不對(duì)??接收函數(shù)是這樣的。

void send(uchar Data)

{

uchar i,high=0;

EA=0;

EX0=0;//關(guān)閉中斷

CLK=0;

delay10us(11);

DATA=0;

delay10us(2);

CLK=1;

while(CLK==1);

//開(kāi)始發(fā)送八位數(shù)據(jù)

for(i=0;i<=7;i++)

{

if(Data & 0x01)

{

DATA=1;

high++;

}

DATA=(Data>>1);

while(CLK==0);

while(CLK==1);

}

if(high%2==0) DATA=1; //設(shè)置奇校驗(yàn)位

else DATA=0;

while(CLK==0);

while(CLK==1);

DATA=1;

while(DATA==1);

while(CLK==1);

while(DATA==0);

while(CLK==0);

EA=1;

EX0=1;//寫(xiě)數(shù)據(jù)程序結(jié)束后開(kāi)中斷

}

全部程序是這樣的:

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD_DATA P2 //數(shù)據(jù)口

sbit RS = P1^5; //并行的指令/數(shù)據(jù)選擇信號(hào), H數(shù)據(jù), L命令

sbit RW = P1^7; //并行讀寫(xiě)選擇信號(hào), H讀, L寫(xiě)

sbit E = P1^6; //并行使能端, H有效, L無(wú)效

sbit PSB = P1^1; //并/串接口選擇, H并,L串

sbit RET = P1^4; //復(fù)位, L有效

sbit DATA=P0^2;

sbit CLK=P3^2;

uchar count,ASCII=65,Data;

void trains(uchar Code);

void send (uchar Data);

//檢測(cè)LCD是否處于忙狀態(tài), 若忙返回1, 空閑返回0

bit checkBusy()

{

bit busy;

RS = 0;

RW = 1;

E = 1;

delayUs();

busy = (bit)(LCD_DATA&0x80);

E = 0;

return busy;

}

//等待LCD到空閑

void wait()

{

while(checkBusy());

}

//寫(xiě)命令

void writeCmd(uchar cmd)

{

wait();

RS = 0;

RW = 0;

E = 0;

delayUs();

LCD_DATA = cmd;

delayUs();

E = 1;

delayUs();

E = 0;

}

//寫(xiě)數(shù)據(jù)

void writeData(uchar dat)

{

wait();

RS = 1;

RW = 0;

E = 0;

delayUs();

LCD_DATA = dat;

delayUs();

E = 1;

delayUs();

E = 0;

}

//初始化LCD

void init()

{

PSB = 1; //并口方式

writeCmd(0x30); //基本指令, 擴(kuò)充指令為34H

delayMs(10);

writeCmd(0x0c); //顯示開(kāi), 關(guān)光標(biāo)

writeCmd(0x01); //清屏

delayMs(10);

}

void init2()

{

PSB = 1; //并口方式

RET=0; //復(fù)位

delayUs(); //延時(shí)

RET=1; //復(fù)位置高

writeCmd(0x36);

delayMs(10);

writeCmd(0x3E);

delayMs(10);

writeCmd(0x01); //清屏

delayMs(10);

}

void setPosition(uchar x, uchar y)

{

uchar p;

switch(x%4)

{

case 0: p = 0x80; break; //第一行開(kāi)始地址

case 1: p = 0x90; break; //第二行

case 2: p = 0x88; break; //第三行

case 3: p = 0x98; break; //第四行

}

p += y;

writeCmd(p);

}

void writeString(uchar * str)

{

uchar i = 0;

while(str[i] != '\0')

{

writeData(str[i++]);

}

}

深圳北大青鳥(niǎo)

評(píng)論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
日韩欧美在线一区二区中文 | 在线国内99精品 | 亚洲美女国产精品久久久久 | 日韩中文免费码 | 色综合一区二区在线观看 | 亚洲中亚洲中文字幕乱码首页 |