通過紅外通信,使用遙控器控制家里的燈開關,使用繼電器作為開關,高電平觸發。使用繼電接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
|