欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2143|回復(fù): 0
收起左側(cè)

單片機(jī)控制的紅外流水燈源程序

[復(fù)制鏈接]
ID:358436 發(fā)表于 2018-6-25 16:14 | 顯示全部樓層 |閱讀模式
52紅外流水燈
034039hr2f121ox222or1q.png
  1.                              /*NEC協(xié)議紅外通信
  2.     單片機(jī)解碼后通過(guò)串口以9600的比特率發(fā)送出去
  3.     */
  4.     #include <reg52.h>
  5.     /*====================================
  6.     自定義類(lèi)型名
  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;     //定義紅外脈沖數(shù)據(jù)接口        外部中斷O輸入口

  16.     uchar IRtime;//儲(chǔ)存檢測(cè)紅外高低電平持續(xù)時(shí)間
  17.     uchar IRcord[4];//儲(chǔ)存解碼后的4個(gè)字節(jié)數(shù)據(jù)
  18.     uchar IRdata[33];//包含起始碼在內(nèi)的33位數(shù)據(jù)
  19.     bit IRpro_ok;//解碼后4個(gè)字節(jié)數(shù)據(jù)接收完成標(biāo)志位
  20.     bit IRok;//33位數(shù)據(jù)接收完成標(biāo)志
  21.     //初始化定時(shí)器0,外部中斷0
  22.     void init()
  23.     {
  24.             TMOD|=0x02;//設(shè)置定時(shí)器0工作模式2,8位自動(dòng)重裝
  25.             TL0=TH0=0;//初始化定時(shí)器0寄存器,定時(shí)器0溢出一次時(shí)間為256個(gè)機(jī)器周期
  26.             EA=1;//開(kāi)總中斷
  27.             ET0=1;//開(kāi)定時(shí)器0中斷
  28.             TR0=1;//啟動(dòng)定時(shí)器0
  29.            
  30.             IT0=1;//設(shè)置外部中斷0跳變沿觸發(fā)方式
  31.             EX0=1;//開(kāi)外部中斷0中斷
  32.            
  33.     }
  34.     //定時(shí)器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;//靜態(tài)變量用于存入33次數(shù)據(jù)計(jì)數(shù)
  43.             static bit startflag;//開(kāi)始儲(chǔ)存脈寬標(biāo)志位
  44.             if(startflag)
  45.             {
  46.                     /*判斷引導(dǎo)碼,如果是引導(dǎo)碼則從起始碼開(kāi)始存*/
  47.                     if((IRtime<53)&&(IRtime>=32)) i=0;
  48.                     IRdata[i]=IRtime;  //以TO溢出的次數(shù)來(lái)計(jì)算脈寬把這個(gè)時(shí)間存放在數(shù)組中
  49.                     IRtime=0;  //計(jì)數(shù)清零
  50.                     i++;//計(jì)數(shù)脈寬存入次數(shù)自加
  51.                     if(i==33)  //i等于33那么就表示已經(jīng)存入了33次脈寬
  52.                     {
  53.                             IRok=1;  //脈寬檢查完成
  54.                             i=0; //把脈寬計(jì)數(shù)清零準(zhǔn)備下次存入
  55.                     }
  56.             }
  57.             else
  58.             {
  59.                     IRtime=0;//定時(shí)器0計(jì)數(shù)清零
  60.                     startflag=1;//開(kāi)始處理標(biāo)志位置1
  61.             }
  62.     }
  63.     void IRcordpro()
  64.     {
  65.             uchar i;//i是用于計(jì)數(shù)處理4個(gè)字節(jié)
  66.             uchar j;//j用于計(jì)數(shù)處理1個(gè)字節(jié)的8位數(shù)據(jù)
  67.             uchar k;//k用于計(jì)數(shù)處理33次脈寬
  68.             k = 1;//從第一位脈寬開(kāi)始處理,丟掉起始碼
  69.             for(i=0;i<4;i++)
  70.             {
  71.                     for(j=0;j<8;j++)
  72.                     {
  73.                             //如果脈寬大于數(shù)據(jù)0標(biāo)準(zhǔn)的1125us那么就判定為數(shù)據(jù)1
  74.                             if(IRdata[k]>5)  IRcord[i]|=0x80;//寫(xiě)1
  75.                             //只能右移7次,如果右移8次則會(huì)把第一位數(shù)據(jù)移出去
  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();//根據(jù)脈寬解碼出4個(gè)字節(jié)的數(shù)據(jù)
  90.                             IRok=0;//清零脈寬檢查完成標(biāo)志位等待下一次脈寬檢查
  91.                             if(IRpro_ok)//判斷解碼完成,4個(gè)字節(jié)數(shù)據(jù)
  92.                             {
  93.                                     if(IRcord[2] == 0x45)
  94.                                             P1 = 0xfe;  //數(shù)據(jù)碼,低電平,開(kāi)鎖      
  95.                                     else
  96.                                             P1 = 0x01;          //數(shù)據(jù)反碼,高電平
  97.                                     IRpro_ok=0;//清零解碼標(biāo)志位
  98.                             }
  99.                     }
  100.             }
  101.     }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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