资源简介
基于红外线的单片机贪吃蛇,51单片机系列,需要红外遥控器和接收器,开发板
代码片段和文件信息
#include “reg51.h“
#include
#include
typedef unsigned int u16;
typedef unsigned char u8;
sbit IRIN=P3^2;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 IrValue[6];
u8 Time;
u8 see[]={00000000};
u8 t = 2; //记录当前运动方向初始为1向上
u8 she[64] = {0};
u8 count;
u8 ledwei[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe};
void init(){ //头插初始化链表开始蛇的位置在22
IT0=1;//下降沿触发
EX0=1;//打开中断0允许
EA=1; //打开总中断
IRIN=1;//初始化端口
for(count = 0;count<64;count++) she[count] = 0;
count = 1;
count++;
count++;
count++;
she[63] = 77;
she[62] = 24;
she[61] = 23;
she[60] = 22;
}
void delay(u16 i)
{
while(i--);
}
void show(){
u8 i x yk=0;
u8 j tf[20];
for(i = 63;i > 43;i--){
tf[63-i] = she[i];
}
for(i=0;i<20;++i)//i用来遍历数组
{
for(j=i+1;j<20 && tf[i]-tf[j];++j);
if(!(j-20))//没有重复元素
tf[k++]=tf[i];//可将date[]看作两个数组
}
for(j = 0; j < 8; j++) see[j] = 0;
j = 0;
for(i = 0; i < 20; i++){
x = tf[i]/10;
y = tf[i]%10;
j = 1 << y-1;
see[x-1] += j;
}
}
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 DigDisplay()
{
u8 i = 0;
P0=0x7f;
for (i = 0; i < 8; ++i)
{
P0 =ledwei[i];
Hc595SendByte(see[i]);
delay(100);
Hc595SendByte(0x00); //消隐
}
}
/*
启动:
1:上 2:左 3:下 4:右
*/
void run(u8 t){
u8 i;
for(i =64-count;i < 62; i++){
she[i] = she[i+1];
}
switch(t){
case 1: she[62] += 1; if((she[62]%10)>8) she[62] = (she[62]/10)*10+1; break;
case 2: she[62] -= 10; if((she[62]/10)<1) she[62] = (she[62]%10)+80; break;
case 3: she[62] -= 1; if((she[62]%10)<1) she[62] = (she[62]/10)*10+8; break;
case 4: she[62] += 10; if((she[62]/10)>8) she[62] = (she[62]%10)+10; break;
}
if(she[62]==she[63]){
she[63] = (((rand()%8)+1)*10)+((rand()%8)+1);
count++;
for(i =64-count;i < 62; i++){
she[i] = she[i+1];
}
switch(t){
case 1: she[62] += 1; if((she[62]%10)>8) she[62] = (she[62]/10)*10+1; break;
case 2: she[62] -= 10; if((she[62]/10)<1) she[62] = (she[62]%10)+80; break;
case 3: she[62] -= 1; if((she[62]%10)<1) she[62] = (she[62]/10)*10+8; break;
case 4: she[62] += 10; if((she[62]/10)>8) she[62] = (she[62]%10)+10; break;
}
for(i = 0;i < 5;i++){
show();
DigDisplay();
}
}
}
void main(){
u16 i = 0;
init();
show();
while(1){
DigDisplay();
i++;
show();
if(i>40){
if(IrValue[2]==24){
t = 1;
}else if(IrValue[2]==8){
t = 2;
}else if(IrValue[2]==82){
t = 3;
}else{
t = 4;
}
run(t);
i = 0;
}
}
}
void ReadIr() interrupt 0
{
u8 jk;
u16 err;
Time=0;
delay(700); //7ms
if(IRIN==0) //确认是否真的接收到正确的信号
{
err=1000; //1000*10us=10ms超过说明接收到错误的信号
/*当两个条件都为真是循环,如果
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4385 2019-05-26 22:52 shank.c
文件 458240 2019-07-11 19:43 单片机课设报告.doc
- 上一篇:大数据认知实习报告
- 下一篇:四阶切比雪夫带通滤波器
相关资源
- 51单片机驱动ov7670
- 基于51单片机的智能循迹小车制作
- 基于51单片机电子琴程序
- 51单片机测量方波频率proteus仿真
- 基于51单片机的自动加热散热系统,采
- 51单片机——门禁系统
- 51单片机程序.zip
- 基于51单片机的闹钟设计
- 51单片机数码管显示时钟
- 51单片机T2定时器控制舵机程序源码(
- 两超声波模块测量角度
- 51单片机闹钟
- 51单片机 心形花样流水灯程序
- 四位数码管时钟程序
- BC28+51单片机的原理图
- 51单片机控制电机的转速转向以及启停
- 51单片机双机通信
- 51开发板密码锁
- 基于51单片机的心形流水灯仿真
- 51单片机控制CS5463程序
- 51单片机最小系统原理图.SchDoc
- 51单片机红外遥控器程序
- 遗传算法实现求PID参数控制电压的代
- 基于51单片机的智能窗帘系统全套资料
- Linux贪吃蛇
- 51单片机控制步进电机电路图
- 51单片机读取DS18b20数据加1602显示+pr
- 基于51单片机寻光小车
- c51单片机数码管显示60s倒计时
- 51单片机控制DS18b20,在数码管上显示
评论
共有 条评论