贪吃蛇的单片机源程序如下:
/***********************************************************
功能说明:贪吃蛇
编译环境:keil4
时钟频率: 22.1184MHz
注意:该例程中“过关”不能在keil4编译环境中正常显示
************************************************************/
/*****************************************************************
/^/^
_|__| O|
/ /~ _/
____|__________/
_______
`
| |
/ /
/ / \
/ /
/ /
/ / _----_
/ / _-~ ~-_ | |
( ( _-~ _--_ ~-_ _/ |
~-____-~ _-~ ~-_ ~-_-~ /
~-_ _-~ ~-_ _-~
~--______-~ ~-___-~
*****************************************************************/
#include "stc.h"
#include "Lcd12864.h"
#include "Key.h"
#define uchar unsigned char
#define uint unsigned int
static unsigned long Seed = 1;
#define A 48271L
#define M 2147483647L
#define Q (M / A)
#define R (M % A)
/************************************
伪随机数发生器
*************************************/
double Random(void)
{
long TmpSeed;
TmpSeed=A*(Seed%Q)-R*(Seed/Q);
if(TmpSeed>=0)
Seed=TmpSeed;
else
Seed=TmpSeed+M;
return (double)Seed/M;
}
/**************************************
为伪随机数发生器播种
***************************************/
void InitRandom(unsigned long InitVal)
{
Seed=InitVal;
}
//延时子程序
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i } /********************************* 初始化MPU **********************************/ void InitCpu(void) { TMOD=0x01; TH0=0; TL0=0; TR0=1; ET0=1; EA=1; } #define N 25 struct Food { unsigned char x; unsigned char y; unsigned char yes; }food;//食物结构体 struct Snake { unsigned char x[N]; unsigned char y[N]; unsigned char node; unsigned char direction; unsigned char life; }snake;//蛇结构体 unsigned char Flag=0; unsigned char Score=0; unsigned char Speed=5; //speed越大,速度越慢 unsigned char KeyBuffer=0; #define FUNC 1 //(P3^1)表示级别 #define UP 2 //(P3^3)表示左 #define DOWN 3 //(P3^5)表示右 #define LEFT 4 //(P3^4)表示下 #define RIGHT 5 //(P3^2)表示上 #define PASSSCORE 20 //预定义过关成绩 void Timer0Int(void) interrupt 1 { switch(OSReadKey()) { case 5: KeyBuffer=FUNC; //表示级别 /*if(++Speed>=10) Speed=1; Flag|=1<<1;//速度变化标志置1*/ break; case 21: KeyBuffer=DOWN; //表示右 /*if(snake.direction!=2) snake.direction=1;*/ break; case 13: KeyBuffer=UP; //表示左 /*if(snake.direction!=1) snake.direction=2;*/ break; case 9: KeyBuffer=RIGHT; //表示上 /*if(snake.direction!=4) snake.direction=3;*/ break; case 17: KeyBuffer=LEFT; //表示下 /*if(snake.direction!=3) snake.direction=4;*/ break;
上一篇:51单片机+ULN2003驱动5V减速步进电机程序
下一篇:基于单片机的DHT11温度湿度采集系统
推荐阅读最新更新时间:2024-11-10 20:47
设计资源 培训 开发板 精华推荐
- 使用 Infineon Technologies AG 的 IRU3021M 的参考设计
- 使用 NXP Semiconductors 的 MPC8641 的参考设计
- 适用于 DIN 导轨托架安装的 110/220VAC 光隔离过零检测器模块,具有 3.3V 或 5V 输出 - 非常适合 Arduino、ESP32/ESP8266
- 智能雪花环境灯
- AC182015-1,带 2.4GHz MRF24J40 射频收发器的 ZENA 无线适配器
- REF193 精密微功耗、低压差电压基准的典型应用
- 使用DS1802按钮数字电位器创建带有衰减器的音频前置放大器
- 使用 Analog Devices 的 LT1634ACS8-5 的参考设计
- 使用 Analog Devices 的 LTC1438IG 的参考设计
- DER-395 - 适用于PAR30灯的14.35 W可控硅调光的非隔离LED驱动器