/// ===============================================
/// PS2 模組
/// -----------------------------------------------
/// 功能 : PS2 介面讀寫控制模組
/// -----------------------------------------------
/// Input Pins :
/// PS2DATA equ pf.7 // data line
/// Output Pins :
/// PS2CLK equ pf.6 // clock line
/// ===============================================
PS2_NOACK equ 0x00 /// PS2 無回應
PS2_ACK equ 0xFA /// PS2 有回應
/// ======== START Public 函式 ========
/// *注意,除了 Initial_PS2() 外,其餘函式都有使用到 wait io 的指令,意即有可能會 hold 住系統,需謹慎使用。
void Initial_PS2( void ); /// 初始化 IO
void PS2_Reset( void ); /// 重設 PS2,成功傳回 1,失敗傳回 0
void PS2_ReadID( void ); /// 讀取裝置 ID,成功傳回 ID,失敗傳回 0
void PS2_SendByte( void ); /// 傳入 a 將 a 傳送到 PS2 介面,return 1:ACK 0:NOACK
void PS2_RecvByte( void ); /// 等待 PS2 介面傳送一個 BYTE 的資料, a = 資料
/// ======== END Public 函式 ========
/// ===============================================
/// PC Keyboard 模組
/// -----------------------------------------------
/// 功能 : 封裝 PS2 模組功能,接收 PC Keyboard 傳來的鍵盤資料
/// -----------------------------------------------
/// Input Pins :
/// see ps2.h for detail
/// Output Pins :
/// see ps2.h for detail
/// ===============================================
/// ======== START Public 函式 ========
void Initial_KB( void ); /// 初始化 IO、重置 PS2 裝置,並檢查是否為 Keyboard
/// 若無誤,傳回 1,否則傳回 0
void KB_SetLED( void ); /// 將鍵盤上 NUM 燈亮起,成功傳回 1,失敗傳回 0
void KB_RecvByte( void ); /// 接收鍵盤一個 BYTE 的 SCAN CODE 資料。
/// ======== END Public 函式 ========
/// ===============================================
/// MS MOUSE 模組
/// -----------------------------------------------
/// 功能 : 封裝 PS2 模組功能,支援 MS MOUSE 傳來的鍵盤資料
/// -----------------------------------------------
/// Input Pins :
/// see ps2.h for detail
/// Output Pins :
/// see ps2.h for detail
/// ===============================================
/// ======== START Public 函式 ========
void Initial_Mouse( void ); /// 初始化 IO、重置 PS2 裝置,並檢查是否為 MS MOUSE
/// 若無誤,傳回 1,否則傳回 0
void Mouse_RecvByte( void ); /// 接收 MS MOUSE 傳來的資料 a
/// ======== END Public 函式 ========
PS2 KEYBOARD/MOUSE 也同樣只是封裝了 PS2 界面的函式而己,其實現只是依循 PS2 KEYBOARD/MOUSE 的 PROTOCOL 即可,無需關心底層的 I2C 界面是如何處理的,這也是模組設計上要去考量的,OOP的概念,物件的歸物件、界面的歸界面。