一年前做的小玩意了,硬件丢失了,程序还在,以前都是写在一个文件内,翻出来分成几个文件,程序注释写的很详细,希望对初入单片机的师兄有所帮助
单片机源程序如下:
//=================================================================================================================================================================
//软件功能:贪吃蛇
//硬件描述:最小系统+4x(8x8点阵)+ (1x(HC154)+3x(74HC14D)) + 1x(HC595)
//程序描述:74595.c中有串进并出程序
// delay.c中有延迟函数
// dispaly.c中有点阵显示函数
// anjian.c中有按键函数
// related.c中有初始化参数函数、游戏结束图案函数、点阵显示清除函数、糖果随机函数、蛇显示变化函数
//功能概括描述:16x16点阵用于显示、5个按键有旋转按键、上、下、左、右按键
// 上、下、左、右按键用于控制蛇上下左右移动
// 有转折点判断(理论上蛇可以打15折)、蛇碰壁判断、蛇速度改变判断
//=================================================================================================================================================================
#include "reg52.h" //51头文件
#include "intrins.h" //部分运算符所需头文件
#include "74595.h" //74595程序
#include "delay.h"
#include "display.h"
#include "anjian.h"
#include "related.h"
#define uchar unsigned char
#define uint unsigned int
//=================================================================================================================================================================
//sbit Beep=P2^7; //蜂鸣器
uint HUANCUN[16],STX,SWX,GCUNY; //缓存显示数组,蛇头横坐标,蛇尾横坐标,转折点存储数组,果子位置存储
uchar SSS,t,STY,SWY,GUO,CBN,GCUNX,Q,cus; //蛇方向变量,定时器计时变量,蛇头纵坐标,蛇尾纵坐标,转折点反向存储数组,糖果,计时变量,随机数,蛇方向前一个状态变量
uchar idata ZZS[16];
uint idata ZZD[16];
//=================================================================================================================================================================
void Init() //初始化
{
TMOD=0x01; //工作方式1
EA=1; //CPU中断开启
ET0=1; //定时器T0中断开启
TH0=(65536-5000)/256; //定时5ms
TL0=(65536-5000)%256;
TR0=0; //定时器关闭状态
KS=1; //开始键置高电平
// Beep=0;
}
//=================================================================================================================================================================
void main()
{
Init();
while(1)
{
Q=rand()%256; //随机代码放在while(1)函数中不停运转
if(TR0==0){ //如果定时器在关闭状态
J_S(); //清除缓存
K_S(); //各种数据初始化
}else{
if(GUO!=1){ //如果没有糖果
SUI_JI(); //调用随机子程序
t--; //蛇的速度加快
CBN=t; //CBN用于保存改变后的t
}
}
XIANSI(); //循环显示函数
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』