毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

51单片机贪吃蛇游戏设计+C代码实现+流程图+电路图 第5页

更新时间:2010-9-15:  来源:毕业论文
51单片机贪吃蛇游戏设计+C代码实现+流程图+电路图 第5页
图5-3贪吃蛇初始化子程序流程图
定时器的作用在于产生随机数,用于随机摆放食物,定时器的工作模式为模式一,即16位计数器,当计数溢出时,定时器中断程序重装计数初值,清除中断标志位。TFT显示屏幕的显示范围是132x132个像素点,定义贪吃蛇的活动范围为从左第7个像素到84个像素,从上第7个像素到120个像素。在屏幕的坐标为(96,24)开始显示游戏得分值,坐标为(96,97)显示游戏的级数。初始化贪吃蛇参数是直接给贪吃蛇的结构体赋初值。 图5-4贪吃蛇运行子程序本文来自辣.文,论-文-网
  贪吃蛇运行子程序是整个程序设计的核心,首先由系统检测是否有按键按下,确定有按键按下后,外部中断程序自动执行,开始扫描矩阵键盘,得到键值,根据键值判断贪吃蛇要走的方向。在游戏运行的期间,系统不断检测蛇是否死亡,蛇是否已经最长,蛇是否吃到了食物。若蛇已经死亡,则蛇的死亡标记位被置位,跳转到死亡界面,检测是否有按键按下,有就跳转到游戏开始界面,重新开始游戏,无则等到有任意键按下。若检测到蛇身的长度已经达到最长,则游戏的级数自动升高一级,游戏的级数越高,贪吃蛇移动的速度越快。游戏的速度控制由延时程序决定,若延时程序延时短,则蛇移动得快,若延时比较长,则蛇移动得慢。若蛇已经吃到食物,则在放食物的原来的坐标会消除显示,重新读取计数器的值,通过计算得到要放置食物的坐标,在该坐标上显示食物。
图5-5键盘扫描子程序
  由于该子程序出现在中断服务程序当中,不需要在主程序里重复运行,所以为CPU省下了许多资源,只占用了INIT0口,在主程序当中只需要执行对中断的设置和把P1置0x0f输出就可以了。在扫描程序当中,首先P1输出0x0f,若有按键按下,则在P1口的低四位会有低电平出现,在P1口的低四位分别连接着四个二极管的阴极,二极管的阳极连接着中断口P3.2和VCC,没有按键按下的时候,P3.2呈现高电平,有按键按下的时候,四个二极管当中至少有一个导通,P3.2的高电平被拉低,只要把P3.2设置成下降沿中断响应模式,那样就可以进入中断服务程序。进入中断程序后,系统再次检测P1口的电平是否等于0x0f,若P1口的电平依然不等于0x0f,则把读到P1口的值的低四位保存起来,再输出0xf0,读取P1口的值,把高四位保存起来。根据高四位(列值)跟低四位(行值)的值计算出键值。
Main.c
#include <reg51.H> 
#include <KEY_SWEEP.H>
#include "LCD_SSD1283.H"
#include "SNAKE.h"

void main(void)
{

 LCD_ssd1283a_Init();
 Init_SNAKE();
 Interrupt0_Key();

 while(1)
 {
  Run_SNAKE();
 }
}

Snake.c

#include <reg51.H> 
#include <KEY_SWEEP.H>
#include "LCD_SSD1283.H"
#include "SNAKE.h"


//=================================================================
//    使用结构体定义变量   使程序的名称更加的清楚
//=================================================================
struct
{
 uchar X;
 uchar Y;   
 uchar Yes;
}Food; //食物结构体

#define SNAKE_Max_Long 20                 //最大长度
struct
{本文来自辣.文,论-文-网
 uchar X[SNAKE_Max_Long];
 uchar Y[SNAKE_Max_Long];
 uchar Long; 
 uchar Life;
 uchar Score;     //蛇的分数
 uchar Level;     //蛇的等级             
}Snake; //蛇结构体

uchar Key_V_temp=0;         //取出上次按键值

//函数功能:1ms延时函数
//晶    振:11.0592 M
void Delay_1mS(unsigned int n)
{
 unsigned int  i;
 unsigned char j;
 
 for(i=0;i<n;i++)
 for(j=0;j<120;j++)  
         ;
}

//函数名称:void Init_time0 (void)
//函数功能:初始化定时器1  用于产生随机数种子 ,用于放置实物
void Init_time0 (void)
{
 EA=1;
 ET1=1;
 TMOD|=0X10;
 TH1=0X00;
 TL1=0X00;
 TR1=1;
}
void time1 (void) interrupt  3
{
 TH1=0X00;
 TL1=0X00;
}
//函数名称:Trun_On_Point     Trun_Off_Point (uchar x,uchar y)
//函数功能:点亮或者熄灭 一个点。用于显示蛇身体
//入口参数:无
//出口参数:无
//特别说明:此 Trun_On,函数换成其他的就可以兼容其他的液晶
//          入8*8 点阵   12864 等
void Trun_On_Point (uchar x,uchar y,uchar color)
{毕业论文http://www.751com.cn
 Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),color);
}

void Trun_Off_Point (uchar x,uchar y)
{
 Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),0xBE5F); 
}

//函数名称:void Init_SNAKE(void) 
//函数功能:绘制游戏界面,初始化游戏等级等参数
void Init_SNAKE(void)  
{本文来自辣.文,论-文-网
 uchar i;

 Init_time0();
 //***********绘制游戏界面********************//
 CLR_Led_ssd1283a(0xBE5F);
 Rectangle(8-1,8-1,84,120,0xaa);//绘制一个矩形框, 0-127
  LCD_Display(88,8,"Score",0xcc88,0xBE5F);
 LCDShow_uCharNumber(96,24,Snake.Score,0xcc88,0xBE5F);
  LCD_Display(88,81,"LEVEL",0xcc88,0xBE5F);
 LCDShow_uCharNumber(96,97,Snake.Level,0xcc88,0xBE5F);

上一页  [1] [2] [3] [4] [5] 

51单片机贪吃蛇游戏设计+C代码实现+流程图+电路图 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。