亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9186|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)遙控接收器 紅外NEC協(xié)議 代碼有詳細(xì)注釋

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī),紅外NEC協(xié)議,ds18b20溫度傳感器(P3.7),紅外接收器7844s,三位一體共陰數(shù)碼管(段碼:P2,位碼:P1.1,P1.2,P1.3),上拉電阻A102,接觸器(5v)接P1.3,(程序已親測,放心使用)


單片機(jī)源程序如下(源代碼的注釋非常詳細(xì)):
  1. #include<reg52.h>
  2. #include"inf.h"
  3. #include"relay.h"
  4. #include"ds18b20.h"
  5. #include"dig.h"

  6. extern uchar IRCOM[5];          //用來存放讀取到的紅外值
  7. extern unsigned char DisplayData[3];
  8. extern uchar code DIG_CODE[10];
  9. extern uchar code  RecvData[];
  10. int time=2100;
  11. int SET_Flag=0;//0 是非設(shè)置狀態(tài)  1 是設(shè)置狀態(tài)

  12. /***********************************************函數(shù)聲明**********************************************************/
  13. void TempDisplayTest(void);// DS18B20進(jìn)行溫度轉(zhuǎn)換并進(jìn)行讀取,計(jì)算出來(并顯示)
  14. extern void Contro_lrelay(uchar ConType,uint k);
  15. void key_scan();


  16. void main()
  17. {
  18.         int tempC=0,te,biao1=0,biao2=0;
  19.         uint ss=0;
  20.         InfInit();
  21.                
  22.         while(1)
  23.         {                         
  24.                  key_scan();
  25.                  
  26.                  //獲取溫度
  27.                  tempC=LcdDisplay(Ds18b20ReadTemp());
  28.                  
  29.                  //如果設(shè)置的溫度值大于室內(nèi)溫度,繼電器閉合
  30.                  te=tempC% 10000;
  31.                  if(biao1==1)

  32.                  goto end1;
  33.                  if(te>=time)
  34.                  {
  35.                          Contro_lrelay(16,1);        //繼電器斷開
  36.                           biao1=1;
  37.                           biao2=0;
  38.                  }
  39.                  end1:
  40.                  if(biao2==1)

  41.                  goto end2;
  42.                  if(te<time)
  43.                  {
  44.                          Contro_lrelay(15,1);        //繼電器閉合
  45.                         biao2=1;
  46.                         biao1=0;
  47.                  }
  48.                  end2:
  49.                  //設(shè)置狀態(tài)
  50.                  if(SET_Flag)
  51.                  {
  52.                          tempC=time;
  53.                         ss++;
  54.                  }
  55.                  //工作狀態(tài)
  56.                  else
  57.                  {
  58.                          ss=0;
  59.                  }

  60.                  if(ss<=40)
  61.                  {
  62.                     //顯示
  63.                          DigDisplay(tempC);
  64.                  }
  65.                  else if(ss<=60)
  66.                  {
  67.                          GPIO_DIG=0x00;
  68.                         if(ss==60)
  69.                         ss=0;
  70.                  }                 
  71.         }                                                       
  72. }

  73. /*******************************************************************************
  74. * 函 數(shù) 名         : key_scan()
  75. * 函數(shù)功能                   : 溫度調(diào)節(jié)用
  76. * 輸    入         : i
  77. * 輸    出         : 無
  78. *******************************************************************************/
  79. void key_scan()
  80. {
  81.         int i=0;
  82.         int j=0;
  83.         uchar Keydate=0;
  84.         for(j=0;j<9;j++)                                   //循環(huán)進(jìn)行鍵碼解析
  85.         {
  86.                 if(IRCOM[2]==RecvData[j])                       //進(jìn)行鍵位對(duì)應(yīng)
  87.                 {
  88.                         Keydate=IRCOM[2];
  89.                         IRCOM[2]=0;
  90.                         break;
  91.                 }                                      
  92.         }               
  93.         switch(Keydate)
  94.         {
  95.                 case 0x07://-
  96.                 {
  97.                         time -=100;
  98.                         break;
  99.                 }
  100.                 case 0x15://+
  101.                 {
  102.                         time +=100;
  103.                         break;
  104.                 }
  105.                 case 0x09://Set
  106.                 {
  107.                         SET_Flag=~SET_Flag;
  108.                         break;
  109.                 }
  110.         }


  111. }
  112.           
復(fù)制代碼
  1. #include"inf.h"
  2. #include"relay.h"
  3. uchar IRCOM[5];          //用來存放讀取到的紅外值 (IrValue[4])
  4. sbit IRIN=P3^2;   //紅外接收器數(shù)據(jù)接口

  5. //存放按鍵鍵值(NEC紅外協(xié)議)
  6. uchar code  RecvData[]={0x07,0x15,0x09,0x43,0x47,0x0d,0x44,0x40,0x0D,0x0E};


  7. /***********************************************************
  8. *函 數(shù) 名        :InfInit
  9. *函數(shù)功能  :為外部中斷0,做初始化
  10. *函數(shù)參數(shù)  :x
  11. *返 回 值        :無
  12. ************************************************************/
  13. void InfInit()
  14. {
  15.         IT0=1;//下降沿觸發(fā)
  16.         EX0=1;//打開中斷0允許
  17.         EA=1;        //打開總中斷
  18.         IRIN=1;//初始化端口
  19. }


  20. /***********************************************************
  21. *函 數(shù) 名        :delayms
  22. *函數(shù)功能  :延時(shí)0.14ms
  23. *函數(shù)參數(shù)  :x
  24. *返 回 值        :無
  25. ************************************************************/
  26. static void delayms(unsigned char x)                         //0.14mS延時(shí)程序
  27. {
  28.   unsigned char i;                                    //定義臨時(shí)變量
  29.   while(x--)                                          //延時(shí)時(shí)間循環(huán)
  30.   {
  31.     for (i = 0; i<13; i++) {}                         //14mS延時(shí)
  32.   }
  33. }


  34. /***********************************************************
  35. *函 數(shù) 名        :IR_IN
  36. *函數(shù)功能  :外部中斷0
  37. *函數(shù)參數(shù)  :無
  38. *返 回 值        :無
  39. ************************************************************/
  40. void IR_IN() interrupt 0// using 0                      //定義INT2外部中斷函數(shù)
  41. {
  42.   unsigned char j,k,N=0;                              //定義臨時(shí)接收變量
  43.    
  44.   EX0 = 0;                                            //關(guān)閉外部中斷,防止再有信號(hào)到達(dá)   
  45.   delayms(15);                                        //延時(shí)時(shí)間,進(jìn)行紅外消抖
  46.   if (IRIN==1)                                        //判斷紅外信號(hào)是否消失
  47.   {  
  48.      EX0 =1;                                          //外部中斷開
  49.          return;                                          //返回
  50.   }
  51.                            
  52.   while (!IRIN)                                       //等IR變?yōu)楦唠娖剑^9ms的前導(dǎo)低電平信號(hào)。
  53.   {
  54.       delayms(1);                                     //延時(shí)等待
  55.   }

  56.   for (j=0;j<4;j++)                                   //采集紅外遙控器數(shù)據(jù)
  57.   {
  58.     for (k=0;k<8;k++)                                 //分次采集8位數(shù)據(jù)
  59.     {
  60.        while (IRIN)                                   //等 IR 變?yōu)榈碗娖剑^4.5ms的前導(dǎo)高電平信號(hào)。
  61.        {
  62.          delayms(1);                                  //延時(shí)等待
  63.        }
  64.       
  65.        while (!IRIN)                                  //等 IR 變?yōu)楦唠娖?br />
  66.        {
  67.          delayms(1);                                  //延時(shí)等待
  68.        }
  69.    
  70.        while (IRIN)                                   //計(jì)算IR高電平時(shí)長
  71.        {
  72.          delayms(1);                                  //延時(shí)等待
  73.          N++;                                         //計(jì)數(shù)器加加
  74.          if (N>=30)                                   //判斷計(jì)數(shù)器累加值
  75.              {
  76.            EX0=1;                                     //打開外部中斷功能
  77.                return;                                    //返回
  78.          }                  
  79.        }
  80.                                        
  81.       IRCOM[j]=IRCOM[j] >> 1;                         //進(jìn)行數(shù)據(jù)位移操作并自動(dòng)補(bǔ)零
  82.      
  83.       if (N>=8)                                       //判斷數(shù)據(jù)長度
  84.       {
  85.          IRCOM[j] = IRCOM[j] | 0x80;                  //數(shù)據(jù)最高位補(bǔ)1
  86.       }
  87.       N=0;                                            //清零位數(shù)計(jì)錄器
  88.     }
  89.   }
  90.    
  91.   if (IRCOM[2]!=~IRCOM[3])                            //判斷地址碼是否相同
  92.   {
  93.      EX0=1;                                           //打開外部中斷
  94.      return;                                          //返回
  95. ……………………

  96. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
遙控控制、溫度顯示 (最終程序).zip (76.46 KB, 下載次數(shù): 75)


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

使用道具 舉報(bào)

6#
ID:618689 發(fā)表于 2019-10-1 23:46 | 只看該作者
nec協(xié)議相對(duì)簡單一點(diǎn),實(shí)現(xiàn)起來比較容易,可以用IO中斷來處理
回復(fù)

使用道具 舉報(bào)

5#
ID:618124 發(fā)表于 2019-9-30 08:24 | 只看該作者
羅文杰 發(fā)表于 2018-7-29 21:17
那只能說明循跡小車也是抄的

有輪子何必再造
回復(fù)

使用道具 舉報(bào)

地板
ID:61973 發(fā)表于 2018-7-29 21:17 來自觸屏版 | 只看該作者
haogege1014 發(fā)表于 2018-3-9 19:49
請(qǐng)問你知道如何使用遙控功能嗎?自動(dòng)的比如循跡小車我會(huì)做,但是遙控功能的卻不會(huì)

那只能說明循跡小車也是抄的
回復(fù)

使用道具 舉報(bào)

板凳
ID:289186 發(fā)表于 2018-3-31 10:23 | 只看該作者
haogege1014 發(fā)表于 2018-3-9 19:49
請(qǐng)問你知道如何使用遙控功能嗎?自動(dòng)的比如循跡小車我會(huì)做,但是遙控功能的卻不會(huì)

遙控的需要用一個(gè)紅外接收器、和紅外遙控(NEC協(xié)議),就可以實(shí)現(xiàn)的
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:281938 發(fā)表于 2018-3-9 19:49 | 只看該作者
請(qǐng)問你知道如何使用遙控功能嗎?自動(dòng)的比如循跡小車我會(huì)做,但是遙控功能的卻不會(huì)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表