基于51单片机的无线遥控自行车风火轮程序
![](../img/eep/emb/emb-6427751ncyccaepy.jpg)
硬件制作资料从http://www.51hei.com/bbs/dpj-19358-1.html下载
//课题:无线遥控自行车风火轮
//程序编写:潘观学
//单片机:STC89C54RD
//晶振:12MHZ
//单片机时钟模式:6T
#include
#include "fenghuolun.h" //定义在这里
/*********************************
延时函数
***********************************/
void delay_ms(unsigned int i)//1ms基准延时
{unsigned char j;
while(i--)
{for(j=0;j<246;j++)
{;
}
}
}
void delay_us(unsigned int n) //10us延时
{uchar i;
uchar j;
for(i=0;i
}
/*******************************
呼吸灯
********************************/
void huxi()
{
uint k=0,t,i,j;
for(i=0;i<=350;i++)
{
if((i%4)==0)
k++;
for(t=0;t<=16;t++)
{
led=0;
for(j=0;j<=52;j++)
if(j==k)
led=1;
}
if(enable==1)break;
}
for(i=0;i<=350;i++)
{
if((i%4)==0)
k--;
for(t=0;t<=16;t++)
{
led=0;
for(j=0;j<=90;j++)//j越大速度越慢
if(j==k)
led=1;
}
if(enable==1)break;
}
led=0xff;
delay_ms(200);
}
/******************************
闪烁函数
*****************************/
void shan()
{
led=0;
delay_ms(100);
led=1;
delay_ms(400);
}
void shan1()
{
led=0;
delay_ms(100);
led=1;
delay_ms(100);
led=0;
delay_ms(100);
led=1;
delay_ms(300);
}
/**********************************
蜂鸣器函数
************************************/
void beep()
{
fmq=0;
delay_ms(100);
fmq=1;
}
/*******************************
画面切换函数
********************************/
void huan()
{uchar i;
P1=0xff;//P1口设置为输入状态 先全部写1
i=P1;//赋值给临时存贮变量
i=i&0x0f;//和0x0f相与 屏蔽高四位,读取无线遥控码
if (i==0x04)//如果是0x04,则代表无线遥控器的按键A按下
{
if(moshi==0)
{
modle0++;//下一个静态画面
if(modle0>9)
modle0=0;
}
if(moshi==1)
{
modle1++;//下一个动态画面
if(modle1>2)
modle1=0;
}
beep();//提示音
}
if (i==0x01)//如果是0x01,则代表无线遥控器的按键B按下
{
if(moshi==0)
{
modle0--;//上一个静态画面
if(modle0<0)
modle0=9;
}
if(moshi==1)
{
modle1--;//上一个动态画面
if(modle1<0)
modle1=2;
}
beep();//提示音
}
if (i==0x08)//如果是0x08,则代表无线遥控器的按键C按下
{
moshi=~moshi;
beep();//提示音
}
if (i==0x02)//如果是0x02,则代表无线遥控器的按键D按下
{
enable=~enable;
beep();
}
}
/*******************
静态画面显示函数
*******************/
void display(uchar n)
{uint i;//0-255形成整个圆
uchar a=8;//发送循环次数
uchar h1,h2,h3,h4;
for(i=0;i<256;i++)
{
h4=tab[n][i*4+3];
st_cp4=0;
while(a--)//发送第4个8位
{ds4=h4&0x01;
sh_cp4=0;
h4=h4>>1;
sh_cp4=1;
}
a=8;
h3=tab[n][i*4+2];
st_cp3=0;
while(a--)//发送第3个8位
{ds3=h3&0x01;
sh_cp3=0;
h3=h3>>1;
sh_cp3=1;
}
a=8;
h1=tab[n][i*4];
st_cp1=0;
while(a--)//发送第1个8位
{ds1=h1&0x01;
sh_cp1=0;
h1=h1>>1;
sh_cp1=1;
}
a=8;
h2=tab[n][i*4+1];
st_cp2=0;
while(a--)//发送第2个8位
{ds2=h2&0x01;
sh_cp2=0;
h2=h2>>1;
sh_cp2=1;
}
a=8;
st_cp1=1;
st_cp2=1;
st_cp3=1;
st_cp4=1;
delay_us(time1); //每显示一组产生一个延时
}
}
/********************************
动态画面显示函数
*********************************/
/*******自动切换画面*********/
void zidong()
{
if(z0>=20) //每显示20次切换
{
z0=0;
z1++;
}
if(z1>9)
z1=0;
}
/***********速度显示函数*************/
void sudu() //速度越快,亮灯越多
{
uint i;//0-255形成整个圆
uchar a=8;//发送循环次数
uchar h1,h2,h3,h4;
//l=30-((time/4)-1); //l等于0~31
if(time<=64)
{
if(time<=15)
time=0;
if(time>15&&time<=20)
time=10;
if(time>20&&time<=24)
time=16;
if(time>24&&time<=27)
time=20;
if(time>27&&time<=29)
time=24;
l=32-time/2;
for(i=0;i<256;i++)
{
h4=tabd[l*4+3];
st_cp4=0;
while(a--)//发送第4个8位
{ds4=h4&0x80;
sh_cp4=0;
h4=h4<1;
sh_cp4=1;
}
a=8;
h3=tabd[l*4+2];
st_cp3=0;
while(a--)//发送第3个8位
{ds3=h3&0x80;
sh_cp3=0;
h3=h3<1;
sh_cp3=1;
}
a=8;
h1=tabd[l*4];
st_cp1=0;
while(a--)//发送第1个8位
{ds1=h1&0x80;
sh_cp1=0;
h1=h1<1;
sh_cp1=1;
}
a=8;
h2=tabd[l*4+1];
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_us(time1+30); //每显示一组产生一个延时
}
}
}
/************开伞灯函数***************/
void kaisan()
{uint i;
uchar a=8;//发送循环次数
uchar h1,h2,h3,h4;
if((s-b)>0)
{
for(i=0;i<256;i++)
{
h4=tabd[s*4+3];
st_cp4=0;
while(a--)//发送第4个8位
{ds4=h4&0x80;
sh_cp4=0;
h4=h4<1;
sh_cp4=1;
}
a=8;
h3=tabd[s*4+2];
st_cp3=0;
while(a--)//发送第3个8位
{ds3=h3&0x80;
sh_cp3=0;
h3=h3<1;
sh_cp3=1;
}
a=8;
h1=tabd[s*4];
st_cp1=0;
while(a--)//发送第1个8位
{ds1=h1&0x80;
sh_cp1=0;
h1=h1<1;
sh_cp1=1;
}
a=8;
h2=tabd[s*4+1];
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_us(time1+37); //每显示一组产生一个延时
}
}
51单片机无线遥控自行车风火 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)