暑期任务实验报告总结题目:红外控制贪吃蛇游戏2012年8月28日目录一 ,引言 (4)二, 课题任务及设计思路 (4)2.1主要任务 (4)2.2 设计思路42.2.1 主控制器的选择 (5)2.2.2 液晶屏的选择 (8)三 ,具体设计 (9)3.1软硬件基本分工 (9)3.2硬件设计部分 (9)3.2.1器件介绍、通信协议介绍 (9)3.2.2电路类型,类型介绍 (9)3.2.3 电路具体设计 (10)3.3软件设计部分 (11)3.3.1软件组成部分 (11)3.3.2软件组成部分````````````````````````````````````````````````````````````````````````````````````````````14 3.3.3 软件实现的结果 (27)四、整机调试和检测结果 .................................................................... 错误!未定义书签。
五、总结 (15)参考文献 (16)附录1 总电路图 (17)附录2 系统程序 (18)1 引言如今,游戏机风行的程度,是第一台电子游戏机的研制者诺兰-布什纳尔先生始料不及的。
在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。
游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。
然而,究竟是什么原因使游戏机如此风行呢? 在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。
第二次世界大战以后,电子计算机技术得到了突飞猛进的发展。
先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子计算机一代一代实现更新,同时软件技术也发展迅速。
在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。
这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。
由于不断修改更新,使计算机的“智力”水平与人难分高低。
随着深蓝计算机与人的棋类对决,到现在的PSP游戏机或者是家庭用的X-BOX 游戏机,游戏机的技术是日益的发展、进步。
但是,技术进步绝不是游戏机风行的唯一因素。
随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。
只有得到了游戏终端技术的支持,才能做出更新、更高难的游戏。
这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源二.课题任务及设计思路2.1主要任务组建遥控器控制电路,要求通过遥控器的方向键控制贪吃蛇游戏。
(类似于贪吃蛇游戏)2.2 设计思路①此实验我们采用38k的红外对LCD控制,通过红外接收模块对遥控数据进行采集,MCU中心模块主要对采集数据进行判断,并相应的去控制LCD的显示模块。
②软件设计流程:2.2.1 主控制器的选择STC90C51是标准的40引脚双列直插式集成电路芯如图2-1所示,AT89C51是一种带64K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
STC90C51具有以下标准功能:64K 字节 Flash,1280 字节 RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,2个16 位定时器/计数器,一个6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC90C51可降至0Hz 静态逻辑操作,支持2 种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图2-1 AT89S52的引脚图(1)管脚功能①输入/输出口P0.0~P0.7 P0口8位双向口P1.0~P1.7 P1口8位双向口P2.0~P2.7 P2口8位双向口P3.0~P3.7 P3口8位双向口②ALE地址锁存控制信号在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。
此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。
③PSEN外部程序存储器读选通信号在读外部ROM时PSEN有效(低电平),以实现外部ROM单元的读操作。
④EA访问程序存储器控制信号当EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当 EA信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。
⑤RST复位信号当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。
⑥XTAL1和XTAL2 外接晶体引线端当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
⑦Vss地线Vcc +5V电源(2)常见的第二功能信号①P3口线的第二功能P3的8条口线都定义有第二功能如表2-1所示表2-1 端口第二功能(3)EPROM存储器程序固化所需要的信号有内部EPROM的单片机芯片(例如80C51),为写入程序需提供专门的编程脉冲和编程电源,它们也是由信号引脚以第二功能的形式提供的,即:编程脉冲:30脚(ALE/ PROG)编程电压(25V):31脚(EA/Vpp)2.2.2 液晶屏的选择采用320*240LCD,根据CPU的指令进行输出。
320*240的分辨率对于小游戏来讲已经是非常高的分辨率了,足以满足小游戏的显示要求,使图像清晰,色彩丰富!红外的选择采用38K的红外遥控和接收,红外遥控的特点是不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
三具体设计3.1软硬件基本分工硬件:主要实现红外的发射与接收,单片机最小系统使红外接受管工作及实现彩屏的输出;软件:实现红外的解码,实现按键映射到游戏屏幕的动作,实现游戏规则的判定等等。
3.2硬件设计部分3.2.1电源部分电源部分由手机充电器直接提供,大概是5V/500MA,刚好是单片机需要的电源。
3.2.2 复位电路上电复位采用电平方式开关复位。
如图3-4所示。
上电复位用RC电路,电容用10uF,电阻用10K。
如图3-4 复位电路3.2.3液晶显示芯片与单片机接口电路液晶显示屏共有15个引脚,其中VDD接电源,GND接地,RS接单片机的P0.0脚,RW接单片机的P0.1脚,复位接P0.4脚,RD接P0.2脚,CS接P0.3脚,D0~D7数据段接口接P2.0~P2.7。
如图3-2.3所示图3-2.3液晶显示与单片机相连电路图3.2.4 K38与单片机接口电路图3-6 K38与单片机接口电路本游戏共有4个控键,分别是:四个方向键,用于控制小点的移动方向;分别是上下左右四个方向程序通过中断的方式检查是否有按键按下,调用移动函数。
每次有按键按下,小点会做出相应的反应。
3.3 软件部分设计3.3.1软件部分主要负责a红外解码,b将按键输入通过算法映射为小蛇在屏幕上的动作、c生成随机数(既小蛇的食物),d判定是否吃到食物/是否过关/是否结束游戏等等;1.红外编码方式本实验红外采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,(如下图所示)本红外每次发送的数据格式为引导码+8位系统码+8位系统反码+8位数据码+8位数据反码,周期约为108ms。
其中引导码由9ms低电平和4.5ms的高电平组成。
(如下图所示)如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。
(如下图所示)2.软件解码基于红外的编码方式我们的软件解码思路为,用红外的引导码的脉冲负边沿触发单片机的外部中断,进入中断,在中断中完成解码,并转换得到按键的具体的按键值。
具体实现步骤:a.外部触发进入中断,延时约2ms,若仍是低电平则确认为信号出现,进入下一步,否则跳出中断,等待下一次触发;b. 等待9MS的低电平后再等待经过4.5MS的高电平(此时引导码已结束);c.收集四组数据存入数组IRCOM[j]中(其中IRCOM[0]为系统码,IRCOM[1]为系统反码,IRCOM[2]数据码,IRCOM[3]为数据反码);d. 判定数据是0还是1。
我们采用的是在每位数据的高电平期间在适当的延时下让N自加(由红外编码方式知0与1的区别在于高电平的时长不一样,1的高电平比0的长),然后判定N的值可知数据为0或1,我们预设当N<8时数据为0,当8<=N<=30时数据为1,当N>30时为无效数据,跳出中断等待下一次触发;e. 小循环8次得到一组数据;f. 大循环4次得到4组数据;g. 数据码存在IRCOM[2]中,所以判定IRCOM[2]的值就知道按键按的是哪个了。
(上0X18,下0X5A,左0X08,右0X52)。
遥控器按键上下左右按键码0X18 0X5A 0X08 0X52附加具体代码:void IR_IN(void) interrupt 0 //外部中断服务程序unsigned char j,k;unsigned int N=0;EX0 = 0;delay_14(15);if (IRIN==1){EX0 =1;return;}//确认IR信号出现while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay_14(1);}for (j=0;j<4;j++) //收集四组数据{for (k=0;k<8;k++) //每组数据有8位{while (IRIN) //等IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay_14(1);}while (!IRIN) //等IR 变为高电平{delay_14(1);}while (IRIN) //计算IR高电平时长,得到数据是0或1{delay_14(1);N++;if (N>=30){EX0=1;return;} //0.14ms计数过长自动离开。