通过红外通信,使用遥控器控制家里的灯开关,使用继电器作为开关,高电平触发。使用继电接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)
|