PS2键盘设计与C51程序实现详解

需积分: 12 7 下载量 39 浏览量 更新于2024-09-13 1 收藏 53KB DOC 举报
"这篇文档主要介绍了如何使用C51编程语言设计PS2键盘的控制系统,包含了一系列的关键函数和过程,如初始化、数据接收、发送、缓冲区管理等。" 在微控制器编程中,C51是一种针对8051系列芯片的高级语言,常用于嵌入式系统的开发。在PS2键盘的设计中,C51程序扮演了关键角色,它控制着键盘的数据通信和处理。以下是一些核心知识点: 1. **晶振频率配置**:`#define Frequence 11`定义了系统晶振频率为11MHz,这决定了微控制器的工作速度以及定时器的计数基准。 2. **延时函数**:`#define DELAY10*Frequence/6`和`#define SLEEP8*Frequence/6`是基于晶振频率计算的延时函数,用于实现特定时间的等待,这些延时在与PS2键盘通信时至关重要,因为PS2协议需要精确的时间同步。 3. **端口定义**:`sbit KBCLK = "P3"^0;`和`sbit KBDATA = "P3"^1;`分别定义了键盘的时钟线和数据线,这两个引脚用于与PS2键盘进行串行通信。 4. **函数定义**: - `bit bat(void)`检查系统是否正常,返回错误状态。 - `unsigned char buf_length(void)`返回键盘缓冲区中的数据个数。 - `bit command_s(void)`检测是否有键盘命令需要接收。 - `void clr_buf(void)`清空键盘缓冲区。 - `void del_head(void)`删除缓冲区头部的数据。 - `unsigned char exist(unsigned char)`查找缓冲区中是否存在指定的扫描码。 - `bit itempty(void)`检查缓冲区是否为空。 - `unsigned char get_head(void)`获取缓冲区头部的扫描码。 - `unsigned char get_head_f(void)`获取头部的标记信息。 - `bit insert(unsigned char, unsigned char)`向缓冲区插入新的扫描码并设置相应的标记。 - `void ini_timer01(void)`初始化定时器0或1,用于控制通信和扫描速度。 - `void receive_process(void)`处理接收到的键盘命令。 - `void reset(void)`执行软件复位。 - `unsigned char scan_kb(unsigned char)`扫描指定行的键盘列信号。 - `void send_buf(void)`发送缓冲区中的所有扫描码。 - `bit send_code(unsigned char_KeyNo, bit flag)`发送按键的接通或断开码。 - `bit send(unsigned char)`发送单个数据字节。 - `void set_default(void)`设置默认配置。 - `void set_timer1(void)`复位定时器1。 - `void set_scan_v(unsigned char)`设置扫描速度。 - `void set_flag(unsigned char)`设置缓冲区标志。 这些函数共同构成了PS2键盘的控制逻辑,它们负责读取键盘输入,处理键盘命令,存储按键状态,以及与主机通信。 在实际应用中,C51程序会不断地循环执行,通过时钟线和数据线与PS2键盘交互,接收按键扫描码,将它们存储在缓冲区中,然后根据需要发送到主机。当键盘有新按键按下时,程序会检测到这一变化并相应地更新缓冲区。此外,程序还会处理来自主机的命令,如设置扫描速度或执行其他系统级操作。 通过理解和运用这些知识点,开发者能够创建一个完整的PS2键盘控制系统,使设备能够正确响应用户的键盘输入。