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

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

QQ登錄

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

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

單片機(jī)紅外遙控花樣流水燈(含代碼)仿真電路圖

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
花樣流水燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)由于紅外是無(wú)法仿真的按鍵代替的紅外遙控


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit IR=P3^2;           //將IR位定義為P3.2引腳
  5. sbit key1=P2^0;
  6. sbit key2=P2^1;
  7. sbit key3=P2^2;
  8. sbit key4=P2^3;
  9. sbit key5=P2^4;
  10. sbit key6=P2^5;
  11. sbit key7=P2^6;
  12. sbit key8=P2^7;
  13. unsigned char a[4];    //儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼
  14. unsigned int LowTime,HighTime; //儲(chǔ)存高、低電平的寬度
  15. unsigned char IrValue[6];
  16. unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  17. uchar code Pattern_P0[]=
  18. {
  19. 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,
  20. 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,
  21. 0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,
  22. 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  23. 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,
  24. 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,
  25. 0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,
  26. 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,
  27. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  28. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  29. 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  30. 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,
  31. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33. 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,
  34. 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff
  35. };

  36. uint k=0;
  37. int Time=0;
  38. //延時(shí)
  39. /************************************************************
  40. 函數(shù)功能:對(duì)4個(gè)字節(jié)的用戶碼和鍵數(shù)據(jù)碼進(jìn)行解碼
  41. 說(shuō)明:解碼正確,返回1,否則返回0
  42. 出口參數(shù):dat
  43. *************************************************************/
  44. bit DeCode(void)        
  45. {
  46.    
  47.    unsigned char  i,j;
  48.         unsigned char temp;    //儲(chǔ)存解碼出的數(shù)據(jù)
  49.         for(i=0;i<4;i++)      //連續(xù)讀取4個(gè)用戶碼和鍵數(shù)據(jù)碼
  50.           {
  51.                  for(j=0;j<8;j++)  //每個(gè)碼有8位數(shù)字
  52.                          {
  53.                  temp=temp>>1;  //temp中的各數(shù)據(jù)位右移一位,因?yàn)橄茸x出的是高位數(shù)據(jù)                                                                        
  54.                            TH0=0;         //定時(shí)器清0
  55.                            TL0=0;         //定時(shí)器清0
  56.                            TR0=1;         //開(kāi)啟定時(shí)器T0
  57.                       while(IR==0)   //如果是低電平就等待
  58.                        ;              //低電平計(jì)時(shí)
  59.                              TR0=0;         //關(guān)閉定時(shí)器T0
  60.                            LowTime=TH0*256+TL0;    //保存低電平寬度
  61.                            TH0=0;         //定時(shí)器清0
  62.                            TL0=0;         //定時(shí)器清0
  63.                            TR0=1;         //開(kāi)啟定時(shí)器T0
  64.                            while(IR==1)   //如果是高電平就等待
  65.                                ;                           
  66.                            TR0=0;        //關(guān)閉定時(shí)器T0
  67.                            HighTime=TH0*256+TL0;   //保存高電平寬度
  68.                            if((LowTime<370)||(LowTime>640))
  69.                                               return 0;        //如果低電平長(zhǎng)度不在合理范圍,則認(rèn)為出錯(cuò),停止解碼                        
  70.                            if((HighTime>420)&&(HighTime<620))   //如果高電平時(shí)間在560微秒左右,即計(jì)數(shù)560/1.085=516次
  71.                                    temp=temp&0x7f;       //(520-100=420, 520+100=620),則該位是0
  72.                            if((HighTime>1300)&&(HighTime<1800)) //如果高電平時(shí)間在1680微秒左右,即計(jì)數(shù)1680/1.085=1548次
  73.                                    temp=temp|0x80;       //(1550-250=1300,1550+250=1800),則該位是1
  74.                      }                                      
  75.            a[i]=temp;        //將解碼出的字節(jié)值儲(chǔ)存在a[i]                                                                                                                                                                        
  76.     }                                                   
  77.   if(a[2]=~a[3])  //驗(yàn)證鍵數(shù)據(jù)碼和其反碼是否相等,一般情況下不必驗(yàn)證用戶碼
  78.          return 1;     //解碼正確,返回1
  79. }
  80. void delay(uint t)
  81. {
  82.         uint i;
  83.         while(t--)
  84.         for(i=0;i<120;i++);
  85. }
  86. /************************************************************
  87. 函數(shù)功能:執(zhí)行遙控功能
  88. *************************************************************/
  89. void Function(void)
  90. {
  91.    if(a[2]==0x40)
  92.    {
  93.              k=k+1;
  94.           if(k>=8)k=0;
  95.           a[2]=0;
  96.    }   //對(duì)P1.3引腳取反,控制繼電器的吸合、釋放
  97.   
  98. }
  99. void keyscan()
  100. {
  101. if(key1==0)
  102. {
  103.          delay(1);
  104.         if(key1==0)
  105.         {
  106.                 k=0;
  107.                 while(!key1);
  108.         }
  109. }
  110.   if(key2==0)
  111. {
  112.          delay(1);
  113.         if(key2==0)
  114.         {
  115.                 k=1;
  116.                 while(!key2);
  117.         }
  118. }
  119.   if(key3==0)
  120. {
  121.          delay(1);
  122.         if(key3==0)
  123.         {
  124.                 k=2;
  125.                 while(!key3);
  126.         }
  127. }
  128.   if(key4==0)
  129. {
  130.          delay(1);
  131.         if(key4==0)
  132.         {
  133.                 k=3;
  134.                 while(!key4);
  135.         }
  136. }
  137.   if(key5==0)
  138. {
  139.          delay(1);
  140.         if(key5==0)
  141.         {
  142.                 k=4;
  143.                 while(!key5);
  144.         }
  145. }
  146.   if(key6==0)
  147. {
  148.          delay(1);
  149.         if(key6==0)
  150.         {
  151.                 k=5;
  152.                 while(!key6);
  153.         }
  154. }
  155.   if(key7==0)
  156. {
  157.          delay(1);
  158.         if(key7==0)
  159.         {
  160.                 k=6;
  161.                 while(!key7);
  162.         }
  163. }
  164.   if(key8==0)
  165. {
  166.          delay(1);
  167.         if(key8==0)
  168.         {
  169.                 k=7;
  170.                 while(!key8);
  171.         }
  172. }
  173. }


  174. //主程序
  175. void main()
  176. {
  177.    uchar i;
  178.    EA=1;        //開(kāi)啟總中斷
  179.    EX0=1;       //開(kāi)外中斷0
  180.    ET0=1;       //定時(shí)器T0中斷允許
  181.    IT0=1;       //外中斷的下降沿觸發(fā)  
  182.         TMOD=0x01;   //使用定時(shí)器T0的模式1
  183.         TR0=0;       //定時(shí)器T0關(guān)閉
  184.         while(1)
  185.         {        //從數(shù)組中讀取數(shù)據(jù)送至P0和P2口顯示
  186.                
  187.                 for(i=k*8;i<k*8+8;i++)
  188.                 {        
  189.                  keyscan();
  190.                         P0=Pattern_P0[i];
  191.                         P1=Tab[k+1];
  192.                         delay(100);
  193.                 }
  194.         }
  195. }
  196. /************************************************************
  197. 函數(shù)功能:紅外線觸發(fā)的外中斷處理函數(shù)
  198. *************************************************************/
  199. void Int0(void) interrupt 0 using 0
  200.   {
  201.      EX0=0;      //關(guān)閉外中斷0,不再接收二次紅外信號(hào)的中斷,只解碼當(dāng)前紅外信號(hào)
  202.           TH0=0;      //定時(shí)器T0的高8位清0
  203.           TL0=0;      //定時(shí)器T0的低8位清0
  204.           TR0=1;            //開(kāi)啟定時(shí)器T0         
  205.           while(IR==0)          //如果是低電平就等待,給引導(dǎo)碼低電平計(jì)時(shí)
  206.                ;     
  207.           TR0=0;                //關(guān)閉定時(shí)器T0     
  208.           LowTime=TH0*256+TL0;  //保存低電平時(shí)間
  209.           TH0=0;      //定時(shí)器T0的高8位清0
  210.           TL0=0;      //定時(shí)器T0的低8位清0
  211.           TR0=1;            //開(kāi)啟定時(shí)器T0
  212.           while(IR==1)  //如果是高電平就等待,給引導(dǎo)碼高電平計(jì)時(shí)
  213.             ;
  214.           TR0=0;        //關(guān)閉定時(shí)器T0
  215.           HighTime=TH0*256+TL0;        //保存引導(dǎo)碼的高電平長(zhǎng)度
  216.      if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700))
  217.                  {
  218.                     //如果是引導(dǎo)碼,就開(kāi)始解碼,否則放棄,引導(dǎo)碼的低電平計(jì)時(shí)
  219.                //次數(shù)=9000us/1.085=8294, 判斷區(qū)間:8300-500=7800,8300+500=8800.
  220.                if(DeCode()==1)        
  221.                      Function();           //如果滿足條件,執(zhí)行遙控功能
  222.                  }
  223.           EX0=1;   //開(kāi)啟外中斷EX0
  224.   }
復(fù)制代碼

所有資料51hei提供下載:
花樣流水燈.zip (73.9 KB, 下載次數(shù): 134)


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

使用道具 舉報(bào)

沙發(fā)
ID:112386 發(fā)表于 2018-6-21 10:18 | 只看該作者
受教了
回復(fù)

使用道具 舉報(bào)

板凳
ID:363249 發(fā)表于 2018-7-4 16:05 | 只看該作者
你好,問(wèn)什么進(jìn)行紅外遙控的時(shí)候,按鍵并沒(méi)有反應(yīng)。仿真倒是沒(méi)問(wèn)題
回復(fù)

使用道具 舉報(bào)

地板
ID:363249 發(fā)表于 2018-7-4 16:06 | 只看該作者

你好,你能進(jìn)行紅外遙控嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:89286 發(fā)表于 2018-7-4 20:51 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報(bào)

6#
ID:251357 發(fā)表于 2018-9-26 10:03 | 只看該作者
看看學(xué)習(xí)了,還在為論文的事發(fā)愁呢
回復(fù)

使用道具 舉報(bào)

7#
ID:455251 發(fā)表于 2018-12-28 16:38 | 只看該作者
謝謝分享,能再敘述一下如何用紅外遙控器調(diào)試嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:454543 發(fā)表于 2018-12-29 10:45 | 只看該作者
你好,進(jìn)行了仿真實(shí)驗(yàn),在單片機(jī)上也可以進(jìn)行按鍵操作,為什么無(wú)法用紅外遙控操作
回復(fù)

使用道具 舉報(bào)

9#
無(wú)效樓層,該帖已經(jīng)被刪除
10#
ID:462953 發(fā)表于 2019-1-6 12:40 | 只看該作者
的和客觀環(huán)境 發(fā)表于 2018-12-29 10:45
你好,進(jìn)行了仿真實(shí)驗(yàn),在單片機(jī)上也可以進(jìn)行按鍵操作,為什么無(wú)法用紅外遙控操作

你好 能不能發(fā)一份壓縮包呢 謝謝 1752519246@q.com
回復(fù)

使用道具 舉報(bào)

11#
ID:468666 發(fā)表于 2019-1-15 17:20 | 只看該作者
設(shè)計(jì)抽到單片機(jī),學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

12#
ID:511591 發(fā)表于 2019-4-13 23:38 | 只看該作者
學(xué)習(xí)中,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

13#
ID:541423 發(fā)表于 2019-5-18 15:18
[img]file:///C:\Users\il\AppData\Roaming\Tencent\Users\815855652\TIM\WinTemp\RichOle\@YI~_)S7}LI@Z[8LJ]Q]Q0C.png[/img]

14#
ID:541423 發(fā)表于 2019-5-18 15:20 | 只看該作者
這個(gè)有兩處錯(cuò)誤誒
回復(fù)

使用道具 舉報(bào)

15#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

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