PS2键盘设计与C51程序实现详解
需积分: 12 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键盘控制系统,使设备能够正确响应用户的键盘输入。
2008-04-27 上传
2011-08-11 上传
2023-08-28 上传
2024-09-25 上传
2023-12-22 上传
2024-01-03 上传
2024-01-05 上传
2024-11-04 上传
benjamin721
- 粉丝: 18
- 资源: 2