資源簡介
ps2鍵盤程序,ps2鍵盤程序,ps2鍵盤程序,已成功。

代碼片段和文件信息
/*============================================================
????????使用1602液晶顯示和PS/2鍵盤的示例??
????????-------------------------------------------------
???????????
==============================================================
SMC1602A(16*2)模擬口線接線方式
連接線圖:
???????---------------------------------------------------
???????|LCM-----51???| LCM-----51???| LCM------51??????|
???????--------------------------------------------------|
???????|DB0-----P1.0?| DB4-----P1.4?| RW-------P2.1????|
???????|DB1-----P1.1?| DB5-----P1.5?| RS-------P2.0????|
???????|DB2-----P1.2?| DB6-----P1.6?| E--------P2.2????|
???????|DB3-----P1.3?| DB7-----P1.7?| VLCD接1K電阻到GND|
???????---------------------------------------------------
Keyboard接線
??????PS/2--------51
??????1?DATA------P3.4
??????3?GND
??????4?VCC
??????5?CLK-------P3.3?接在51的外部中斷,觸發方式為低電平
[注:AT89x51使用12M或11.0592M晶振實測使用11.059M
[Keil?uV2?7.01編譯運行通過?程序中沒有做鍵盤數據的奇偶校驗]
=============================================================*/
#include?
#include?“scancodes.h“
#define?LCM_RW??P2_1?//定義LCD引腳
#define?LCM_RS??P2_0
#define?LCM_E???P2_2
#define?LCM_Data??P0
#define?Key_Data?P3_4?//定義Keyboard引腳
#define?Key_CLK??P3_3
#define?Busy????0x80?//用于檢測LCM狀態字中的Busy標識
void?LCMInit(void);
void?DisplayOneChar(unsigned?char?X?unsigned?char?Y?unsigned?char?DData);
void?DisplayListChar(unsigned?char?X?unsigned?char?Y?unsigned?char?code?*DData);
void?Delay5Ms(void);
void?Delay400Ms(void);
void?Decode(unsigned?char?ScanCode);
void?WriteDataLCM(unsigned?char?WDLCM);
void?WriteCommandLCM(unsigned?char?WCLCMBuysC);
unsigned?char?ReadDataLCM(void);
unsigned?char?ReadStatusLCM(void);
unsigned?char?code?cdle_net[]?=?{“??www.pp51.com??“};
unsigned?char?code?email[]?=?{“pp51com@163.com“};
unsigned?char?code?Cls[]?=?{“????????????????“};
static?unsigned?char?IntNum?=?0;?//中斷次數計數
static?unsigned?char?KeyV;?//鍵值
static?unsigned?char?DisNum?=?0;?//顯示用指針
static?unsigned?char?Key_UP=0?Shift?=?0;//Key_UP是鍵松開標識,Shift是Shift鍵按下標識
static?unsigned?char?BF?=?0;?//標識是否有字符被收到
void?main(void)
{
unsigned?char?TempCyc;
Delay400Ms();?//啟動等待,等LCM講入工作狀態
LCMInit();?//LCM初始化
Delay5Ms();?//延時片刻(可不要)
DisplayListChar(0?0?cdle_net);
DisplayListChar(0?1?email);
ReadDataLCM();//測試用句無意義
for?(TempCyc=0;?TempCyc<10;?TempCyc++)
Delay400Ms();?//延時
DisplayListChar(0?1?Cls);
IT1?=?0;?//設外部中斷1為低電平觸發
EA?=?1;
EX1?=?1;?//開中斷
do
{
if?(BF)
Decode(KeyV);
else
EA?=?1;?//開中斷
}
while(1);
}
//寫數據
void?WriteDataLCM(unsigned?char?WDLCM)?
{
ReadStatusLCM();?//檢測忙
LCM_Data?=?WDLCM;
LCM_RS?=?1;
LCM_RW?=?0;
LCM_E?=?0;?//若晶振速度太高可以在這后加小的延時
LCM_E?=?0;?//延時
LCM_E?=?1;
}
//寫指令
void?WriteCommandLCM(unsigned?char?WCLCMBuysC)?//BuysC為0時忽略忙檢測
{
if?(BuysC)?ReadStatusLCM();?//根據需要檢測忙
LCM_Data?=?WCLCM;
LCM_RS?=?0;
LCM_RW?=?0;
LCM_E?=?0;
LCM_E?=?0;
LCM_E?=?1;
}
//讀數據
unsigned?char?ReadDataLCM(void)
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????14653??2008-04-27?13:04??PS2Key\PS2Key.M51
?????文件???????6942??2005-05-28?20:23??PS2Key\PS2Key.c
?????文件????????504??2008-04-27?13:10??PS2Key\PS2Key.plg
?????文件???????1506??2004-03-03?21:00??PS2Key\scancodes.h
????.......??????1660??2005-05-28?20:23??PS2Key\PS2Key_Uv2.Bak
?????文件???????1942??2008-04-27?13:04??PS2Key\PS2Key.Uv2
????.......???????829??2005-05-28?20:24??PS2Key\PS2Key_Opt.Bak
?????文件????????858??2008-04-27?13:04??PS2Key\PS2Key.Opt
?????文件??????15118??2008-04-27?13:04??PS2Key\PS2Key.LST
?????文件??????14123??2008-04-27?13:04??PS2Key\PS2Key.OBJ
?????文件??????12019??2008-04-27?13:04??PS2Key\PS2Key
?????文件???????3158??2008-04-27?13:04??PS2Key\PS2Key.hex
?????目錄??????????0??2008-04-27?13:03??PS2Key
-----------?---------??----------?-----??----
????????????????73312????????????????????13
- 上一篇:可靠性程序
- 下一篇:基于ARM的GUI源代碼c
評論
共有 條評論