久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2812|回復: 1
打印 上一主題 下一主題
收起左側

單片機紅外控制繼電器(遙控插座)達到控制家電 附源碼

[復制鏈接]
跳轉到指定樓層
樓主
開始用紅外遙控做的一個插座項目,共四路繼電器,可以單獨控制開關也可以同時開關,很方便的使用。

制作出來的實物圖如下:


單片機控制源碼如下:
  1. #include<reg51.h>
  2. #define uint unsigned  int
  3. #define  uchar unsigned char

  4. sbit jdq1=P1^0;
  5. sbit jdq2=P1^1;
  6. sbit jdq3=P1^2;
  7. sbit jdq4=P1^3;
  8. sbit jdq5=P1^4;
  9. sbit jdq6=P1^5;
  10. sbit jdq7=P1^6;
  11. sbit jdq8=P1^7;
  12. sbit IRIN = P3^2;




  13. unsigned char IrValue[6];          //用來存放讀取到的紅外值
  14. unsigned char Time,t,a,c,Second;


  15. void dsq0z();
  16. void IrInit();
  17. void DelayMs(unsigned int );
  18. void delay(uint z);

  19. /*******************************************************************************
  20. * 函數名         : main
  21. * 函數功能                   : 主函數
  22. * 輸入           : 無
  23. * 輸出                  : 無
  24. *******************************************************************************/

  25. void main()
  26. {
  27.         unsigned char b;
  28.         IrInit();
  29.         while(1)
  30.         {
  31.                 IrValue[4]=IrValue[2]>>4;                          //高位
  32.                 IrValue[5]=IrValue[2]&0x0f;                //低位
  33.                 if(c==5)
  34.                         {jdq4=1;
  35.                         jdq8=1;
  36.                
  37.                        
  38.                         }
  39.                
  40.                 if(IrValue[4]==4&&        IrValue[5]==5&&b==0)
  41.                 {
  42.                 P1=0;                }//全開
  43.                 if(IrValue[4]==4&&        IrValue[5]==4&&b==0)
  44.                 {
  45.                 jdq1=1;
  46.     jdq2=1;
  47.     jdq3=1;
  48.     jdq4=1;
  49.     jdq5=1;
  50.     jdq6=1;
  51.     jdq7=1;
  52.     jdq8=1;                }//全關
  53.                 if(IrValue[4]==1&&        IrValue[5]==6&&b==0)
  54.                 {
  55.                 jdq1=0;
  56.     jdq2=0;
  57.     jdq3=0;
  58.     jdq4=0;                }//前四開
  59.                 if(IrValue[4]==0&&        IrValue[5]==12&&b==0)
  60.                 {
  61.                 jdq5=0;
  62.     jdq6=0;
  63.     jdq7=0;
  64.     jdq8=0;                }//后四開
  65.                 if(IrValue[4]==0&&        IrValue[5]==7&&b==0)
  66.                 {    a=0;
  67.                 }
  68.         if(IrValue[4]==4&&        IrValue[5]==6&&b==0)
  69.                 {
  70.                 jdq1=0;        }
  71.                 if(IrValue[4]==4&&        IrValue[5]==7&&b==0)
  72.                 {
  73.                 jdq1=1;        }//繼電器1
  74.                 if(IrValue[4]==4&&        IrValue[5]==0&&b==0)
  75.                 {
  76.                 jdq2=0;        }
  77.                 if(IrValue[4]==4&&        IrValue[5]==3&&b==0)
  78.                 {
  79.                 jdq2=1;        }//繼電器2
  80.                 if(IrValue[4]==1&&        IrValue[5]==5&&b==0)
  81.                 {
  82.                 jdq3=0;        }
  83.                 if(IrValue[4]==0&&        IrValue[5]==9&&b==0)
  84.                 {
  85.                 jdq3=1;        }//繼電器3
  86.                 if(IrValue[4]==1&&        IrValue[5]==9&&b==0)
  87.                 {
  88.                 jdq4=0;        }
  89.                 if(IrValue[4]==0&&        IrValue[5]==13&&b==0)
  90.                 {
  91.                 jdq4=1;        }//繼電器4
  92.                 if(IrValue[4]==1&&        IrValue[5]==8&&b==0)
  93.                 {
  94.                 jdq5=0;        }
  95.                 if(IrValue[4]==5&&        IrValue[5]==14&&b==0)
  96.                 {
  97.                 jdq5=1;        }//繼電器5
  98.                 if(IrValue[4]==1&&        IrValue[5]==12&&b==0)
  99.                 {
  100.                 jdq6=0;        }
  101.                 if(IrValue[4]==5&&        IrValue[5]==10&&b==0)
  102.                 {
  103.                 jdq6=1;        }//繼電器6
  104.                 if(IrValue[4]==5&&        IrValue[5]==2&&b==0)
  105.                 {
  106.                 jdq7=0;        }
  107.                 if(IrValue[4]==4&&        IrValue[5]==10&&b==0)
  108.                 {
  109.                 jdq7=1;        }//繼電器7
  110.                 if(IrValue[4]==0&&        IrValue[5]==8&&b==0)
  111.                 {
  112.                 jdq8=0;        }
  113.                 if(IrValue[4]==4&&        IrValue[5]==2&&b==0)
  114.                 {
  115.                 jdq8=1;        }//繼電器8
  116.                
  117.         }
  118. }                                                                        
  119. /*******************************************************************************
  120. * 函數名         : DelayMs()
  121. * 函數功能                   : 延時
  122. * 輸入           : x
  123. * 輸出                  : 無
  124. *******************************************************************************/

  125. void DelayMs(unsigned int x)   //0.14ms誤差 0us
  126. {
  127.         unsigned char i;
  128.         while(x--)
  129.         {
  130.                 for (i = 0; i<13; i++)
  131.                 {}
  132.         }
  133. }
  134. void delay(uint z)
  135. {   uint x,y;
  136.         for(x=z;x>0;x--)
  137.         {
  138.                 for(y=110;y>0;y--);
  139.       
  140.       
  141.         }
  142. }
  143.       
  144. /*******************************************************************************
  145. * 函數名         : IrInit()
  146. * 函數功能                   : 初始化紅外線接收
  147. * 輸入           : 無
  148. * 輸出                  : 無
  149. *******************************************************************************/

  150. void IrInit()
  151. {
  152.         IT0=1;//下降沿觸發
  153.         EX0=1;//打開中斷0允許
  154.         EA=1;        //打開總中斷

  155.         IRIN=1;//初始化端口
  156. }
  157. /*******************************************************************************
  158. * 函數名         : ReadIr()
  159. * 函數功能                   : 讀取紅外數值的中斷函數
  160. * 輸入           : 無
  161. * 輸出                  : 無
  162. *******************************************************************************/

  163. void ReadIr() interrupt 0
  164. {
  165.         unsigned char j,k;
  166.         unsigned int err;
  167.         Time=0;                                         
  168.         DelayMs(70);

  169.         if(IRIN==0)                //確認是否真的接收到正確的信號
  170.         {         
  171.                
  172.                 err=1000;                                //1000*10us=10ms,超過說明接收到錯誤的信號
  173.                 /*當兩個條件都為真是循環,如果有一個條件為假的時候跳出循環,免得程序出錯的時
  174.                 侯,程序死在這里*/      
  175.                 while((IRIN==0)&&(err>0))        //等待前面9ms的低電平過去                 
  176.                 {                       
  177.                         DelayMs(1);
  178.                         err--;
  179.                 }
  180.                 if(IRIN==1)                        //如果正確等到9ms低電平
  181.                 {
  182.                         err=500;
  183.                         while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高電平過去
  184.                         {
  185.                                 DelayMs(1);
  186.                                 err--;
  187.                         }
  188.                         for(k=0;k<4;k++)                //共有4組數據
  189.                         {                              
  190.                                 for(j=0;j<8;j++)        //接收一組數據
  191.                                 {

  192.                                         err=60;               
  193.                                         while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去
  194.                                         {
  195.                                                 DelayMs(1);
  196.                                                 err--;
  197.                                         }
  198.                                         err=500;
  199.                                         while((IRIN==1)&&(err>0))         //計算高電平的時間長度。
  200.                                         {
  201.                                                 DelayMs(1);//0.14ms
  202.                                                 Time++;
  203.                                                 err--;
  204.                                                 if(Time>30)
  205.                                                 {
  206.                                                         EX0=1;
  207.                                                         return;
  208.                                                 }
  209.                                         }
  210.                                         IrValue[k]>>=1;         //k表示第幾組數據
  211.                                         if(Time>=8)                        //如果高電平出現大于565us,那么是1
  212.                                         {
  213.                                                 IrValue[k]|=0x80;
  214.                                         }
  215.                                         Time=0;                //用完時間要重新賦值                                                      
  216.                                 }
  217.                         }
  218.                 }
  219.                 if(IrValue[2]!=~IrValue[3])
  220.                 {
  221.                         return;
  222.                 }
  223.         }                       
  224. }
  225. void dsq0z()
  226.   {

  227.             EA=1;      
  228.           ET0=1;
  229.          TH0=(65536-50000)/256 ;
  230.          TL0=(65536-50000)%256 ;
  231.          TR0=1;

  232.   }


  233. void dsq0(void)  interrupt 1
  234. {


  235.         TH0=(65536-50000)/256 ;
  236.          TL0=(65536-50000)%256 ;
  237.          if(a==0)
  238.          {
  239.             t++;
  240.             if(t==2)
  241.          {
  242.                     t=0;
  243.                    c++;
  244.     }      


  245. }

  246. }
復制代碼

全部資料51hei下載地址:
紅外插座.zip (44.8 KB, 下載次數: 30)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:247623 發表于 2018-11-24 21:31 | 只看該作者
我去,沒有仿真圖,早知道沒有原理圖,我就不下了,浪費我黑幣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 玖玖精品 | 国产综合久久久久久鬼色 | 狠狠操狠狠操 | 欧美激情国产日韩精品一区18 | 中文字幕在线人 | 韩国av电影网 | 色屁屁在线观看 | 久久另类| 成年人免费网站 | 自拍偷拍第一页 | 国产成人a亚洲精品 | 国产精品久久久久久久久久三级 | 天天干夜夜操 | 天天干天天爽 | 中文字幕在线精品 | 亚洲免费影院 | 日韩免费一区 | 成人永久免费视频 | 91久久精品一区二区二区 | 国产精品18久久久 | 日韩欧美精品在线 | 99热都是精品 | 国产超碰人人爽人人做人人爱 | 日日日操 | 成人在线视频看看 | 欧美电影网 | 狠狠操电影 | 日韩在线精品强乱中文字幕 | 国产在线观看网站 | 欧美黄色片 | 91视频进入 | 精品国产一区二区国模嫣然 | 日韩av啪啪网站大全免费观看 | 国产福利视频在线观看 | 国产精品完整版 | 欧美成视频| 国产精品自拍啪啪 | 日韩高清一区 | 亚洲免费一区二区 | 中文字幕不卡视频在线观看 | 国产精品久久久久久中文字 |