登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
51单片机红外遥控RGB流水灯基础版--带源码原理图,分享给有兴趣的你们
看4573
|
回4
|
收藏
楼主
ID:271321
只看他
2020-3-15 18:06
51 红外遥控RGB流水灯基础版--带源码原理图,分享给有兴趣的你们。大家一起发动脑筋改出炫酷的亮灯方式,欢迎你们改好后带程序回来交流哈哈哈
请看附件源代码,欢迎回帖互相探讨哈
电路原理图如下:
单片机源程序如下:
代码:
#include<STC89C5xRC_RDP.h>
//为复杂类型定义别名
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IRIN=P4^3;
unsigned char table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};///
unsigned char table2[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};////高位到低位逐个熄灭////
unsigned char table3[]={0x80,0xc0,0xe0,0xf0};/////高4位依次点亮每个灯P1口//////
unsigned char table4[]={0x01,0x03,0x07,0x0f};//////低4位依次点亮每个灯P1口///
unsigned char table5[]={0x81,0xc3,0xe7,0xff};//////高和低位往中间亮P1口,逐个点亮/////
unsigned char table6[]={0xff,0xfe,0xfc,0xf8,0xe0,0xc0,0x80,0x00};/////低位到高位逐个熄灭/////
unsigned char table7[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};/////依次高位到低位每个点灯亮/////
unsigned char table8[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};/////依次低位到高位每个点灯亮/////
unsigned char table9[]={0xff,0x7e,0x3c,0x18,0x00};//////高和低位往中间亮P1口,逐个熄灭/////
//uchar num;//全局按键变量
uchar a;
uint k;
uchar IrValue[6];
uchar Time;
//延时
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=80;y>0;y--);//////Y=110///////
}
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay_r(uchar i)
{
while(i--);
}
/*******************************************************************************
/*
interrupt 6===INT2--P4.3
interrupt 7===INT3--P4.2
*/
void LSall()
{
uchar i;
for(i=0;i<8;i++)
{
P3=table7[i];
P2=0x00;
P1=0x00;
P0=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P3=0xff;
P2=table7[i];
P1=0x00;
P0=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P3=0xff;
P2=0xff;
P1=table7[i];
P0=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P3=0xff;
P2=0xff;
P1=0xff;
P0=table7[i];
delay(50);
/////////P2,P1,P0,高位到低位依次每个点亮,循环2次/////////////
for(i=0;i<8;i++)
{
P0=table8[i];
P1=0x00;
P2=0x00;
P3=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P0=0xff;
P1=table8[i];
P2=0x00;
P3=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P0=0xff;
P1=0xff;
P2=table8[i];
P3=0x00;
delay(50);
}
for(i=0;i<8;i++)
{ P0=0xff;
P1=0xff;
P2=0xff;
P3=table8[i];
delay(50);
}
/////////P0,P1,P2,低位到高位依次每个点亮,循环/////////////
for(i=0;i<8;i++)
{
P0=table8[i];
P1=0x00;
P2=0x00;
delay(50);
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=table8[i];
P2=0x00;
delay(50);
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=0xff;
P2=table8[i];
delay(50);
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=table8[i];
delay(50);
}
}
////////////////两侧往下流,先左后右流//////////
for(i=0;i<8;i++)
{
P0=table8[i];
P1=0x00;
P2=0x00;
P3=0x00;
delay(200);
}
for(i=0;i<4;i++)
{
P0=0xff;
P1=table4[i];
P2=0x00;
delay(200);
}
for(i=0;i<4;i++)
{
P1=0x0f;
delay(200);
}
for(i=0;i<8;i++)
{
P3=table7[i];
P2=0x00;
P1=0x00;
P0=0x00;
delay(200);
}
for(i=0;i<8;i++)
{ P3=0xff;
P2=table7[i];
P1=0x00;
P0=0x00;
delay(200);
}
for(i=0;i<4;i++)
{ P3=0xff;
P2=0xff;
P1=table3[i];
delay(200);
}
for(i=0;i<4;i++)
{
P1=0xf0;
delay(200);
}
/////////////////两侧循环闪烁4次///////////
for(a=0;a<=3;a++)/////循环4次////
{
for(i=0;i<8;i++)
{
P3=0xff;
P2=0xf0;
P1=0x0f;
P0=0x00;
delay(100);
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=0xf0;
P2=0x0f;
P3=0x00;
delay(100);
}
}
////////////////两侧往下逐个点亮////////
for(a=0;a<=1;a++) //////////循环次数(a<=1)4次///////
{
for(i=0;i<8;i++)
{
P0=table8[i];
P3=table7[i];
P1=0x00;
P2=0x00;
delay(200);
}
for(i=0;i<4;i++)
{ P3=0xff;
P0=0xff;
P2=0xff;
P1=table5[i];
delay(200);
}
}
/////////////////两侧往下逐个熄灭/////////
for(a=0;a<=1;a++) //////////循环次数(a<=1)2次///////
{
for(i=0;i<8;i++)
{
P3=table2[i];
P0=table6[i];
P2=0xff;
P1=0xff;
delay(100);
}
for(i=0;i<5;i++)
{ P3=0x00;
P2=0x00;
P1=table9[i];
P0=0x00;
delay(100);
}
}
///////////////P0,P1,P2,全亮逐个熄灭/////////****//
for(i=0;i<8;i++)
{
P0=table6[i];
P1=0xff;
P2=0xff;
P3=0xff;
delay(100);
}
for(i=0;i<8;i++)
{
P0=0x00;
P1=table6[i];
P2=0xff;
P3=0xff;
delay(100);
}
for(i=0;i<8;i++)
{
P0=0x00;
P1=0x00;
P2=table6[i];
P3=0xff;
delay(100);
}
///////////////P2,P1,P0,全亮逐个熄灭/////////
for(i=0;i<8;i++)
{
P3=table2[i];
P2=0xff;
P1=0xff;
P0=0xff;
delay(100);
}
for(i=0;i<8;i++)
{ P3=0x00;
P2=table2[i];
P1=0xff;
P0=0xff;
delay(100);
}
for(i=0;i<8;i++)
{ P3=0x00;
P2=0x00;
P1=table2[i];
P0=0xff;
delay(100);
}
for(i=0;i<8;i++)
{ P3=0x00;
P2=0x00;
P1=0x00;
P0=table2[i];
delay(100);
}
}
void LS6()
{
uchar i;
////////////////两侧往下流,先左后右流//////////
for(i=0;i<8;i++){P0=table8[i];P1=0x00;P2=0x00;P3=0x00;delay(200);}
for(i=0;i<4;i++){P0=0xff;P1=table4[i];P2=0x00;delay(200);}
for(i=0;i<4;i++){P1=0x0f;delay(200);}
for(i=0;i<8;i++){P3=table7[i];P2=0x00;P1=0x00;P0=0x00;delay(200);}
for(i=0;i<8;i++){P3=0xff;P2=table7[i];P1=0x00;P0=0x00;delay(200);}
for(i=0;i<4;i++){P3=0xff;P2=0xff;P1=table3[i];delay(200);}
for(i=0;i<4;i++){P1=0xf0;delay(200);}
}
void LS5()
{
uchar i;
/////////////////两侧循环闪烁4次///////////
for(a=0;a<=3;a++)/////循环4次////
{for(i=0;i<8;i++){P3=0xff;P2=0xf0;P1=0x0f;P0=0x00;delay(100);}
for(i=0;i<8;i++){P0=0xff;P1=0xf0;P2=0x0f;P3=0x00;delay(100);}
}}
void LS4()
{
uchar i;
///////////////P0,P1,P2,全亮逐个熄灭/////////****//
for(i=0;i<8;i++){P0=table6[i];P1=0xff;P2=0xff;P3=0xff;delay(100);}
for(i=0;i<8;i++){P0=0x00;P1=table6[i];P2=0xff;P3=0xff;delay(100);}
for(i=0;i<8;i++){P0=0x00;P1=0x00;P2=table6[i];P3=0xff;delay(100);}
///////////////P2,P1,P0,全亮逐个熄灭/////////
for(i=0;i<8;i++){P3=table2[i];P2=0xff;P1=0xff;P0=0xff;delay(100);}
for(i=0;i<8;i++){P3=0x00;P2=table2[i];P1=0xff;P0=0xff;delay(100);}
for(i=0;i<8;i++){P3=0x00;P2=0x00;P1=table2[i];P0=0xff;delay(100);}
for(i=0;i<8;i++){P3=0x00;P2=0x00;P1=0x00;P0=table2[i];delay(100);}
}
void LS3()
{
uchar i;
///////////////两侧往下逐个点亮////////
for(a=0;a<=1;a++) //////////循环次数(a<=1)4次///////
{for(i=0;i<8;i++){P0=table8[i];P3=table7[i];P1=0x00;P2=0x00;delay(200);}
for(i=0;i<4;i++){ P3=0xff;P0=0xff;P2=0xff;P1=table5[i];delay(200);}}
/////////////////两侧往下逐个熄灭/////////
for(a=0;a<=1;a++) //////////循环次数(a<=1)2次///////
{for(i=0;i<8;i++){P3=table2[i];P0=table6[i];P2=0xff;P1=0xff;delay(100);}
for(i=0;i<5;i++){ P3=0x00;P2=0x00;P1=table9[i];P0=0x00;delay(100);}}}
void LS2()
{
////////////////两侧往下逐个点亮////////
uchar i;
for(a=0;a<=1;a++) //////////循环次数(a<=1)4次///////
{ for(i=0;i<8;i++){P0=table8[i];P3=table7[i];P1=0x00;P2=0x00;delay(200);}
for(i=0;i<4;i++){ P3=0xff;P0=0xff;P2=0xff;P1=table5[i];delay(200);}}
}
void LS1()
{
uchar i;
for(i=0;i<8;i++)
{P3=table7[i];P2=0x00;P1=0x00;P0=0x00;delay(50);}
for(i=0;i<8;i++)
{P3=0xff;P2=table7[i];P1=0x00;P0=0x00;delay(50);}
for(i=0;i<8;i++)
{P3=0xff;P2=0xff;P1=table7[i];P0=0x00;delay(50);}
for(i=0;i<8;i++)
{P3=0xff;P2=0xff;P1=0xff;P0=table7[i];delay(50);}
}
void IrInit()
{
IT2=1;//下降沿触发
EX2=1;//打开中断0允许
EA=1; //打开总中断
IRIN=1;//初始化端口
}
/*******************************************************************************
* 函数名 : ReadIr()
* 函数功能 : 读取红外数值的中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void ReadIr() interrupt 6
{
uchar j,k;
uint err;
Time=0;
delay_r(700); //7ms
if(IRIN==0) //确认是否真的接收到正确的信号
{
err=1000; //1000*10us=10ms,超过说明接收到错误的信号
/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
侯,程序死在这里*/
while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去
{
delay_r(1);
err--;
}
if(IRIN==1) //如果正确等到9ms低电平
{
err=500;
while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去
{
delay_r(1);
err--;
}
for(k=0;k<4;k++) //共有4组数据
{
for(j=0;j<8;j++) //接收一组数据
{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
所有资料51hei提供下载:
51 IR_RGB.rar
(646.68 KB)
(下载次数: 65, 2020-3-15 18:03 上传)
下载积分: 黑币 -5
沙发
ID:686739
只看他
2020-3-15 21:15
谢谢分享
板凳
ID:135809
只看他
2020-3-15 21:59
学习学习,非常感谢老师分享
地板
ID:686417
只看他
2020-3-16 16:10
最近也很想研究这方面内容,但是之前学的是Arduino,控制RGB led灯带,现在想拓展学习单片机
有机会向你请教,
5
#
ID:686417
只看他
2020-3-16 16:12
学习学习,非常感谢老师分享
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版