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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1918|回復: 0
收起左側

單片機控制的紅外流水燈源程序

[復制鏈接]
ID:358436 發表于 2018-6-25 16:14 | 顯示全部樓層 |閱讀模式
52紅外流水燈
034039hr2f121ox222or1q.png
  1.                              /*NEC協議紅外通信
  2.     單片機解碼后通過串口以9600的比特率發送出去
  3.     */
  4.     #include <reg52.h>
  5.     /*====================================
  6.     自定義類型名
  7.     ====================================*/
  8.     typedef unsigned char INT8U;
  9.     typedef unsigned char uchar;

  10.     typedef unsigned int INT16U;
  11.     typedef unsigned int uint;
  12.     /*====================================
  13.     硬件接口位聲明
  14.     ====================================*/
  15.     sbit IR  = P3^2;     //定義紅外脈沖數據接口        外部中斷O輸入口

  16.     uchar IRtime;//儲存檢測紅外高低電平持續時間
  17.     uchar IRcord[4];//儲存解碼后的4個字節數據
  18.     uchar IRdata[33];//包含起始碼在內的33位數據
  19.     bit IRpro_ok;//解碼后4個字節數據接收完成標志位
  20.     bit IRok;//33位數據接收完成標志
  21.     //初始化定時器0,外部中斷0
  22.     void init()
  23.     {
  24.             TMOD|=0x02;//設置定時器0工作模式2,8位自動重裝
  25.             TL0=TH0=0;//初始化定時器0寄存器,定時器0溢出一次時間為256個機器周期
  26.             EA=1;//開總中斷
  27.             ET0=1;//開定時器0中斷
  28.             TR0=1;//啟動定時器0
  29.            
  30.             IT0=1;//設置外部中斷0跳變沿觸發方式
  31.             EX0=1;//開外部中斷0中斷
  32.            
  33.     }
  34.     //定時器0中斷,每中斷一次需要256*1.085us =  277.76us
  35.     void time0() interrupt 1
  36.     {
  37.             IRtime++;  //277.76us
  38.     }
  39.     //外部中斷0 存入33次脈寬
  40.     void int0() interrupt 0
  41.     {
  42.             static uchar i;//靜態變量用于存入33次數據計數
  43.             static bit startflag;//開始儲存脈寬標志位
  44.             if(startflag)
  45.             {
  46.                     /*判斷引導碼,如果是引導碼則從起始碼開始存*/
  47.                     if((IRtime<53)&&(IRtime>=32)) i=0;
  48.                     IRdata[i]=IRtime;  //以TO溢出的次數來計算脈寬把這個時間存放在數組中
  49.                     IRtime=0;  //計數清零
  50.                     i++;//計數脈寬存入次數自加
  51.                     if(i==33)  //i等于33那么就表示已經存入了33次脈寬
  52.                     {
  53.                             IRok=1;  //脈寬檢查完成
  54.                             i=0; //把脈寬計數清零準備下次存入
  55.                     }
  56.             }
  57.             else
  58.             {
  59.                     IRtime=0;//定時器0計數清零
  60.                     startflag=1;//開始處理標志位置1
  61.             }
  62.     }
  63.     void IRcordpro()
  64.     {
  65.             uchar i;//i是用于計數處理4個字節
  66.             uchar j;//j用于計數處理1個字節的8位數據
  67.             uchar k;//k用于計數處理33次脈寬
  68.             k = 1;//從第一位脈寬開始處理,丟掉起始碼
  69.             for(i=0;i<4;i++)
  70.             {
  71.                     for(j=0;j<8;j++)
  72.                     {
  73.                             //如果脈寬大于數據0標準的1125us那么就判定為數據1
  74.                             if(IRdata[k]>5)  IRcord[i]|=0x80;//寫1
  75.                             //只能右移7次,如果右移8次則會把第一位數據移出去
  76.                             if(j<7)  IRcord[i]>>=1;
  77.                             k++;  //處理下一次脈寬
  78.                     }
  79.             }
  80.             IRpro_ok=1;//解碼完成
  81.     }
  82.     void main()
  83.     {
  84.             init(); //初始化
  85.             while(1)
  86.             {
  87.                     if(IRok)//判斷33次脈寬是否提取完成
  88.                     {
  89.                             IRcordpro();//根據脈寬解碼出4個字節的數據
  90.                             IRok=0;//清零脈寬檢查完成標志位等待下一次脈寬檢查
  91.                             if(IRpro_ok)//判斷解碼完成,4個字節數據
  92.                             {
  93.                                     if(IRcord[2] == 0x45)
  94.                                             P1 = 0xfe;  //數據碼,低電平,開鎖      
  95.                                     else
  96.                                             P1 = 0x01;          //數據反碼,高電平
  97.                                     IRpro_ok=0;//清零解碼標志位
  98.                             }
  99.                     }
  100.             }
  101.     }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人高清视频在线观看 | 国产精品久久国产精品久久 | 成人午夜免费在线视频 | 黄色在线播放视频 | 一级片av | 可以看黄的视频 | 亚洲成av人片在线观看 | 中文字幕一区二区三区不卡在线 | 日韩中文一区二区三区 | 亚洲精品久久区二区三区蜜桃臀 | 福利一区二区在线 | 欧美在线视频二区 | 放个毛片看看 | 亚洲国产精品久久 | 谁有毛片 | 精品久久久久久红码专区 | 久久er99热精品一区二区 | 亚洲一区二区久久久 | 欧美aⅴ | 天天综合永久 | 中文字幕亚洲在线 | 极品粉嫩国产48尤物在线播放 | 日韩另类 | 国产精品九九视频 | jlzzjlzz国产精品久久 | 给我免费的视频在线观看 | 欧美成人一区二区三区 | 日韩精品成人在线 | 国产99在线 | 欧美 | 2018中文字幕第一页 | 激情网站| 亚洲一区二区三区四区五区午夜 | 欧美成视频 | 久久一级 | 欧美成人h版在线观看 | 成人精品鲁一区一区二区 | 亚洲视频在线一区 | 四虎永久免费在线 | 91免费视频观看 | 欧美日韩在线观看视频 | 亚洲欧美在线观看 |