历史上的今天
今天是:2025年01月22日(星期三)
2020年01月22日 | 16x16点阵贪吃蛇 单片机源程序 带注释
2020-01-22 来源:51hei
一年前做的小玩意了,硬件丢失了,程序还在,以前都是写在一个文件内,翻出来分成几个文件,程序注释写的很详细,希望对初入单片机的师兄有所帮助
单片机源程序如下:
//=================================================================================================================================================================
//软件功能:贪吃蛇
//硬件描述:最小系统+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(); //循环显示函数
}
}
//=================================================================================================================================================================
void time0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
AN_J(); //调用按键子程序
if((--CBN==0)||(cus!=SSS)){
CBN=t; //CBN随t的变化而变化
史海拾趣
|
这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸! 工作三年、几成废人! 我2000年毕业 ...… 查看全部问答> |
|
Windows Embedded CE 6.0 FATFS 无法加载,CF卡内容无法显示 我用CF卡做启动盘,在一些少数小品牌的CF卡上启动后能在根目录下看到\\Hard Disk。 但在Sandisk、Kingston这样的大品牌的CF卡,却只能启动而不能在根目录下看到Hard Disk。 我在调试模式下,使用不同的CF卡,用Eboot方式下载镜像启动,从VS2005的 ...… 查看全部问答> |
|
我们使用PXA270平台,wince 5.0操作系统。客户提供了一片单色LCD,4bit输入,每1个bit代表1个点,每个点都有ON/OFF两种状态。分辨率640*480。LCD中内置了一颗Max5484来控制灰度。客户要求我们做到4bpp,16级灰度。 但是Max5484这个芯片只能调整整 ...… 查看全部问答> |




