标题:
自己写的单片机贪吃蛇初代版,遇到了其提示需要ANSI格式的函数原型的问题
[打印本页]
作者:
百战不殆
时间:
2020-9-20 15:51
标题:
自己写的单片机贪吃蛇初代版,遇到了其提示需要ANSI格式的函数原型的问题
#include<reg52.h>
#include<intrins.h> //循环右移头文件
#include<stdio.h>
sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选
sbit DIO = P3^4;//串行数据输入口
sbit S_CLK = P3^5;//移位寄存器时钟
sbit R_CLK = P3^6;//输入锁存器时钟
unsigned char KeyValue = 20;//矩阵按键
unsigned char Transit;//按键值的中转数
unsigned char i,
j,
k,
w, //蛇身长度
s,
St, //开始间隔时间
Mi, //移动间隔时间
ROW,//行值
COL,//列值
x, //移动方向
w; //蛇身长度
//蛇身数组,a[][0]为行值,a[][1]为列值
unsigned char Snake_body[2][36] =
{
{0x08,0x08},
{0xdf,0xbf}
};
//显示数组
unsigned char b[8] = {0xff,0xff,0xff,0xff,0xcf,0xff,0xff,0xff};
//蛇头缓存数组,c[0]放置行值,c[1]放置列值
unsigned char c[2] = {0x80,0xdf};
//开始显示字符
unsigned char code Start[5][8]=
{
0xE7,0xC7,0x87,0xE7,0xE7,0xE7,0x81,0x81,//1
0xC3,0x81,0x99,0xF1,0xE3,0xC7,0x81,0x81,//2
0xC3,0x81,0x99,0xE3,0xE3,0x99,0x81,0xC3,//3
0xFF,0xFF,0xE7,0xC3,0x00,0xC3,0xE7,0xFF,
0xFF,0xFF,0xDF,0xB8,0x38,0xB8,0xDF,0xFF
};
//结束显示字符
unsigned char code End[2][8]=
{
0xFF,0xFF,0xDF,0xB8,0x38,0xB8,0xDF,0xFF,//第一步
0xFF,0xFF,0xE7,0xC3,0x00,0xC3,0xE7,0xFF//第二步
};
void delay(unsigned int z) //毫秒级延时函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
//显示部分01
void send(dat)//发送值
{
S_CLK = 0;//拉低移位寄存器时钟
R_CLK = 0;//拉低输入锁存器时钟
for(i=0; i>8; i++)//8位循环
{
if(dat&0x01)
DIO = 1;//发送1
else
DIO = 0;//发送0
R_CLK = 1;//拉高输入锁存器时钟
dat >>= 1;//右移1位
R_CLK = 0;//拉低输入锁存器时钟
}
}
//矩阵键盘
void KeyScan()
{
//4*4矩阵键盘扫描
P3 = 0XF0;//列扫描
if(P3 != 0XF0)//判断按键是否被按下
{
delay(10);//软件消抖10ms
if(P3 != 0XF0)//判断按键是否被按下
{
switch(P3) //判断那一列被按下
{
case 0xe0: KeyValue = 0; break;//第一列被按下
case 0xd0: KeyValue = 1; break;//第二列被按下
case 0xb0: KeyValue = 2; break;//第三列被按下
case 0x70: KeyValue = 3; break;//第四列被按下
}
P3 = 0X0F;//行扫描
switch(P3) //判断那一行被按下
{
case 0x0e: KeyValue = KeyValue; break;//第一行被按下
case 0x0d: KeyValue = KeyValue + 4; break;//第二行被按下
case 0x0b: KeyValue = KeyValue + 8; break;//第三行被按下
case 0x07: KeyValue = KeyValue + 12; break;//第四行被按下
}
while(P3 != 0X0F);//松手检测
}
if(KeyValue == 1 )
{
Transit = KeyValue;
}
if(KeyValue == 4 )
{
Transit = KeyValue;
}
if(KeyValue == 5 )
{
Transit = KeyValue;
}
if(KeyValue == 6 )
{
Transit = KeyValue;
}
KeyValue = 0;
}
}
void main()
{
for(St=0; St<500; St++)//开始显示开始画面
{
for(k=0; k<2; k++)
{
for(i=0; i<8; i++)
{
send(Start[k][i]);
send(ROW);
S_CLK = 1;
S_CLK = 0;
ROW = _cror_(ROW,1);
}
}
delay(1);
}
while(1)//总体循环
{
//运动算法开始
//存放上一次头部坐标
for(i=0; i<2; i++)
{
c[i] = Snake_body[0][i];
}
//蛇身长度检测
for(i=0; i<64; i++)
{
if(Snake_body[0][i] != 0x00)
{
w++;
}
}
//蛇身数据右移
//消去蛇身尾端的点
w--;
for(s=0; s<2; s++)
{
for(i=0; i<w; i++)
{
Snake_body[s][i+1] = Snake_body[s][i];
}
}
//转向
if(Transit == 6)//向右
{
c[1] >>= 1;
c[1] = c[1] + 0x80;
}
if(Transit == 4)//向左
{
c[1] <<= 1;
c[1] = c[1] + 0x01;
}
if(Transit == 5)//向下
{
c[0] <<= 1;
c[0] = c[0] + 0x01;
}
if(Transit == 1)//向上
{
c[0] >>= 1;
c[0] = c[0] + 0x80;
}
//新头部坐标存入蛇身数组
for(i=0; i<2; i++)
{
Snake_body[0][i] = c[i];
}
//运动算法结束
//蛇身长度检测
for(i=0; i<64; i++)
{
if(Snake_body[1][i] != 0x00)
{
w++;
}
}
//显示部分02
for(j=0; j<w; j++) //循环8次发送行和列值
{
Send_Byte(Snake_body[1][k]);//发送列选值
Send_Byte(Snake_body[0][k]); //发送行选值
R_CLK = 1; //拉高输出锁存器,把移位寄存器中数据输出
R_CLK = 0; //拉低输出锁存器
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1