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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

51單片機的紅外遙控接收程序 為什么接收端沒有顯示?

查看數: 2555 | 評論數: 10 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-11-20 14:16

正文摘要:

接收程序#include<AT89X51.h>#define uchar unsigned char#define uint unsigned intuchar data    IRcode[4];   //定義一個4字節的數組用來存儲代碼uchar     CodeTem ...

回復

ID:1056229 發表于 2022-12-7 12:07
sbit led8=P1^7   <——缺點什么
ID:1055814 發表于 2022-12-6 13:24


sbit led8=P1^7   <————缺一點什么
ID:1055814 發表于 2022-12-6 13:24
sbit led8=P1^7   <——   缺了一點什么
ID:931877 發表于 2022-11-20 22:47
  1. #include <at89c51.h>
  2. #include <intrins.h>
  3. #define uchar  unsigned char
  4. #define uint   unsigned int
  5. # define _BV(bit) (1<<(bit))
  6. sbit k1=P2^0;
  7. sbit k2=P2^1;
  8. sbit k3=P2^2;
  9. sbit k4=P2^3;
  10. sbit k5=P2^4;
  11. sbit k6=P2^5;
  12. sbit k7=P2^6;
  13. sbit k8=P2^7;
  14. sbit out=P3^7;
  15. static bit OP;        //紅外發射管的亮滅
  16. static unsigned int count;       //延時計數器
  17. static unsigned int endcount; //終止延時計數
  18. static unsigned char Flag;      //紅外發送標志
  19. char iraddr1;  //十六位地址的第一個字節
  20. char iraddr2;  //十六位地址的第二個字節
  21. void SendIRdata(char p_irdata);
  22. uchar t=16;
  23. uchar CODE=0Xff;
  24. void delay_LCM(uint);  //LCD延時子程序
  25. /*********延時K*1ms,12.000mhz**********/
  26. void delay_LCM(uint k)
  27. {
  28.     uint i,j;
  29.     for(i=0;i<k;i++)
  30.     {
  31.         for(j=0;j<60;j++)
  32.                 {;}
  33.     }
  34. }
  35. void key()
  36. {
  37. if(k1==0)// 開
  38. {
  39.   delay_LCM(5);
  40.   if(k1==0)
  41.   {
  42.    SendIRdata(1);
  43.                         P0=1;
  44.    while(k1==0);
  45.   }
  46. }
  47.   if(k2==0)// 開
  48. {
  49.   delay_LCM(5);
  50.   if(k2==0)
  51.   {
  52. SendIRdata(2);
  53.                         P0=2;
  54.    while(k2==0);
  55.   }
  56. }
  57. if(k3==0)// 開
  58. {
  59.   delay_LCM(5);
  60.   if(k3==0)
  61.   {
  62. SendIRdata(3);
  63.                         P0=3;
  64.    while(k3==0);
  65.   }
  66. }
  67.   if(k4==0)// 開
  68. {
  69.   delay_LCM(5);
  70.   if(k4==0)
  71.   {
  72.    SendIRdata(4);
  73.                         P0=4;
  74.    while(k4==0);
  75.   }
  76. }
  77. if(k5==0)// 開
  78. {
  79.   delay_LCM(5);
  80.   if(k5==0)
  81.   {
  82.    SendIRdata(5);
  83.                         P0=5;
  84.    while(k5==0);
  85.   }
  86. }

  87.   if(k6==0)// 開
  88. {
  89.   delay_LCM(5);
  90.   if(k6==0)
  91.   {
  92.                         SendIRdata(6);
  93.                         P0=6;
  94.    while(k6==0);
  95.   }
  96. }

  97.   if(k7==0)// 開
  98. {
  99.   delay_LCM(5);
  100.   if(k7==0)
  101.   {
  102.    SendIRdata(7);
  103.                         P0=7;
  104.    while(k7==0);
  105.   }
  106. }
  107. if(k8==0)// 開
  108. {
  109.   delay_LCM(5);
  110.   if(k8==0)
  111.   {
  112.    SendIRdata(8);
  113.                         P0=8;
  114.    while(k8==0);
  115.   }
  116. }
  117. }      //定時器0中斷處理
  118. void timeint(void) interrupt 1
  119. {
  120.   TH0=0xFF;
  121.   TL0=0xe6; //設定時值為38K 也就是每隔26us中斷一次
  122.   count++;
  123. }      //定時器1中斷處理
  124. void time1(void) interrupt 3
  125. {
  126. out=!out;
  127. }
  128. void SendIRdata(char p_irdata)
  129. {
  130.   int i;
  131.   char irdata=p_irdata;         //發送9ms的起始碼
  132.   endcount=74;
  133.   Flag=1;
  134.   count=0;
  135.   out=0;
  136.         TR1=1;
  137.   do{}while(count<endcount);
  138.         TR1=0;
  139.         out=1;        //發送4.5ms的結果碼
  140.                  //endcount=117;
  141.                  //Flag=0;
  142.                  //count=0;
  143.                  //out=1;
  144.                  //do{}while(count<endcount);
  145. endcount=25;
  146.      Flag=1;
  147.      count=0;
  148.             out=1;       //TR1=1;
  149.      do{}while(count<endcount);     //發送八位數據
  150. //irdata=~p_irdata;
  151.   for(i=0;i<irdata;i++)
  152.   {
  153.      endcount=25;
  154.      Flag=1;
  155.      count=0;
  156.             out=0;
  157.                    TR1=1;
  158.      do{}while(count<endcount);
  159.                           TR1=0;
  160.                    out=1;
  161. endcount=25;
  162.      Flag=1;
  163.      count=0;
  164.             out=1;
  165.                    //TR1=1;
  166.      do{}while(count<endcount);
  167.                           }
  168. }
  169. main()
  170. {
  171.   count = 0;
  172.   Flag = 0;
  173.   OP = 0;
  174.   out = 1;
  175.   EA = 1; //允許CPU中斷
  176.   TMOD = 0x21; //設定時器0和1為16位模式1
  177.   ET0 = 1; //定時器0中斷允許
  178. P1=0xff;
  179.   TH0 = 0xFF;
  180.   TL0 = 0xE6; //設定時值0為38K 也就是每隔26us中斷一次  
  181.   TR0 = 1;//開始計數
  182. TH1 = 256-13;
  183.   TL1 = 256-13; //設定時值0為38K 也就是每隔26us中斷一次
  184.         ET1 = 1; //定時器1中斷允許
  185.                 //TR1 = 1;
  186. //定時器1中斷允許
  187. iraddr1=0x00;
  188. iraddr2=0x00;
  189.   while(1)
  190. {
  191.   key();
  192.         //P2=CODE=P1;
  193. //delay_LCM(100);
  194.          //SendIRdata(CODE);
  195. }
  196. }
復制代碼
ID:931877 發表于 2022-11-20 22:45
51hei**1140 發表于 2022-11-20 20:53
1、晶振用的多少,是否合適
2、收發程序都發上來
3、用示波器觀察波形,是怎樣波形

晶振用的都是38KHZ  發射程序也放上來了  人都要麻了  發射那里波形出來  然后接收模塊都不動的
ID:648281 發表于 2022-11-20 20:53
1、晶振用的多少,是否合適
2、收發程序都發上來
3、用示波器觀察波形,是怎樣波形
ID:34149 發表于 2022-11-20 19:41
應該是解碼環節出了問題。NEC編解碼有點復雜。
但是你用單片機寫發送碼,哪跟編碼還有一定關系。
編解碼要一致。
我沒有仔細研究過代碼,但就這是這個思路。
ID:931877 發表于 2022-11-20 19:24
taotie 發表于 2022-11-20 15:19
看看這語句末尾
sbit led8=P1^7

有點不太理解
ID:342822 發表于 2022-11-20 15:19
看看這語句末尾
sbit led8=P1^7   <————       缺點什么?????
ID:931877 發表于 2022-11-20 14:36
對于這個網上找了很久了   有點頭大了

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表