推箱子游戏--51单片机课设计(最全)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《51单片机》

课程设计

题目:基于51单片机的推箱子游戏设计

目录

1、课程设计目的 (1)

2、课程设计题目和实现目标 (1)

3、设计方案 (1)

4、Proteus仿真原理图 (7)

5、程序设计 (9)

6、调试总结 (28)

7、设计心得体会 (28)

参考文献 (29)

附录:程序代码------------------------------------------------------------------29

1、课程设计目的

《MCS-51单片机》课程设计是与《MCS-51单片机》课程相配套的实践教学环节。《MCS-51单片机》是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。

通过课程设计,掌握以下知识和技能:

1.单片机应用系统的总体方案的设计;

2.单片机应用系统的硬件设计;

3.单片机应用系统的软件程序设计;

4.单片机开发系统的应用和调试能力

2、课程设计题目和实现目标

2.1 课程设计题目:基于51单片机的推箱子游戏设计

2.2实现目标

设计一款在以51单片机为核心的硬件系统中运行的推箱子游戏。游戏一共9关,功能包括:

(1)显示游戏开机界面和游戏界面;

(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,通过小人推动箱子,把箱子推到指定的目的地为过关,箱子只能推不能拉;(3)用于可以任意选关,并能随时退出、进入游戏;

(4)每一关都有时间计时,显示当前玩家的游戏耗时。

3、设计方案

根据设计目标,整个系统框图如下:

图1 系统框图

3.1 控制模块

选用ATMEL公司生产的AT89C52为主控芯片,它是是一个低电压,高性能CMOS 8位单片机,主要功能特性如下:

1、兼容MCS51指令系统;

2、8k可反复擦写(大于1000次)Flash

7、2个串行中断,可编程UART串行通道;

8、2个外部中断源,共8个中断源;

9、2个读写中断口线,3级加密位;

10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;

本次课设选用PDIP封装的 AT89C52芯片,其引脚功能如图2所示,图3为最小系统:

图2 引脚功能

图3 最小系统

U1:AT89C52,DIPf封装;C1,C2:22pf瓷片电容

C3:10uf电解电容;X1:12M晶振

R1:10K金属膜电阻

3.2 显示模块

选用内置T6963C控制控制器的12864图形点阵液晶(以下简称Lcd12864)做为显示模块。

T6963C控制器的最大特点具是有硬件初始值设置功能,显示驱动所需的参数,例如:占空比系数、每行驱动传输的字节数、字符的字体选择等均由引脚电平设置。所以,液晶显示模块在上电时T6963C控制器就进行初始化设置,软件操作的主要精力就可以全部用于显示界面的设计上。

市场上出售此控制器的液晶很多,本次课设选用深圳市晶日达科技有限公司生产KXM12864F.

LCD12864和单片机以模拟方式连接,即通过模拟操作时序的方法控制液晶显示。具体的接线图如图4所示

图4 显示模块

RP1:1k排阻,用于做P0口的上拉电阻;LCD1:KXM12864F

3.3按键模块

16个轻触按键连接成4*4矩阵键盘,做为按键模块,如图5所示

图5 4*4矩阵键盘

最终系统的硬件系统如下:

图6 硬件系统4、Proteus仿真原理图

在proteus搭建的仿真原理图如下:

图7 硬件系统

图8 开机画面

图9 游戏画面

图10 游戏画面

5.程序设计

5.1 Lcd12864显示驱动程序

图11 读写指令/数据时序图

准备向Lcd12864进行操作时,首先要读取lcd12864的当前的状态,只有lcd12864不忙的时候才能读写操作和数据。相关程序如下:

/**************************************************

函数名:status_bit_01()

功能:状态位sta1(读/写指令),sta0(读/写数据)判断

入口参数:

返回值:状态值i

***************************************************/

unsigned char status_bit_01()

{

unsigned char i;

P0=0xff;

cd=1;

rd=0;

for(i=10;i>0;i--)

{

if((P1&0x03)==0x03)

break;

}

rd=1;

return i;

}

/*********************************************

函数名:write_data(unsigned char dat)

功能:写数据

入口参数:8位数据dat

返回值:

*********************************************/

void write_data(unsigned char dat)

{

while(status_bit_01()==0);

rd=1;cd=0;wr=0;

P0=dat;

wr=1;cd=1;

}

/*********************************************

函数名:write_cmd1(unsigned char cmd)

功能:写命令,无参数

入口参数:8位命令cmd

返回值:

*********************************************/

void write_cmd1(unsigned char cmd)

{

while(status_bit_01()==0);

rd=1;cd=1;wr=0;

P0=cmd;

wr=1;cd=0;

}

/*********************************************

函数名:write_cmd2(unsigned char cmd)

功能:写单参数命令

入口参数:8位数据dat,8位命令cmd

返回值:

*********************************************/

void write_cmd2(unsigned char dat,unsigned char cmd)

{

write_data(dat);

write_cmd1(cmd);

}

/************************************************

函数名:write_cmd2(unsigned char cmd)

功能:写双参数命令

入口参数:8位数据data1,8位数据data2,8位命令cmd

返回值:

*************************************************/

void write_cmd3(unsigned char data1,unsigned char data2,unsigned char cmd) {

write_data(data1);

write_data(data2);

write_cmd1(cmd);

相关文档
最新文档