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

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

QQ登錄

只需一步,快速開始

搜索
查看: 1624|回復(fù): 1
上一主題 下一主題
收起左側(cè)

單片機(jī)紅外遠(yuǎn)程遙控電扇模塊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:682247 發(fā)表于 2020-1-6 16:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
可用遙控器控制的電風(fēng)扇程序,求大神指點(diǎn)。

單片機(jī)源程序如下:
  1. /*
  2. 實(shí)驗(yàn)說(shuō)明:
  3.         根據(jù)自己使用的LCD1602是否帶有轉(zhuǎn)接板,如果帶有轉(zhuǎn)接板的即為4位,需在LCD.H頭文件中
  4.         將宏#define LCD1602_4PINS打開,我們這里使用的LCD1602是8位,所以默認(rèn)將該宏注釋。
  5. 實(shí)驗(yàn)接線:
  6.         1,LCD1602液晶模塊-->單片機(jī)管腳
  7.         參考LCD1602液晶顯示實(shí)驗(yàn)接線(開發(fā)攻略內(nèi)在對(duì)應(yīng)的實(shí)驗(yàn)章節(jié)內(nèi)實(shí)驗(yàn)現(xiàn)象有接線說(shuō)明)
  8.         2,紅外接收模塊-->單片機(jī)管腳
  9.         參考紅外遙控實(shí)驗(yàn)接線(開發(fā)攻略內(nèi)在對(duì)應(yīng)的實(shí)驗(yàn)章節(jié)內(nèi)實(shí)驗(yàn)現(xiàn)象有接線說(shuō)明)
  10.         3,直流電機(jī)模塊-->單片機(jī)管腳
  11.         IN1-->P10(參考直流電機(jī)實(shí)驗(yàn)接線)
  12.        
  13. 實(shí)驗(yàn)現(xiàn)象:
  14.         LCD1602顯示遙控器鍵值,并且顯示電機(jī)狀態(tài)(ON/OFF),通過(guò)按第一個(gè)按鍵可以控制馬達(dá)的啟動(dòng)和停止
  15. */


  16. #include<reg51.h>
  17. #include"lcd.h"

  18. typedef unsigned char uint8;
  19. typedef unsigned int uint16;


  20. sbit moto=P1^0;

  21. uint8 d1[8]=" RED IR ";
  22. uint8 d2[12]="MOTO STATE: ";
  23. uint8 num[16]="0123456789ABCDEF";

  24. uint8 irtime;          //接收時(shí)間
  25. uint8 startflag;  //開始檢測(cè)
  26. uint8 bitnum;          //bit位數(shù)
  27. uint8 irdata[33]; //寄存沒(méi)有個(gè)bit的時(shí)間
  28. uint8 irreceok;          //接收完成標(biāo)志位
  29. uint8 ircode[4];  //將接收的四個(gè)字節(jié)數(shù)據(jù)保存
  30. uint8 irprosok;          //接收數(shù)據(jù)處理標(biāo)志位
  31. uint8 irdisp[8];  //將四個(gè)字節(jié)的16進(jìn)制通過(guò)轉(zhuǎn)換變成十進(jìn)制存儲(chǔ)
  32. uint8 dat1,dat2;
  33. uint8 keynum;
  34. uint8 motoflag;
  35. void delay(uint16 i)
  36. {
  37.         while(i--);
  38. }
  39. void lcdwrc(uint8 c)
  40. {
  41.         LcdWriteCom(c);
  42. }
  43. void lcdwrd(uint8 dat)
  44. {
  45.         LcdWriteData(dat);       
  46. }
  47. void lcd_init()
  48. {
  49.         LcdInit();
  50. }
  51. void int0init()
  52. {
  53.         EA=1;
  54.         EX0=1;
  55.         IT0=1;
  56. }
  57. void time0init()
  58. {
  59.         TMOD=0X02;        //設(shè)置定時(shí)器0模式2.該模式為自動(dòng)裝載模式
  60.         TH0=0X00;
  61.         TL0=0X00;//設(shè)定計(jì)數(shù)初值,每當(dāng)TL0計(jì)數(shù)到255時(shí),TH0將把自己的數(shù)據(jù)給TL0,又重新計(jì)數(shù)
  62.         TR0=1;
  63.         ET0=1;
  64.         EA=1;       
  65. }
  66. void irpros() //紅外接收數(shù)據(jù)處理 ,區(qū)分是數(shù)據(jù)0還是1
  67. {
  68.         uint8 i,j,value;
  69.         uint8 k=1;        //引導(dǎo)碼去掉,所以令k=1;
  70.         for(j=0;j<4;j++)  //取出了一幀數(shù)據(jù)中的四個(gè)字節(jié)數(shù)據(jù)
  71.         {
  72.                 for(i=0;i<8;i++)        //取出了一個(gè)字節(jié)的數(shù)據(jù)               
  73.                 {
  74.                         value>>=1;
  75.                         if(irdata[k]>6)
  76.                         {
  77.                                 value=value|0x80;
  78.                         }
  79.                         k++;
  80.                 }
  81.                 ircode[j]=value;
  82.         }
  83.         irprosok=1;
  84. }
  85. void irwork()  //將四個(gè)字節(jié)的數(shù)據(jù)轉(zhuǎn)換成10進(jìn)制數(shù)顯示
  86. {
  87.         irdisp[0]=ircode[0]/16;//顯示高位
  88.         irdisp[1]=ircode[0]%16;//顯示低位  
  89.         irdisp[2]=ircode[1]/16;
  90.         irdisp[3]=ircode[1]%16;         //同一個(gè)遙控器此2個(gè)字節(jié)的引導(dǎo)碼數(shù)據(jù)是不會(huì)改變的,改變的只是數(shù)據(jù)碼及反碼
  91.         irdisp[4]=ircode[2]/16;
  92.         irdisp[5]=ircode[2]%16;
  93.         irdisp[6]=ircode[3]/16;
  94.         irdisp[7]=ircode[3]%16;
  95.         dat1=irdisp[4];
  96.         dat2=irdisp[5];
  97.         keynum++;
  98. }
  99. void display()
  100. {
  101.         uint8 i;
  102.         lcdwrc(0x00+0x80);
  103.         for(i=0;i<8;i++)
  104.         {
  105.                 lcdwrd(d1[i]);
  106.         }       
  107.         for(i=4;i<6;i++)
  108.         {
  109.                 lcdwrd(num[irdisp[i]]);
  110.         }
  111.         lcdwrc(0x40+0x80);
  112.         for(i=0;i<12;i++)
  113.         {
  114.                 lcdwrd(d2[i]);
  115.         }
  116.         if(motoflag==1)                        //馬達(dá)狀態(tài)顯示
  117.         {
  118.                 lcdwrd('O');
  119.                 lcdwrd('N');
  120.                 lcdwrd(' ');
  121.         }
  122.         else
  123.         {
  124.                 lcdwrd('O');
  125.                 lcdwrd('F');
  126.                 lcdwrd('F');       
  127.         }
  128. }
  129. void motopros()
  130. {
  131.         if((dat1==4)&&(dat2==5)&&(keynum==1))  //按下第一次按鍵開馬達(dá)
  132.         {                       
  133.                 dat1=0;
  134.                 dat2=0;
  135.                 motoflag=1;
  136.                 moto=1;                                               
  137.         }
  138.                        
  139.         if((dat1==4)&&(dat2==5)&&(keynum>=2))        //按下第二次此按鍵時(shí)關(guān)閉馬達(dá)
  140.         {
  141.                 dat1=0;
  142.                 dat2=0;
  143.                 keynum=0;
  144.                 motoflag=0;
  145.                 moto=0;                       
  146.         }                               
  147. }
  148. void main()
  149. {
  150.         moto=0;       
  151.         lcd_init();
  152.         int0init();
  153.         time0init();
  154.         while(1)
  155.         {
  156.                 if(irreceok)
  157.                 {
  158.                         irreceok=0;
  159.                         irpros();
  160.                         if(irprosok)
  161.                         {
  162.                                 irwork();
  163.                         }
  164.                 }
  165.                 motopros();
  166.                 display();
  167.         }               
  168. }
  169. void time0() interrupt 1
  170. {
  171.         irtime++;//每進(jìn)來(lái)一次就說(shuō)明定時(shí)時(shí)間為256us;       
  172. }
  173. void init0() interrupt 0
  174. {
  175.         if(startflag)
  176.         {
  177.                 if(irtime>32)//檢測(cè)引導(dǎo)碼,求法是用引導(dǎo)碼時(shí)間除以一次計(jì)數(shù)時(shí)間,看看要多少次
  178.                 {
  179.                         bitnum=0;       
  180.                 }
  181.                 irdata[bitnum]=irtime;
  182.                 irtime=0;
  183.                 bitnum++;
  184.                 if(bitnum==33)
  185.                 {
  186.                         bitnum=0;
  187.                         irreceok=1;//一幀紅外數(shù)據(jù)接收完成標(biāo)志
  188.                 }
  189.         }
  190.         else
  191.         {
  192.                 startflag=1;//將開始標(biāo)志位置1,等到下次進(jìn)入中斷即可進(jìn)入if語(yǔ)句
  193.                 irtime=0;//將開始之前的計(jì)數(shù)器時(shí)間清零。等到下次進(jìn)入中斷的時(shí)候才是引導(dǎo)碼真正的時(shí)間
  194.         }
  195. }
復(fù)制代碼

所有資料51hei提供下載:
遙控電扇.zip (26.1 KB, 下載次數(shù): 6)

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

使用道具 舉報(bào)

沙發(fā)
ID:648281 發(fā)表于 2020-1-7 20:01 | 只看該作者
你好!你這是要問(wèn)什么?指點(diǎn)什么?給你一個(gè)學(xué)習(xí)型紅外模塊的資料看看

http://www.zg4o1577.cn/bbs/dpj-174569-1.html
回復(fù)

使用道具 舉報(bào)

板凳
ID:480256 發(fā)表于 2020-3-1 12:21
我最近也在寫這個(gè) 可以正常運(yùn)行了,加我QQ 839162787

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久图片 | 成人欧美一区二区三区色青冈 | 久久婷婷麻豆国产91天堂 | 日韩中文字幕在线播放 | 日日夜夜影院 | 日韩一区二 | 国产精品美女久久久久aⅴ国产馆 | 国产成人精品a视频一区www | 日日爱视频 | 日韩在线免费电影 | 狠狠的日 | 国产精品亚洲精品久久 | 国产999精品久久久 日本视频一区二区三区 | 久久99视频 | 婷婷在线免费 | 欧美色综合天天久久综合精品 | 天天操天天干天天爽 | 久久精品国产一区二区三区不卡 | 久久久久无码国产精品一区 | 日韩免费av一区二区 | 亚洲码欧美码一区二区三区 | 国产精品免费一区二区三区四区 | 天天摸天天干 | 久在线视频 | 中文字幕在线一区 | 免费亚洲成人 | 欧美亚洲一区二区三区 | 免费xxxx大片国产在线 | 在线看91 | 亚洲午夜视频 | 亚洲视频二区 | 欧美日日 | 在线观看成人小视频 | av在线电影网站 | 在线观看免费国产 | 中国三级黄色录像 | 精品国产免费一区二区三区五区 | 亚洲一区二区三区在线播放 | 亚洲一区欧美一区 | 国产精品区一区二区三 | 免费视频二区 |