/*************************************************
全局头文件 config.h
**************************************************/
#ifndef _CONFIG_H
#define _CONFIG_H
//--包含你要使用的头文件--//
#include
#include
#include
//--定义重要关键词--//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
/--液晶屏IO口定义--//
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
//--定义数码管要使用的IO口--//
#define GPIO_DIG P1
//--定义点阵屏要使用的 IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
//--定义按键要使用的 IO--//
sbit g2=P3^0; //k2
sbit g1=P3^1; //k6
//--定义蜂鸣器要使用的 IO--//
sbit Beep = P3^7 ;
extern int score; //得分
#endif
/********************************
LED头文件 led.h
********************************/
#ifndef _LED_H
#define _LED_H
extern uchar code x[]; //led列选
extern uchar code y[]; //led行选
extern uchar code tab13[]; //显示囧
//显示倒计时//
extern uchar code tab12[];
extern uchar code tab11[];
extern uchar code tab10[];
extern uchar code tab9[];
extern uchar code tab8[];
extern uchar code tab0[]; //取模后选
void st_led(void); //led初始化
void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0); //led发送数据
#endif
/********************************
snake头文件 snake.h
********************************/
#ifndef _SNAKE_H
#define _SNAKE_H
#define MAX_LENGTH 33 //最长蛇长
void createFood(); //创造食物
void snakegame(); //游戏主体(此时游戏开始)
void expandSnake(); //延长蛇身
void moveSnake(); // 移动蛇
void gameOver(); //游戏结束
uchar touchSelf(); //撞到自己
uchar touchWall(); //撞到墙
int oppositeDirection(int t); //方向选取
int foodEat(); // 吃食
void init(); //蛇的初始化
void draw(); //显示蛇长
#endif
/********************************
LCD头文件 lcd.h
********************************/
#ifndef __LCD_H_
#define __LCD_H_
#define LCD1602_4PINS
//—定义重要关键词—//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
//—函数声明—//
void Lcd1602_Delay1ms(uint c); //在51单片机12MHZ时钟下的延时函数
void LcdWriteCom(uchar com); //LCD1602写入8位命令子函数
void LcdWriteData(uchar dat); //LCD1602写入8位数据子函数
void LcdInit();//LCD1602写入8位数据子函数
void lcd_show(void);//液晶屏显示注意事项
void Delay10ms(unsigned int c); //延时
#endif
/********************************
数码管头文件 tube.h
********************************/
#ifndef __TUBE_H_
#define __TUBE_H_
//—定义全局变量—//
//RAM,ROM
unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
#endif
/********************************
主函数 main.c
********************************/
//—包含你要使用的头文件—//
#include "config.h"
#include "snake.h"
#include "led.h"
void main()
{
TMOD=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(65535-10000)/255; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL1=(65535-10000)%255;
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
EA=1; //总中断打开
init(); //蛇初始化
lcd_show(); //液晶屏显示(K2 上,K6 下,K2+K6右)
st_led(); //点阵屏显示游戏
while(1)
{
snakegame(); //游戏主体(游戏开始 )
}
gameOver(); 游戏结束
}
/********************************
Snake部分函数 snake.c
********************************/
#define _SNAKE_C
#include "config.h"
#include "snake.h"
#include "led.h"
#include "tube.h"
int lastx,lasty;
int score=0; //分数初