欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
自己寫的單片機貪吃蛇初代版,遇到了其提示需要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.raoushi.com/bbs/)
Powered by Discuz! X3.1