標(biāo)題: 51單片機(jī)使用紅外控制家里的燈 源程序 [打印本頁]

作者: jkla    時(shí)間: 2020-4-18 11:53
標(biāo)題: 51單片機(jī)使用紅外控制家里的燈 源程序
通過紅外通信,使用遙控器控制家里的燈開關(guān),使用繼電器作為開關(guān),高電平觸發(fā)。使用繼電接220v一定要看繼電器的耐壓值,需要大于220v才可以,小于220v的不能用作一般家電控制。程序簡單,適合初學(xué)者學(xué)習(xí),接220v需謹(jǐn)慎。

單片機(jī)源程序如下:

  1. #include "H_W.h"
  2. //#define GPIO_LED P2
  3. #define GPIO_SMG P0
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. uchar code smgduan[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
  7.                                                 0x7c,0x39,0x5e,0x79,0x71,0x76};
  8. //uchar remote_c_data[4];
  9. uchar display[8];
  10. //uchar Time = 0;
  11. uchar Signal_Code;

  12. sbit relay = P2^0;

  13. sbit LSA = P1^0;
  14. sbit LSB = P1^1;
  15. sbit LSC = P1^2;

  16. void Delay(uint i)
  17. {
  18.          while(i--);
  19. }

  20. /* 定義八個(gè)數(shù)碼管顯示器的位選函數(shù) ,掃描數(shù)碼管 */
  21. void Digdisplay()
  22. {
  23.         uchar i;
  24.         for(i = 0; i < 3; i++)
  25.         {
  26.                  switch(i)
  27.                 {
  28.                
  29.                          case (0):
  30.                                         LSA = 0; LSB = 0; LSC = 0; break;           // 000
  31.                         case (1):                                                                          
  32.                                         LSA = 1; LSB = 0; LSC = 0; break;           // 001
  33.                         case (2):                                                                          
  34.                                         LSA = 0; LSB = 1; LSC = 0; break;           // 010
  35.                 }
  36.                 GPIO_SMG = display[i];
  37.                 Delay(100);                     //改變參數(shù)的值能實(shí)現(xiàn)滾動(dòng)顯示。最大為65535,否則會(huì)溢出。
  38.                 GPIO_SMG = 0x00;           //清空數(shù)碼管,以防止出現(xiàn)重影。
  39.         }
  40. }



  41. void main(void)
  42. {
  43.         Remote_Init();
  44. //        GPIO_LED = 0xff;
  45.         relay = 0;
  46.          while(1)
  47.         {
  48. //                Time = 0;  //每次使用前必須初始化為零
  49.                  display[0] = smgduan[remote_c_data[2] / 16];
  50.                 display[1] = smgduan[remote_c_data[2] % 16];
  51.                 display[2] = smgduan[16];
  52.                 Digdisplay();
  53.                 Signal_Code = remote_c_data[2];
  54.                 if(Signal_Code == 0x45)
  55.                 {
  56. //                           GPIO_LED = 0x00;
  57.                         relay = 1;                        //開燈
  58.                 }
  59.                 else if(Signal_Code == 0x46)
  60.                 {
  61. //                        GPIO_LED = 0xff;
  62.                         relay = 0;                        //關(guān)燈
  63.                 }
  64.         }
  65. }

  66. void ReadIr() interrupt 0
  67. {
  68.         remote_Control();        
  69. }
復(fù)制代碼

全部程序51hei下載地址:
紅外通信.rar (29.15 KB, 下載次數(shù): 11)

作者: 51hei團(tuán)團(tuán)    時(shí)間: 2020-4-18 14:40
很實(shí)用 能分享或者介紹下原理圖嗎?
作者: jkla    時(shí)間: 2020-4-18 15:14
51hei團(tuán)團(tuán) 發(fā)表于 2020-4-18 14:40
很實(shí)用 能分享或者介紹下原理圖嗎?

原理圖沒有的,重點(diǎn)在紅外通信上面,首先測試遙控器各個(gè)鍵所對(duì)應(yīng)的鍵值,通過數(shù)碼管或者串口顯示,記下你想使用的鍵及對(duì)應(yīng)的鍵值,然后在主函數(shù)里面判斷接收到遙控器的鍵值,從而執(zhí)行相應(yīng)的功能。我寫的這個(gè)是判斷接收到遙控器的鍵值與0x45比較,一樣繼電器吸合,開燈;與0x46比較,一樣繼電器斷開,關(guān)燈;你可以接其他的。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1