基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy

**

基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy

**

一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考!

代码如下:
先放段主函数压压惊

void main()
{
   	
	x_s[0] = 2;			   //初始化三个点
	y_s[0] = 3;
	x_s[1] = 3;
	y_s[1] = 3;
	x_s[2] = 4;
	y_s[2] = 3;
	Timer0Init();
	suijishu();
	while(1)
	{
   
	   appear();
		   if(flag_a)		//蛇身移动位
		   {
   
				   if(!flag_s)	  //蛇身死亡位
				    {
   
						auto_move();
						HC_595(0x00);     //消隐
						P0 = 0xFF;		 //消隐	
						shensi();
						chiguo();
						delay(1000);
						flag_a = 0;
					}
			}				
	
	}
}

/*
本程序核心程序:
appear函数,显示蛇身
auto_move函数,控制蛇身惯性移动 ,同时里面附了判断是否穿墙的一段代码
direction函数,控制蛇的移动方向
suijishu(随机数)函数,随机生成果子
chiguo(吃果)函数,判断是否吃到果子
shensi(身死)函数,碰到自己身体则死亡

*/

#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define M 12		//难度系数,12中等,越小越难	
typedef unsigned char uchar;
typedef unsigned int uint;

sbit SRCLK = P3^6;		  //595芯片
sbit RCLK = P3^5;
sbit SER = P3^4;

sbit LSA=P2^2;			 //138译码器
sbit LSB=P2^3;
sbit LSC=P2^4;

uchar code smgduan[17]={
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
							0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

					//定义方向键
sbit K1 = P3^1;		//上 
sbit K2 = P3^0;		//下 
sbit K3 = P3^2;		//左
sbit K4 = P3^3;		//右 

uchar m;			//储存果子的X坐标
uchar n;			//储存果子的Y坐标

uchar snakelong = 3;	   //初始化蛇长
char flag_x = 1;		   //初始化运动方向
char flag_y = 0;		   //初始化运动方向
uchar flag_gg = 0;		   //生成果子的重复性标志
uchar flag_c = 0, sheshen = 0;	  //吃果标志
uchar flag_a = 0;		//移动标志
uchar flag_s = 0;		//死亡标志
uchar x_s[32] = {
   0},y_s[32] = {
   0};	   //定义蛇的最大长度
uchar code X_[8] = {
   0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};	 
uchar code Y_[8] = {
   0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};	   

/*  
	y1				//定义x,y坐标
	y2			  //如,我想让(4,2)亮,只需要P0 = X_[4];HC_595 = Y_[2];
	y3
	y3
	y5
	y6
	y7
	y8
	  x1    x2   x3   x4  x5   x6   7   x8
*/

一个小的延时函数:


void suijishu();				   //提前定义随机数生成函数
void delay(uint i)				   
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值