微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于51单片机的无线遥控自行车风火轮程序

基于51单片机的无线遥控自行车风火轮程序

时间:11-30 来源:互联网 点击:

b=s;
}

/****************************
初始化函数
*****************************/
void init()
{
uchar a=8;//发送循环次数
uchar h1,h2,h3,h4;

delay_ms(50);
beep();
delay_ms(50);//测试蜂鸣器

led=0;
delay_ms(100);
led=1;
delay_ms(100);//测试led

//测试排灯,亮
oe1=0;
oe2=0;
oe3=0;
oe4=0;
h4=0xFF;
st_cp4=0;
while(a--)//发送第4个8位
{ds4=h4&0x80;
sh_cp4=0;
h4=h4<1;
sh_cp4=1;
}
a=8;

h3=0xFF;
st_cp3=0;
while(a--)//发送第3个8位
{ds3=h3&0x80;
sh_cp3=0;
h3=h3<1;
sh_cp3=1;
}
a=8;

h1=0xFF;
st_cp1=0;
while(a--)//发送第1个8位
{ds1=h1&0x80;
sh_cp1=0;
h1=h1<1;
sh_cp1=1;
}
a=8;

h2=0xFF;
st_cp2=0;
while(a--)//发送第2个8位
{ds2=h2&0x80;
sh_cp2=0;
h2=h2<1;
sh_cp2=1;
}
a=8;
st_cp1=1;
st_cp2=1;
st_cp3=1;
st_cp4=1;

delay_ms(100);

//测试排灯,灭
oe1=0;
oe2=0;
oe3=0;
oe4=0;
h4=0x00;
st_cp4=0;
while(a--)//发送第4个8位
{ds4=h4&0x80;
sh_cp4=0;
h4=h4<1;
sh_cp4=1;
}
a=8;

h3=0x00;
st_cp3=0;
while(a--)//发送第3个8位
{ds3=h3&0x80;
sh_cp3=0;
h3=h3<1;
sh_cp3=1;
}
a=8;

h1=0x00;
st_cp1=0;
while(a--)//发送第1个8位
{ds1=h1&0x80;
sh_cp1=0;
h1=h1<1;
sh_cp1=1;
}
a=8;

h2=0x00;
st_cp2=0;
while(a--)//发送第2个8位
{ds2=h2&0x80;
sh_cp2=0;
h2=h2<1;
sh_cp2=1;
}
a=8;
st_cp1=1;
st_cp2=1;
st_cp3=1;
st_cp4=1;

delay_ms(50);
}

/*****************************
主函数
*****************************/
void main()
{
IP=0x05;//设定两个外部中断为你高优先级
TMOD=0x01; //定时器T0工作在方式1
ET0=1; //允许定时器T0中断
TH0=(65536-10000)/256; //定时器T0高八位赋初值 10ms
TL0=(65536-10000)%256; //定时器T0低八位赋初

IT0=1;//P3.2下降沿触发
EX0=1;//开外部中断0

IT1=1;//P3.3下降沿触发
EX1=1;//外部1

EA=1;//开总中断

modle0=0;
modle1=0;

t=0;
time=0;
man=1;//上电时为慢状态

enable=1;//上电使能
moshi=1;//

s=0;
b=0;

fmq=1;//等于1的时候关蜂鸣器
led=1;//等于1关闭led

init();//初始化

while(1)
{
if(enable==1)//使能有效
{
/*********模式0*************/
if(moshi==0)//模式0下显示静态画面
{
if(time>=10&&time<=70&&t<=70)
{ //判断速度如果小于10,则程序反应不过来
if(man==1)
{
man=0;
beep();
}
}
if(time>70||t>70)
{
if(man==0)
{
man=1;
beep();
}
}

if(man==0)
{
led=1;
oe1=0;
oe2=0;
oe3=0;
oe4=0;
display(modle0);//速度正常则根据modle显示静态画面
}
if(man==1)
{
oe1=1;
oe2=1;
oe3=1;
oe4=1;
shan();//当速度太慢,关闭595,开LED闪烁
}
}
/*******模式1*************/
if(moshi==1)//模式1下显示动态画面
{
/*判断速度如果小于10,则程序反应不过来*/
/*这个t小于等于70,可以避免突然刹车的时候,蜂鸣器响不停*/
if(time>=10&&time<=70&&t<=70)
{
if(man==1)
{
man=0;
beep();
}
}
if(time>70||t>70||t==0)
{
oe1=1;
oe2=1;
oe3=1;
oe4=1;
shan1();//当速度太慢,关闭595,开LED闪烁1
if(man==0)
{
man=1;
beep();
}
}

if(modle1==0&&man==0)
{
led=1;
oe1=0;
oe2=0;
oe3=0;
oe4=0;
zidong();//自动切换画面
display(z1);
}
if(modle1==1)
{
led=1;
oe1=0;
oe2=0;
oe3=0;
oe4=0;
kaisan();//开伞效果
}

if(modle1==2&&man==0)
{
led=1;
oe1=0;
oe2=0;
oe3=0;
oe4=0;
sudu();//速度越快,亮灯越多
}
}

}
if(enable==0)
{
oe1=1;
oe2=1;
oe3=1;
oe4=1;
huxi();//使能无效,关595,开LED呼吸
}
}
}

/*********************************
外部中断O
*********************************/
void intersvr0() interrupt 0
{
huan();//画面切换
TR0=0;//每切换画面都从新开始运行
t=0;
time=0;
}

/**********************************
外部中断1
**********************************/
void intersvr1() interrupt 2
{
TR0=1;//开启定时器T0中断
time=t;
if(t>=10)
time1=(t*1000-9500)/256;
/*转换成10us,减掉程序执行的95ms 再265等份*/
/*因为us延时函数最小单位是10us,所以转换成10us为单位*/
t=1;
s=s+y;
if(s>=31||s==0)
{
y=y*(-1);
}
if(moshi==1&&modle1==0)
z0++;
}

/*********************************
定时器T0的中断
**********************************/
void T0int() interrupt 1
{
t++;
if(t>127)//1.28s每圈,25寸轮子周长2.14m,速度是每小时6公里
t=127;
TH0=(65536-20000)/256;//定时器T0高八位赋初值 10ms
TL0=(65536-20000)%256;//定时器T0低八位赋初
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top