久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于51單片機的貪吃蛇程序
[打印本頁]
作者:
fuhonghu
時間:
2019-8-15 08:51
標題:
基于51單片機的貪吃蛇程序
本人作為單片機新手,利用led點陣設計了一份貪吃蛇的程序,話不多說,直接上程序。
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SER=P3^4;
sbit RCLK=P3^5;
sbit SRCLK=P3^6;
sbit up=P3^1;
sbit down=P3^0;
sbit lt=P3^2;
sbit rt=P3^3;
u8 code Hc595_Coordx[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 code Hc595_Coordy[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
u8 foodx;
u8 foody;
u8 snake_x[20]={0};
u8 snake_y[20]={0};
u8 length;
u8 direction;
void initSnake();
void delay(u16 i);
void Hc595SendByte(u8 dat);
void move();
void Keypros();
void creatFood();
void snake_Grow(void);
void drawsnake();
void initSnake()
{
snake_x[0]=0;
snake_y[0]=0;
length=1;
direction=2;
}
void delay(u16 i)
{
while(i--);
}
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void move()
{
u8 len = length- 1;
for(len; len > 0; len--)
{
snake_x[len] = snake_x[len - 1];
snake_y[len] = snake_y[len - 1]; //一直到蛇頭
}
switch(direction)
{
case 1:
snake_y[0]--;
break;
case 2:
snake_y[0]++; //再利用蛇頭轉變方向
break;
case 3:
snake_x[0]--;
break;
case 4:
snake_x[0]++;
break;
default:
break;
}
}
//貪吃蛇的上下左右行動控制
void Keypros()
{
if(up==0)
{
delay(1000); //消抖處理
if(up==0)
{
if(direction==3|direction==4)
direction=1; //在地址1內寫入數據num
}
while(!up);
}
if(down==0)
{
delay(1000); //消抖處理
if(down==0)
{ if(direction==3|direction==4)
direction=2;
}
while(!down);
}
if(lt==0)
{
delay(100); //消抖處理
if(lt==0)
{
if(direction==1|direction==2)
direction=3;
}
while(!lt);
}
if(rt==0)
{
delay(1000); //消抖處理
if(rt==0)
{
if(direction==1|direction==2)
direction=4;
}
while(!rt);
}
}
void creatFood() //隨機創造食物
{
u8 i;
foodx=rand()%8;
foody=rand()%8;
for(i=0; i<length; i++)
{
if((foodx==snake_x[i])&&(foody==snake_y[i])) //如果食物與蛇的身體重疊,要重新創建
{
creatFood();
}
}
}
void snake_Grow(void)
{
if(snake_x[0] == foodx && snake_y[0] == foody)
{
creatFood();
snake_x[length] = snake_x[length - 1];
snake_y[length] = snake_y[length - 1];
length++;
}
}
void drawsnake() //點亮蛇和食物
{
u8 i;
for(i=0;i<length;i++)
{
Hc595SendByte(Hc595_Coordy[snake_y[i]]);
P0=Hc595_Coordx[snake_x[i]];
delay(20);
P0=0xff;
Hc595SendByte(Hc595_Coordy[foody]);
P0=Hc595_Coordx[foodx];
delay(20);
P0=0xff;
}
}
void JudgeDeath(void)
{
u8 i;
// 判斷蛇撞墻死亡
if((snake_x[0]>7)||(snake_y[0]>7))
{
Hc595SendByte(0x00);
while(1);
}
// 判斷蛇撞到自己身體死亡
for(i=4; i<length; i++)
{
if((snake_x[0]==snake_x[i])&&(snake_y[0]==snake_y[i]))
{
P0=0xFF;
while(1);
}
}
}
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XD8; //給定時器賦初值,定時10ms
TL0=0XF0;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
void main()
{
Timer0Init();
initSnake();
while(1)
{
drawsnake();
JudgeDeath();
snake_Grow();
Keypros();
}
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XD8; //給定時器賦初值,定時10ms
TL0=0XF0;
i++;
if(i==50)
{
i=0;
move();
}
}
作者:
admin
時間:
2019-8-15 16:36
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
成熟的身雞疲憊
時間:
2019-10-20 22:51
共陽還是共陰
作者:
起步
時間:
2020-1-8 14:16
為什么這個程序下載不能運行
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一区天堂
|
av在线一区二区三区
|
成人h动漫亚洲一区二区
|
成人免费看
|
国产精品久久久久久久久久
|
久久久久久91
|
久久久久国产精品www
|
韩国av电影网
|
91看片在线观看
|
一区二区三区四区国产
|
中文字幕亚洲精品
|
日韩成人免费视频
|
久久久久久艹
|
国产激情视频
|
国产福利资源
|
男女羞羞视频在线免费观看
|
国产黄视频在线播放
|
99精品99
|
国产成人精品a视频
|
亚洲视频欧美视频
|
亚洲色图图片
|
日韩小视频在线
|
久久久激情视频
|
色接久久
|
av毛片在线
|
国产中文字幕亚洲
|
欧美精
|
成人国产免费视频
|
91精品一区二区三区久久久久
|
在线色网站
|
欧美日韩中文字幕在线
|
成人免费看电影
|
国产高清精品一区二区三区
|
亚洲视频在线观看一区二区三区
|
日本中文字幕日韩精品免费
|
久草a√
|
国产99久久精品一区二区永久免费
|
91传媒在线观看
|
午夜影晥
|
午夜码电影
|
综合久久色
|