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

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

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

用51操作和檢測PS2鍵盤,接收數(shù)據(jù)已經(jīng)搞定了,可是發(fā)送數(shù)據(jù)卻出錯,不知道怎么回事。給它的命令和它所執(zhí)行的完全不同,請高手指教下,到底是哪里錯了,還是沒錯,電路接得不對??接收函數(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);

//開始發(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;//寫數(shù)據(jù)程序結(jié)束后開中斷

}

全部程序是這樣的:

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

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

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

sbit RW = P1^7; //并行讀寫選擇信號, H讀, L寫

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

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);

//檢測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());

}

//寫命令

void writeCmd(uchar cmd)

{

wait();

RS = 0;

RW = 0;

E = 0;

delayUs();

LCD_DATA = cmd;

delayUs();

E = 1;

delayUs();

E = 0;

}

//寫數(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); //顯示開, 關(guān)光標(biāo)

writeCmd(0x01); //清屏

delayMs(10);

}

void init2()

{

PSB = 1; //并口方式

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

delayUs(); //延時

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; //第一行開始地址

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++]);

}

}

深圳北大青鳥

評論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲欧美综合另类久久精品 | 亚洲中文AⅤ中文字幕在线 小草在线影院婷婷亚洲 | 久久国产免费观看精品3 | 午夜性色在线观看视频 | 亚洲人成久久播播影院 | 亚洲人成电影在线观看天堂色 |