标题:
51单片机使用红外控制家里的灯 源程序
[打印本页]
作者:
jkla
时间:
2020-4-18 11:53
标题:
51单片机使用红外控制家里的灯 源程序
通过红外通信,使用遥控器控制家里的灯开关,使用继电器作为开关,高电平触发。使用继电接220v一定要看继电器的耐压值,需要大于220v才可以,小于220v的不能用作一般家电控制。程序简单,适合初学者学习,接220v需谨慎。
单片机源程序如下:
#include "H_W.h"
//#define GPIO_LED P2
#define GPIO_SMG P0
#define uchar unsigned char
#define uint unsigned int
uchar code smgduan[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71,0x76};
//uchar remote_c_data[4];
uchar display[8];
//uchar Time = 0;
uchar Signal_Code;
sbit relay = P2^0;
sbit LSA = P1^0;
sbit LSB = P1^1;
sbit LSC = P1^2;
void Delay(uint i)
{
while(i--);
}
/* 定义八个数码管显示器的位选函数 ,扫描数码管 */
void Digdisplay()
{
uchar i;
for(i = 0; i < 3; i++)
{
switch(i)
{
case (0):
LSA = 0; LSB = 0; LSC = 0; break; // 000
case (1):
LSA = 1; LSB = 0; LSC = 0; break; // 001
case (2):
LSA = 0; LSB = 1; LSC = 0; break; // 010
}
GPIO_SMG = display[i];
Delay(100); //改变参数的值能实现滚动显示。最大为65535,否则会溢出。
GPIO_SMG = 0x00; //清空数码管,以防止出现重影。
}
}
void main(void)
{
Remote_Init();
// GPIO_LED = 0xff;
relay = 0;
while(1)
{
// Time = 0; //每次使用前必须初始化为零
display[0] = smgduan[remote_c_data[2] / 16];
display[1] = smgduan[remote_c_data[2] % 16];
display[2] = smgduan[16];
Digdisplay();
Signal_Code = remote_c_data[2];
if(Signal_Code == 0x45)
{
// GPIO_LED = 0x00;
relay = 1; //开灯
}
else if(Signal_Code == 0x46)
{
// GPIO_LED = 0xff;
relay = 0; //关灯
}
}
}
void ReadIr() interrupt 0
{
remote_Control();
}
复制代码
全部程序51hei下载地址:
红外通信.rar
(29.15 KB, 下载次数: 11)
2020-4-18 11:52 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
51hei团团
时间:
2020-4-18 14:40
很实用 能分享或者介绍下原理图吗?
作者:
jkla
时间:
2020-4-18 15:14
51hei团团 发表于 2020-4-18 14:40
很实用 能分享或者介绍下原理图吗?
原理图没有的,重点在红外通信上面,首先测试遥控器各个键所对应的键值,通过数码管或者串口显示,记下你想使用的键及对应的键值,然后在主函数里面判断接收到遥控器的键值,从而执行相应的功能。我写的这个是判断接收到遥控器的键值与0x45比较,一样继电器吸合,开灯;与0x46比较,一样继电器断开,关灯;你可以接其他的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1