資源簡介
本文在分析PS/2協議和PS/2鍵盤和PS/2鼠標工作原理與特點的基礎上,給出在AT89C51單片機上實現對PS/2鍵盤支持的硬件連接方法以及驅動程序的設計實現。

代碼片段和文件信息
//-----------------------函數聲明,變量定義--------------------------------------------------------
#include?
#define?KEY?P1
unsigned?char?key_code;???????????//鍵值
unsigned?char?key_buf[8];?????????//按鍵緩沖區
unsigned?char?key_COUNT;??????????//按鍵計數器
unsigned?char?COUNT_TI;???????????//定時中斷計數
//-----------------------變量聲明---------------------------------------------------------------------
void?system_init(void?);?????????//初始化,設置定時器0的工作方式,供主程序調用
void?TIMER0_SCANkey();???????????//定時器0中斷處理函數
bit?judge_hitkey();??????????????//判斷是否有鍵按下,有返回1,沒有返回0
unsigned?char?scan_key();?????????????//掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
void?key_manage(unsigned?char?keycode);?//按鍵處理
//...........每個按鍵對應一個處理程序
//--------------------------------------------------------------------------------------------------
//?函數名稱:?scan_key
//?函數功能:?掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
//????????????無鍵按下返回0
//--------------------------------------------------------------------------------------------------
unsigned?char?scan_key()??????????????//掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
??{
???unsigned?char?scancodekeycodekeycode_linekeycode_row;
???scancode=0xF0;??????????????????????//列置低,行置高
???KEY=scancode;???????????????????????//輸入掃描碼,掃描行
???keycode_line=KEY;
???scancode=0xF0;????????????????????????//列置高,行置低
???KEY=scancode;???????????????????????//輸入掃描碼,掃描列
???keycode_row=KEY;
???keycode=(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
???return(keycode);
???}
//--------------------------------------------------------------------------------------------------
//?函數名稱:?Timer0_init()
//?函數功能:?初始化設置
//????????????設定INT0的工作方式
//--------------------------------------------------------------------------------------------------
void?Timer0_init(void?)??
?????????????{
??????????????TMOD=0x20;?//定時器0工作在方式2的定時模式
??????????????ET0=1;?????//定時器0中斷允許
??????????????TH0=0;
??????????????TL0=0;
??????????????TR0=1;?????//定時器0開始計數
??????????????EA=1;??????//系統中斷允許
??????????????}
//--------------------------------------------------------------------------------------------------
//?函數名稱:?TIMER0_intrupt
//?函數功能:?定時器0中斷處理程序?按鍵定時查詢
//--------------------------------------------------------------------------------------------------
void?TIMER0_SCANkey()?interrupt?1?using?1
??????????????{
???????????????EA=0;????????????????????????//系統中斷禁止
???if((++COUNT_TI)%30==0)
???{
???switch(COUNT_TI/30)
???{
????case?1:if(scan_key()==0)?
????????????COUNT_TI=0;??????????//無鍵按下,計數值歸零
???break;
????case?2:break;
????case?3:if(scan_key()==0)
???????????COUNT_TI=0;???????????//無鍵按下,計數值歸零,上次按鍵未擾動
???else?
???key_code=scan_key();??//又有效建,獲取鍵值
??break;
????????default:if(scan_key()==0)????//等待按鍵釋放
???????????key_manage(key_code);??//有一個有效按鍵,調用按鍵處理程序
? ???}
??}
EA=1;
??????}
//--------------------------------------------------------------------------------------------------
//?函數名稱:?key_manage
//?函數功能:?有效按鍵處理
//??????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????94138??2009-04-09?14:38??ps2\PS2_鍵盤\Interfacing?the?PC?AT?Keyboard.pdf
?????文件???????4525??2008-07-25?19:23??ps2\PS2_鍵盤\Keil?C\LCD1602_4.H
?????文件???????1565??2008-07-25?18:23??ps2\PS2_鍵盤\Keil?C\PS2_Key.C
?????文件???????4320??2008-07-25?18:33??ps2\PS2_鍵盤\Keil?C\PS2_Key.H
?????文件???????2973??2008-07-25?18:33??ps2\PS2_鍵盤\Keil?C\PS2_Key.hex
?????文件???????1334??2008-07-25?18:33??ps2\PS2_鍵盤\Keil?C\PS2_Key.Opt
?????文件???????2003??2008-07-25?18:33??ps2\PS2_鍵盤\Keil?C\PS2_Key.Uv2
?????文件?????112964??2009-04-09?14:38??ps2\PS2_鍵盤\Keyboard1.pdf
?????文件?????286732??2008-10-15?16:55??ps2\PS2_鍵盤\PS2?PC鍵盤編程參考資料.mht
?????文件???????1692??2008-07-27?21:15??ps2\PS2_鍵盤\PS2.H
?????文件?????455248??2008-07-22?20:31??ps2\PS2_鍵盤\PS2鍵盤+LCD1602顯示.pdf
?????文件?????672518??2008-06-06?15:50??ps2\PS2_鍵盤\PS2鍵盤控制LCD12864?實驗(二十一).pdf
?????文件???????1498??2005-04-12?16:33??ps2\PS2_鍵盤\PS2鍵盤的設計\head.h
?????文件???????1086??2005-05-14?13:56??ps2\PS2_鍵盤\PS2鍵盤的設計\jianpan.Opt
?????文件???????1981??2005-05-14?07:04??ps2\PS2_鍵盤\PS2鍵盤的設計\jianpan.Uv2
?????文件???????3792??2005-05-14?04:48??ps2\PS2_鍵盤\PS2鍵盤的設計\PS-2.c
?????文件???????4092??2005-05-14?06:11??ps2\PS2_鍵盤\PS2鍵盤的設計\通信.c
?????文件???????8961??2009-04-17?20:45??ps2\PS2_鍵盤\PS2鍵盤的設計.C
?????文件???????8422??2009-04-17?20:37??ps2\PS2_鍵盤\單片機應用PS2鍵盤的實例.C
?????文件?????290101??2008-10-15?17:27??ps2\PS2_鍵盤\單片機系統中PS2鍵盤驅動程序的設計.mht
?????文件???????3299??2008-07-25?18:35??ps2\PS2_鍵盤\單片機驅動標準PC機鍵盤的C51程序.C
?????文件?????198445??2008-10-15?17:24??ps2\PS2_鍵盤\用AT89C2051設計的PC-AT鍵盤.mht
?????文件???????4234??2009-04-19?14:43??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\LCD1602_8A.H
?????文件????????956??2009-04-19?16:37??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\LCD_ASCII.H
?????文件??????36705??2009-04-18?19:00??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS2?Key_Scan_Code.jpg
?????文件???????2239??2009-04-19?16:40??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS2鍵盤.hex
?????文件???????1475??2009-04-19?16:41??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS2鍵盤.Opt
?????文件???????2011??2009-04-19?13:37??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS2鍵盤.Uv2
?????文件???????1797??2009-04-19?16:37??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS_keyboard.C
?????文件???????4783??2009-04-19?16:37??ps2\PS2_鍵盤\鍵盤+LCD1602顯示\PS_keyboard.H
............此處省略80個文件信息
- 上一篇:socket編程聊天室C++
- 下一篇:DX9.0小游戲C++代碼
評論
共有 條評論