基于51单片机与点阵的贪食蛇游戏机开发
基于单片机和液晶显示器的游戏开发

龙源期刊网
基于单片机和液晶显示器的游戏开发
作者:王晓威唐叔进邢瑞
来源:《电子世界》2005年第07期
摘要:提出了以单片机和彩色液晶显示器为硬件基础开发游戏的思想。
并具体介绍贪吃蛇游戏的开发过程。
同时给出了完整的硬件电路原理图与主要程序流程图。
单片机凭着其强大的功能、低廉的价格和体积小等优点,在许多领域中都得到了广泛的应用。
而当前在游戏开发中,单片机并没有充分显示出它的这些特点。
而彩色液晶显示器具有功耗低、显示信息量大、显示效果逼真等特点。
所以若用彩色液晶显示器为游戏提供界面,一定会受到欢迎。
本文介绍了以8031单片机与YD-602S 型彩色液晶显示器接口电路和贪吃蛇游戏的软件设计。
毕业设计(论文)-基于51单片机的led点阵屏的设计与实现[管理资料]
![毕业设计(论文)-基于51单片机的led点阵屏的设计与实现[管理资料]](https://img.taocdn.com/s3/m/f2cf3eaca8956bec0875e320.png)
基于51单片机的LED点阵屏的设计与实现摘要本文主要阐述了用51单片机控制单色32*64的LED点阵屏显示的方法,对LED点阵屏如何进行行列信号控制及信号传输中的驱动问题进行了研究,并讨论了单片机控制系统中关键的数据处理以及发送问题。
结果表明采用并行数据输入、串行数据及同步时钟传输的专用电路可大大减少CPU的辅助时间,提高了数据的发送速度。
并给出了通过软件控制点阵屏显示的几种方式,如静态显示,分屏显示以及左移显示,对其软件的算法给出了具体分析。
基于各种算法我们就可以灵活的运用软件实现各种显示,并将其用于商业用途。
关键词LED点阵屏;单片机;驱动;扫描The Design and Realization of LED Lattice ScreenBased On MCU-51AbstractThis article mainly elaborates the method of using MCU-51 to control single color 32*64 LED lattice screen display, and researching how to carry on the ranks signal control and the question of signal actuation with the LED lattice screen, and discusses the essential data processing and the transmission question in the monolithic integrated circuit control system. The result indicates that CPU non-cutting time can be reduced greatly by using the allocated-use circuit with parallel data input, serial data and synchronism clock transmission, which has raised the data transmitting speed. This system has given several ways to control lattice screen display via software such as the static state display, divided screen display and left shift display, which has given the concrete analysis of software's algorithm. We can realize all kinds of display nimbly by using software based on each algorithm, and use it in the commercialtrade .Key wordsLED lattice screen;One-chip computer;Drive;Scan前言随着社会文化的不断发展,人们的消费标准不断提高,户外灯箱广告更是扮演着越来越重要的宣传角色,不论是汽车站,火车站,股票交易市场,还是学校都离不开它,然而传统的霓虹灯广告牌不论是在显示效果、耗电量还是可修改性上都无法满足当前社会的需求,传统的霓虹灯广告亟待改进。
单片机贪吃蛇的原理和应用

单片机贪吃蛇的原理和应用
1. 简介
贪吃蛇是一款非常经典的游戏,它在过去的几十年里一直深受玩家们的喜爱。
在单片机领域,我们也可以使用单片机来实现贪吃蛇游戏。
本文将介绍单片机贪吃蛇的原理以及其应用领域。
2. 原理
单片机贪吃蛇游戏的实现原理如下: 1. 使用单片机控制蛇头和食物的移动。
2. 使用矩阵键盘或者其他输入设备控制蛇的移动方向。
3. 利用LED点阵或者LCD显
示屏来展示游戏界面。
4. 使用定时器来控制游戏的帧率,使得蛇头和食物能够以
一定的速度移动。
5. 利用碰撞检测算法判断蛇头是否与食物相撞,以及是否与自
身或者墙壁相撞。
3. 应用领域
单片机贪吃蛇游戏可以应用于以下领域: - 教育培训:通过搭建单片机贪吃蛇
游戏平台,可以帮助学生学习单片机的原理和应用,提高他们的程序设计能力和逻辑思维能力。
- 娱乐产品:通过将单片机贪吃蛇游戏制作为嵌入式娱乐产品,可以
提供给用户一个简单而有趣的游戏体验。
- 科普展示:在科普展览或者科技馆中,
通过展示单片机贪吃蛇游戏平台,可以向大众普及单片机的工作原理和应用。
4. 总结
单片机贪吃蛇游戏是一种基于单片机的嵌入式应用,通过单片机控制蛇头和食
物的移动,利用定时器来控制游戏的帧率,同时使用碰撞检测算法判断游戏的结果。
该游戏在教育培训、娱乐产品和科普展示等领域都有着广阔的应用前景。
通过深入了解单片机贪吃蛇的原理和应用,我们可以更好地运用单片机技术,开发出更多有趣和实用的嵌入式应用。
STM32课程设计贪吃蛇

STM32大作业报告学生姓名:学号:所在院系:光电信息与计算机工程学院专业班级:授课教师:完成时间:2016年前言随着科学技术的不断进步,嵌入式近些年来逐渐兴起,其领域比较新,发展非常迅速,由于它属于新兴领域,接触的人并不是很多,但是嵌入式在各种电子设备上的应用越来越越广泛,并且各种电子设备也在朝着嵌入式微系统,智能化的方向前进。
STM32系列是基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。
作为21世纪的人才,为了与社会实际需要相衔接,提高我们的学习兴趣,利用STM32系列单片机进行了一次嵌入式系统设计。
摘要在本次作业中采用STM32系列中的STM32F103RCT6微控制器芯片,采用ALIENTEK战舰STM32开发板,使用MiniSTM32开发板上的LCD 接口,来点亮TFTLCD,实现触摸屏功能。
一、课程设计任务要求本次的课程设计目的是实现一个经典的贪吃蛇游戏,整个游戏实现功能分别为:1、初始化程序。
2、随机红点、左转、右转、判断边框。
二、系统硬件设计硬件设计原理图根据此硬件设计图再结合软件设计就能做出此游戏。
三、系统软件实现此次的课程设计在于开发个贪吃蛇游戏,其流程图如下图所示。
程序流程图为方便介绍,此软件实现只给出主要程序部分:1、本例程提供了硬件平台的初始化GPIO是常规输入/输出端口,STM32F103RCT6有PA、PB、PC、PD、PE 共5个16位的GPIO。
STM32的GPIO都可编程,具有很多复用功能。
GPIO 可以配置为很多总模式,这些模式有:输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。
通过对GPIO寄存器编程,可以设置每个端口的工作模式。
24C02 EEPROM是开发板板载的2Kbit(256 个字节)EEPROM ,型号为:24C02,用于掉电数据保存。
因为STM32 内部没有EEPROM,所开发板外扩了24C02,用于存储重要数据,用来做IIC 实验,该芯片直接挂在STM32 的IO 口上。
基于51单片机的贪食蛇游戏机开发-精品

第ChpNum章基于51单片机的贪食蛇游戏机开发1 本设计的特点和目的本设计以51系列单片机STC89C52为控制核心,以点阵液晶显示模块、键盘为人机接口,实现了一个贪食蛇游戏机。
通过本设计,令读者掌握利用单片机开发简单电子产品的基本技能,熟悉原理图绘制、仿真、软件设计、优化以及系统调试的基本方法,为进一步设计开发更为复杂的嵌入式模拟/数字混合系统打下一定的基础。
2产品简介“贪食蛇”又称为“贪吃蛇”,是一种益智小游戏。
其游戏规则比较简单,就是一条小蛇,不停地在屏幕上游走去吃屏幕上出现的蛋,越吃越长,只要蛇头碰到屏幕四周或者碰到自己的身子,小蛇就立即毙命并结束游戏。
本作品有上下左右四个按键来控制蛇头的移动方向,另有一个复位按键控制程序的重启,游戏界面采用分辨率为128×64的液晶显示屏。
3 硬件设计3.1 人机接口电路本游戏机游戏界面由液晶显示模块呈现。
液晶显示模块中,最主要的就是LCD液晶屏。
根据LCD液晶屏显示内容的不同,液晶显示模块可以分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块3种。
本设计使用点阵图形液晶模块OCM12864。
OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接连接,具有8位标准数据总线、6条控制线及电源线,各引脚的信号说明参见表ChpNum-1。
表ChpNum-1 OCM12864引脚说明管脚名称方向引脚说明VSS - 逻辑电源地。
VDD - 逻辑电源+5V。
V0 I LCD调整电压,应用时接10K电位器可调端RS I 数据\指令选择:高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令寄存器执行。
R/W I 读\写选择:高电平:读数据;低电平:写数据。
E I 读写使能,高电平有效,下降沿锁定数据。
DB0 I/O 数据输入输出引脚。
DB1 I/O 数据输入输出引脚。
DB2 I/O 数据输入输出引脚。
嵌入式课设实验报告——贪吃蛇

题目:贪吃蛇游戏设计专业:电子信息工程班级:姓名:、成绩:导师签字:年月日任务书题目:贪吃蛇游戏设计参数:供电电源电压3.3V矩形墙壁的位置坐标(20,20)(200,200)蛇的初始位置坐标(40,20)(30,20)(20,20)蛇的每一节为边长为10的矩形要求:利用嵌入式开发系统设计一个贪吃蛇的小游戏。
开始显示为初始界面,然后开始进行游戏。
游戏开始出现3节的蛇,一个食物,右边显示得分。
当进入游戏后,蛇自动向右前行。
通过按键上下左右来控制蛇前行的方向,当蛇吃到食物后,得分加100分,蛇身体变长一节。
当蛇在游行过程中撞到墙壁或者自身则游戏结束。
日程安排:6月30日:选择课设题目、查阅资料、完成第一步。
7月1、2日:完成方案设计。
即提出设计思路与软硬件的设计方案。
7月3、4日:学习硬件原理7月7、8、9日:根据软件设计方案做软件。
7月10日:测试7月11日:完成论文目录第一章课题研究······························· 1.1研究目的······································ 1.2研究背景······································ 1.3主要研究内容··································第二章设计思路及方案设计····················· 2.1设计思路······································ 2.1.1实现功能································· 2.1.2各功能的实现方法························· 2.1.3硬件说明································· 2.1.4软件说明································· 2.2硬件设计······································ 2.3软件设计······································第三章硬件设计······························· 3.1处理器最小系统································ 3.2硬件基本电路··································3.2.1按键····································· 3.2.2 LCD····································· 3.2.3 USB接口与电源···························第四章软件设计·······························第五章调试与测试·····························5.1调试··········································5.2测试··········································第六章结论···································参考文献······································第一章课题研究1.1研究目的为了巩固所学嵌入式系统的基础知识,加强实际应用和动手实践能力,开始为期2周的课程设计。
贪吃蛇游戏单片机程序

贪吃蛇游戏单片机程序贪吃蛇游戏是一款经典的游戏,其简洁的规则和有趣的玩法使其成为了许多人喜爱的游戏之一。
在单片机中实现贪吃蛇游戏需要利用单片机的输入输出功能以及控制算法来完成游戏的控制和显示。
下面是一个简单的贪吃蛇游戏单片机程序的实现。
首先,我们需要定义一些常量和变量来表示游戏中的一些参数和状态。
比如,我们可以定义一个常量来表示屏幕的宽度和高度,以及一个变量来表示蛇的长度和当前的移动方向。
c#define SCREEN_WIDTH 16#define SCREEN_HEIGHT 8#define SNAKE_MAX_LENGTH 64int snake_length;int snake_direction;接着,我们需要定义一个数据结构来表示蛇的身体,可以使用一个数组来表示蛇的每一节身体的位置。
同时,我们还需要定义一个数据结构来表示食物的位置。
cstruct point {int x;int y;};struct point snake[SNAKE_MAX_LENGTH];struct point food;然后,我们可以编写一个函数来初始化游戏的状态。
在这个函数中,我们需要初始化蛇的位置和长度,以及随机生成食物的位置。
void init_game{// 初始化蛇的位置和长度snake[0].x = SCREEN_WIDTH / 2;snake[0].y = SCREEN_HEIGHT / 2;snake_length = 1;// 随机生成食物的位置food.x = rand% SCREEN_WIDTH;food.y = rand% SCREEN_HEIGHT;}接下来,我们需要编写一个函数来处理用户输入,并更新蛇的移动方向。
这个函数可以通过读取按键的状态来实现,比如可以通过一个变量来记录当前的按键状态。
cvoid handle_input{// 读取按键状态int key = read_key// 根据按键状态更新蛇的移动方向if (key == 'W' && snake_direction != 'S') {snake_direction = 'W';} else if (key == 'S' && snake_direction != 'W') {snake_direction = 'S';} else if (key == 'A' && snake_direction != 'D') {snake_direction = 'A';} else if (key == 'D' && snake_direction != 'A') {snake_direction = 'D';}然后,我们可以编写一个函数来更新蛇的位置。
基于51单片机贪吃蛇游戏设计

基于51单片机贪吃蛇游戏设计贪吃蛇游戏是一种经典的游戏,也是很多人小时候玩过的游戏,其玩法简单,但却能够让人沉迷其中。
本文将介绍如何基于51单片机设计贪吃蛇游戏。
一、功能需求1. 界面设计贪吃蛇游戏的界面应简洁美观,可以利用点阵或LCD显示屏来呈现。
应包括游戏画面、分数、游戏难度等。
2. 操作方式游戏的操作主要包括上下左右移动贪吃蛇头部,进行输入、开始游戏、结束游戏等操作。
游戏可以使用按键、遥控器或者手柄等方式进行控制。
3. 游戏规则游戏正常进行时,贪吃蛇必须不断吃到食物,同时不能碰到墙壁或自己的身体。
每吃到一个食物,分数就会增加一点。
当贪吃蛇碰到墙壁或自己的身体时,游戏结束。
4. 难度等级游戏可以设置不同的难度等级,难度等级越高,贪吃蛇的速度就会越快,游戏难度也会相应提高。
二、设计思路本设计采用51单片机作为控制器,通过点阵或者LCD显示屏实现游戏界面的显示,通过按键、遥控器或手柄等方式进行游戏的操作。
具体设计思路如下:LCD显示屏:同样可以实现游戏画面的显示,但是可以显示更丰富的内容,如文字、动画等。
2. 游戏逻辑处理游戏逻辑处理主要包括游戏规则的实现和贪吃蛇的移动控制。
在实现游戏规则时,需要判断贪吃蛇是否碰到墙壁或自己的身体,同时需要计算分数;在实现贪吃蛇的移动控制时,需要通过按键、遥控器或者手柄等方式实现上下左右的移动。
可以通过按键或者遥控器等方式设置游戏难度等级,从而实现游戏难度的调整。
4. 硬件设计硬件设计包括主控芯片的选择、显示屏的选择、按键、遥控器或手柄等外设的选择。
主控芯片可以选择51单片机,同时可以选择点阵或LCD显示屏,按键、遥控器和手柄等外设可以根据需要进行选择。
三、实现步骤1. 硬件搭建搭建硬件时需要将主控芯片、显示屏、按键、遥控器或手柄等外设连接起来,并进行电路调试。
2. 程序设计程序设计包括游戏界面的设计、游戏逻辑的实现和难度等级的设置。
其中游戏界面的设计可以根据实际需要进行调整,游戏逻辑的实现需要考虑到游戏规则和贪吃蛇的移动控制,难度等级的设置可以通过按键或遥控器等方式实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机与8*8点阵的贪吃蛇游戏机开发目录一、硬件设计1、8*8LED点阵的原理说明本设计采用的点阵显示模块是ARK-SZ411288K,其原理结构图如图1所示。
ARK-SZ411288K显示模块是8*8点阵的显示模块,从图1中可以看出,8*8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的图18*8LED点阵的原理图二极管就亮。
ARK-SZ411288K可与CPU直接连接,根据引脚说明,将其各个引脚与相应的I/O 口连接。
2、LED阵列驱动电路正向点亮一颗LED,至少也得10~20毫安,若电流不够大,则LED不够亮。
而不管是8051的输入/输出口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2毫安而已,因此,很难直接高态驱动LED。
这时候就需要额外的驱动电路,本设计采用的是74HC595,用74HC595芯片驱动LED有以下特点:速度较快,功耗较小,LED的数目多少随意,既可以控制共阴极的LED显示器,也可以控制共阳极的LED显示器,可以软件控制LED的亮度,还可以在必要的时候关断显示 (数据保留),以减小功耗,并可随时唤醒显示。
用它设计的电路,不仅软硬件设计简单,而且功耗低,驱动能力强,占用的I/O口线较少,是一种造价低廉,应用灵活的设计方案。
图274HC595管脚图74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。
寄存器和锁存器分别有各自的时钟输入(SCLK和SLCK),都是上升沿有效。
当SCLK从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当SLCK从低到高电平跳变时,寄存器的数据置入锁存器。
清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。
当输出允许控制(EN)为高电平时, 并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。
74HC595最多需要5根控制线,即SDA、SCLK、SLCK、CLR和EN。
其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。
把其余三根线和单片机的I/O口相接,即可实现对LED的控制。
数据SDA口送入74HC595,在每个SCLK的上升沿,SDA口上的数据移入寄存器,在SCLK 的第9个上升沿,数据开始从QS移出。
如果把第一个74HC595的QS和第二个74HC595的SDA 相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。
数据全部送完后,给SLCK一个上升沿,寄存器中的数据即置入锁存器。
此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。
要想软件改变LED的亮度,只需改变EN的占空比就行了[1]。
二、软件设计1、主程序工作流程主程序工作流程如图3所示,系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否有中断发生。
中断源有两个,一个是驱动贪吃蛇自动前行的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的到来都将改变贪吃蛇的当前状态。
若当前没有中断发生,主程序继续判断蛇头是否碰壁或头尾相撞,若是,结束游戏,否则继续执行程序主体循环。
图3主程序工作流程2、LED点阵初始化对点阵初始化,先把点阵所有的信息清空,让其不显示任何信息,再在指定的位置显示蛇所处的最初位置和第一个果实的位置。
初始化程序如下:void Init(){for (i = 3; i < SNAKE + 1; i++) //SNAKE是蛇的最大长度x[i] = 100;for (i = 3; i < SNAKE + 1; i++)y[i] = 100; //初始化x[0] = 4; y[0] = 4; //果子n = 3; //蛇长n=-1x[1] = 1; y[1] = 0; //蛇头x[2] = 0; y[2] = 0; //蛇尾1addx = 0; addy = 0; //位移偏移}3、贪吃蛇的移动当蛇没有吃到任何食物时,每次步进蛇头的将要到的下一个LED灯点亮,而蛇尾那个LED 灯会灭掉,程序设计时只要将蛇尾那点位置的值传给蛇头下一个位置的值,再改变蛇尾的值即可。
而蛇头下一个位置根据蛇头和偏移量来确定,每次上下左右按键决定了蛇步进的偏移量,只要将蛇头的位置加上偏移量的值即得到新的蛇头位置。
当蛇头碰到四周的墙壁或者碰到自己的身体,小蛇就立即毙命并结束游戏。
4、食物的随机出现食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置相同,也不能超出墙外,否则就要重置食物。
这里使用程序中的定时计数器的低八位TL0的数值,由于TL0不断变化,不同的时间点数值不同,我这里使用的是C++语言里的stdlib.h文件库,使用里面的随机函数srand(),先利用srand(TL0)获得TL0的数值,再利用两次rand()%8分别得到食物出现的横纵坐标的位置。
三、调试及仿真程序软件编译器使用uVision3。
在用uVision3编写单片机程序时,因uVision3往往只能修改语法上的错误,对于算法上的问题不好检查,而直接下到单片机里又受电路板的限制而不方便调试,因此这里使用Proteus进行电路仿真。
该软件具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能,同时有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
先在Proteus上绘制硬件电路(并未画出驱动电路),电路设计完成后就可以进行仿真。
先双击单片机,把用uVision3编译生成的HEX文件指定为下载文件,点击PLAY键即可进行仿真。
当出现ANAL YSER ERRORS时,表示电路有错误,列表中说明了具体的错误,必须要先排错才可以进行仿真。
本设计仿真效果如图4所示。
图4系统测试效果图软件调试及Proteus仿真完成后就进行硬件的安装。
本设计按照原先设计好的电路图进行总体上的布置,采用人工搭电路的方法进行硬件的安装。
安装时要考虑受热、稳固等多方面的影响使用电烙铁时要控制好焊接的时间,电烙铁停留的时间太短,焊锡不易完全熔化,形成“虚焊”,而焊接时间太长又容易损坏元器件,每一两秒内要焊好一个焊点,若没完成,宁愿等一会儿再焊一次。
其次芯片的摆置要方便连线,焊接时要先把芯片拔出,等线接好了再插上去。
在焊接时要考虑电路的抗干扰能力同时要充分考虑电源对单片机的影响。
每焊接完一个模块,要用万能表根据电路图检查有没有接错、短路等现象,确认正确后再继续下一个模块[2]。
附录:代码#include <reg51.h>#define uchar unsigned char#define SNAKE 20 //最大长度#define TIME 50 //显示延时时间#define SPEED 71 //速度控制sbit keyenable=P3^6; //方向使能sbit keyy=P0^2; //上下*/sbit up=P3^3; //downsbit down=P3^1;sbit right=P3^2;sbit left=P3^4;uchar x[SNAKE+1];uchar y[SNAKE+1];uchar time,n,i,e; //延时时间,当前蛇长,通用循环变量,当前速度char addx,addy; //位移偏移量/********************延时程序*********************/void delay(char MS){char us,usn;while(MS!=0){usn = 0;while(usn!=0){us=0xff;while (us!=0){us--;};usn--;}MS--;}}/*******************************************判断碰撞*******************************************/bit knock(){bit k;k=0;if(x[1]>7||y[1]>7)k=1; //撞墙for(i=2;i<n;i++)if((x[1]==x[i])&(y[1]==y[i]))k=1; //撞自己return k;}/*****************上下左右键位处理*****************/void turnkey()// interrupt 0 using 2{if(keyenable){if(left){addy=0;if(addx!=1)addx=-1; else addx=1;}if(right){addy=0;if(addx!=-1)addx=1; else addx=-1;}if(up){addx=0;if(addy!=-1)addy=1; else addy=-1;}if(down){addx=0;if(addy!=1)addy=-1; else addy=1;}}}/*****************乘方程序*****************/uchar mux(uchar temp){if(temp==7)return 128;if(temp==6)return 64;if(temp==5)return 32;if(temp==4)return 16;if(temp==3)return 8;if(temp==2)return 4;if(temp==1)return 2;if(temp==0)return 1;return 0;}/*****************显示时钟显示程序*****************/void timer0(uchar k){while(k--){for(i=0;i<SNAKE+1;i++){P2=mux(x[i]);P1=255-mux(y[i]);turnkey(); //上下左右键位处理delay(TIME); //显示延迟P2=0x00;P1=0xff;}}}/*****************主程序*****************/void main(void){e=SPEED;P0=0x00;P1=0xff;P2=0x00;P3=0x00;while(1){//if(keyenable==1){P1=0x00;P2=0xff;}else{P1=0xff;P2=0x00;}for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;//初始化x[0]=4;y[0]=4; //果子n=3; //蛇长 n=-1 x[1]=1;y[1]=0; //蛇头x[2]=0;y[2]=0; //蛇尾1addx=0;addy=0; //位移偏移 //k=1;while(1){if(keyenable)break;timer0(1);}while(1){timer0(e);if(knock()){e=SPEED;break;} //判断碰撞if((x[0]==x[1]+addx)&(y[0]==y[1]+addy)) //是否吃东西{n++;if(n==SNAKE+1){n=3;e=e-10;for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;}x[0]=x[n-2];y[0]=y[n-2];}for(i=n-1;i>1;i--){x[i]=x[i-1];y[i]=y[i-1];}//x[n-1]=x[2];y[n-1]=y[2];x[1]=x[2]+addx;y[1]=y[2]+addy; //移动 }}}。