标题:
单片机红外线遥控七色小灯 Proteus仿真加源程序
[打印本页]
作者:
51黑电子happy
时间:
2017-3-29 23:37
标题:
单片机红外线遥控七色小灯 Proteus仿真加源程序
这种调光效果如果51黑电子论坛的朋友们有机会做成实物的话效果一定很酷炫.
51单片机做的
红外线遥控七色小灯
的仿真原理图(proteus工程文件可到本帖附件下载):
0.png
(29.8 KB, 下载次数: 86)
下载附件
2017-3-29 23:29 上传
单片机源程序:
//----------------------------------------------------------------------------------------------------------------------------------
//程序名:IRKD6-3
//程序功能:红外线遥控七色小灯
// --------------------------------------------------------------------------------------------------------------------------------
#include<reg51.h> //头文件
sbit IRIN=P3^2; //定义红外IR信号输入位
sbit R_LED=P0^0; //定义发红光LED控制引脚
sbit G_LED=P0^1; //定义发绿光LED控制引脚
sbit B_LED=P0^2; //定义发蓝光LED控制引脚
sbit SPK=P2^7; //定义压电喇叭信号输入位
unsigned char IRDATA[7]; //定义数组,存储红外接收到的数据
void delay(unsigned char x); //延时约x*0.1ms 函数
void fs_d ( ); //发声函数
void IR_ZX(); //遥控执行函数
//-------------------------------------- 主函数 --------------------------------------
void main() //主函数
{
EA=1; //允许总中断
EX0=1; //允许外部中断INT0中断
IT0=1; //外部中断INT0采用脉冲触发方式
fs_d ( );
{
IRIN=1; //IR 输入位设置为高电平
P0=0xff;
IR_ZX();
while(1); //无限循环
}
}
//-------------------------------------- 延时函数 -----------------------------------
void delay(unsigned char x) //延时约x*0.1ms
{
unsigned char i;
while(x--)
{for(i=0;i<10;i++){}}
}
//------------------------------------- 中断解码函数 ----------------------------------
void IR_IN() interrupt 0 using 0 //外部中断INT0函数
{
unsigned char j,k,n=0; //定义变量,且n=0
EX0=0; //暂时先关中断
delay(20); //延时0.10ms*20=2ms
if(IRIN==1) //如果IRIN出现高电平,是干扰信号
{
EX0=1;
return; //返回
}
while(!IRIN){delay(1);} //避开9ms前导低电平信
for(j=0;j<4;j++) //一共有4组数据
{
for(k=0;k<8;k++) //每组数据有8位
{
while(IRIN){delay(1);} // 避开4.5ms高电平
while(!IRIN){delay(1);}
// 开始接收数据
while(IRIN)
{
delay(1); //延时0.1ms
n++; //每过0.1ms时n就加1
if(n>=30) //如果超过30,放弃
{
EX0=1;
return;} //返回
}
IRDATA[j]=IRDATA[j]>>1; //右移1位
if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
n=0; //n清0
}
}
//检查接收的数据和数据反码是否相反
if(IRDATA[2]!=~IRDATA[3]) //判断数据码和数据反码是不是相反
{ //否则就放弃
EX0=1;
return;
}
// 遥控执行
else
EX0=1; //开中断
fs_d ( ); //调用发声函数
}
//------------------------------------- 发声函数 -----------------------------------------
void fs_d ( )
{
unsigned char i;
for(i=0;i<100;i++)
{
delay(4);
SPK=~SPK;
}
SPK=1;
}
//------------------------------------ 遥控执行函数 --------------------------------------
void IR_ZX() //遥控执行函数
{
while(1)
{
switch(IRDATA[2])
{
//发红色光
case 0x01:
{
G_LED=1; //绿光LED熄灭
B_LED=1; //蓝光LED熄灭
R_LED=0; //红光LED亮
break;
}
//发黄色光
case 0x02:
{
B_LED=1; //蓝光LED熄灭
R_LED=0; //红光LED亮
G_LED=0; //绿光LED亮
break;
}
//发绿色光
case 0x03:
{
B_LED=1; //蓝光LED熄灭
R_LED=1; //红光LED灭
G_LED=0; //绿光LED亮
break;
}
//发青色光
case 0x04:
{
R_LED=1; //红光LED熄灭
G_LED=0; //绿光LED亮
B_LED=0; //蓝光LED亮
break;
}
//发蓝色光
case 0x05:
{
R_LED=1; //红光LED熄灭
G_LED=1; //绿光LED熄灭
B_LED=0; //蓝光LED亮
break;
}
//发紫色光
case 0x06:
{
G_LED=1; //绿光LED熄灭
R_LED=0; //红光LED亮
B_LED=0; //蓝光LED亮
break;
}
//发白色光
case 0x07:
{
R_LED=0; //红光LED亮
G_LED=0; //绿光LED亮
B_LED=0; //蓝光LED亮
break;
}
//关闭彩灯
case 0x08:
{
R_LED=1; //红光LED熄灭
G_LED=1; //绿光LED熄灭
B_LED=1;
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(52.63 KB, 下载次数: 104)
下载附件
2017-3-29 23:36 上传
该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共25个项目):
http://www.51hei.com/bbs/dpj-79328-1.html
本例程下载(含proteus仿真工程文件与源码):
单片机红外线遥控七色小灯.rar
(51.55 KB, 下载次数: 168)
2017-3-29 23:35 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
dxh51
时间:
2017-4-29 09:50
仿真的时候,添加hex文件怎样添加
作者:
15856405182
时间:
2017-5-30 17:31
膜拜大佬
作者:
211209
时间:
2017-12-22 13:00
谢谢大佬了拿去修改一下
作者:
欢666
时间:
2018-1-3 15:05
我试了一下,在proteus仿真的时候会出现“在U2 HP中丢失的接口模型AT89”这个问题,楼主求解
作者:
shcshc
时间:
2018-10-16 19:27
有发射的源码吗
作者:
qq1050026447
时间:
2018-10-28 14:35
是全部源码吗?图2个芯片啊
作者:
路还要走
时间:
2018-10-29 14:03
毕设可以考虑
作者:
miyakoy
时间:
2019-5-3 21:32
有发送端的代码吗?
作者:
nzyhgw
时间:
2020-4-28 14:34
感谢分享这么好的资源,楼主有福!
作者:
空白西瓜
时间:
2020-4-28 15:37
你好,程序打不开是什么原因呢
作者:
空白西瓜
时间:
2020-4-28 16:24
你好,我想问一下怎么样实现让LED灯亮起来呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1