### 基于51单片机的贪食蛇游戏机开发
#### 一、硬件设计
##### 1.1 单片机与PC机通信电路
- **RS-232C标准**:用于单片机与PC机之间的串行通信。大多数PC机配备DB-9型串口连接器,支持9个信号的异步通信。
- **电平转换**:由于RS-232C接口信号并非标准的TTL电平,因此需要进行电平转换。采用MAX232集成电路完成这一转换任务。MAX232需要外接4个0.1μF电容或1μF电解电容,目的是将5V电压转换成RS-232电平所需的±10V电压。
- **电路设计**:根据MAX232的特性设计出单片机与PC机通过PC机上的DB-9插座的串行通信接口电路。
##### 1.2 单片机与LCD接口电路
- **OCM12864液晶显示模块**:这是一种128×64点阵型液晶显示模块,采用KS0107控制IC,可以直接与CPU连接。
- **接口配置**:片选信号CS1与CS2接至P2.4和P2.3引脚,RS、R/W、E分别接至P2.2、P2.1、P2.0引脚。VEE驱动负电压输出,V0通过10K电位器调节LCD亮度。
- **P0口配置**:51单片机的P0口采用OC输出(即集电极开路输出),在P0口与OCM12864的I/O口之间接入10K排阻,确保信号传输的正确性。
#### 二、软件设计
##### 2.1 主程序工作流程
- **初始化**:系统上电后,首先对LCD进行初始化,接着初始化定时器,并启动定时器。
- **主循环**:执行程序主体逻辑,检查是否有中断发生。中断来源包括驱动贪食蛇自动前行的定时中断和用户控制贪食蛇移动方向的键盘中断。
- **状态判断**:如果没有中断发生,程序继续判断蛇头是否碰壁或头尾相撞。如果发生碰撞,则结束游戏,否则继续执行程序主体循环。
##### 2.2 液晶初始化
- **忙碌标志位检查**:读取忙碌标志位BF,当BF为1时表示内部操作正在进行,为0时表示允许指令操作。
- **显示配置**:设置显示起始行为第一行,并设置屏幕显示开启。
- **初始化代码**:通过调用函数`void init_lcd(void)`实现初始化过程。
##### 2.3 贪食蛇的移动
- **定时器0中断**:贪食蛇的步进时间由定时器0中断产生。假设晶振频率fosc=12MHz,一个机器周期为1μs。设定时XM8,则定时器0方式1的计数初值为65536-X。
- **步进控制**:中断计数值P初始设为20,开始时TH0和TL0都为0,定时约65ms。之后TH0为0xa0,TL0为0x00,定时约41ms。每当定时中断发生一次,P减1,直到P为0时,贪食蛇移动一步。
- **速度调整**:当贪食蛇吃到食物时,P的初始值减少,蛇的步进时间随之减少,移动速度加快。
##### 2.4 食物的随机出现
- **随机数生成**:使用定时器计数器的低八位TL0的数值来生成随机数,确保食物位置不会与蛇的位置重复,也不会超出边界。
- **食物刷新机制**:食物出现的位置需要满足特定条件才能被接受,否则需重新生成食物位置。
通过上述硬件和软件的设计,该基于51单片机的贪食蛇游戏机能够实现稳定运行,具备良好的人机交互体验,适合用作教学或实践项目的一部分。