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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2290|回復: 10
收起左側

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

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:931877 發表于 2022-11-20 14:16 | 顯示全部樓層 |閱讀模式
接收程序
#include<AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data    IRcode[4];   //定義一個4字節的數組用來存儲代碼
uchar     CodeTemp;     //編碼字節緩存變量
uchar     i,j,k;    //延時用的循環變量
uchar     dat=0;
uchar     num;
uint time;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7
sbit     IRsignal=P3^2;   //HS0038接收頭OUT端直接連P3.2(INT0)
void delay(uint z);
void delay(uint z)
{
   uint a,b;
   for(a=z;a>0;a--)
     for(b=120;b>0;b--);
}
/**************************延時0.9ms子程序**********************/
void Delay0_9ms(void)
{uchar j,k;
     for(j=18;j>0;j--)
       for(k=20;k>0;k--) ;
}
/***************************延時1ms子程序**********************/
void Delay1ms(void)
{uchar i,j;
   for(i=2;i>0;i--)
      for(j=230;j>0;j--) ;
}
/***************************延時4.5ms子程序**********************/
void Delay4_5ms(void)
{uchar i,j;
     for(i=10;i>0;i--)
      for(j=225;j>0;j--) ;
}
/**************************** 延時子程序 ************************/
/************************中斷0解碼服務子程序**********************/
void int0(void) interrupt 0 using 2      
{
EX0=0;
P3_0=!P3_0;
num=0;
        for(k=0;k<4;k++)
   {
                          Delay0_9ms();
     if (IRsignal==1)         //如果0.9msIRsignal=1,說明不是引導碼
     {
         k=4;
                 break;        //P0=0XFF;
                                 }
     else if(k==2)           //如果持續了3×0.9ms=9ms的低電平,說明是引導碼
      {
                //P0=0;
        time=0;
num=0;
        while(IRsignal==0);
                         //if(IRsignal==0)
                        // num+=1;
//        P1=num;
                        //        while(IRsignal==0);
while(time<100)
{
        time++;
Delay0_9ms();    //跳過持續1ms的高電平
Delay0_9ms();     //跳過持續1ms的高電平
if(IRsignal==0)
{
P0=num;
num+=1;
   //P1=num;
}
while(IRsignal==0);
}  

                                                                if(num==1)
                                                                led1=!led1;
                                                                if(num==2)
                                                                led2=!led2;
                                                                if(num==3)
                                                                led3=!led3;
                                                                if(num==4)
                                                                led4=!led4;
                                                                if(num==5)
                                                                led5=!led5;
                                                                if(num==6)
                                                                led6=!led6;
                                                                if(num==7)
                                                                led7=!led7;
                                                                if(num==8)
                                                                led8=!led8;
                                break;
//   delay(2);
       }
   }
EX0=1;
}
void init()// 定時器初始化
{
         TMOD=0x11;
         EA=1;
  IT0=1;    //INT0為負邊沿觸發, (1:負邊沿觸發,0:低電平觸發)
  EX0=1;    //外部中斷INT0, (1:開,      0:關    )
  CodeTemp=0;    //初始化紅外編碼字節緩存變量
}
main()
{                        
init();
while(1)
{
}
}
求求各位大佬看看我這個為什么接收端沒有顯示

51hei截圖20221120141625.png
回復

使用道具 舉報

ID:931877 發表于 2022-11-20 14:36 | 顯示全部樓層
對于這個網上找了很久了   有點頭大了
回復

使用道具 舉報

ID:342822 發表于 2022-11-20 15:19 | 顯示全部樓層
看看這語句末尾
sbit led8=P1^7   <————       缺點什么?????
回復

使用道具 舉報

ID:931877 發表于 2022-11-20 19:24 | 顯示全部樓層
taotie 發表于 2022-11-20 15:19
看看這語句末尾
sbit led8=P1^7

有點不太理解
回復

使用道具 舉報

ID:34149 發表于 2022-11-20 19:41 | 顯示全部樓層
應該是解碼環節出了問題。NEC編解碼有點復雜。
但是你用單片機寫發送碼,哪跟編碼還有一定關系。
編解碼要一致。
我沒有仔細研究過代碼,但就這是這個思路。
回復

使用道具 舉報

ID:648281 發表于 2022-11-20 20:53 | 顯示全部樓層
1、晶振用的多少,是否合適
2、收發程序都發上來
3、用示波器觀察波形,是怎樣波形
回復

使用道具 舉報

ID:931877 發表于 2022-11-20 22:45 | 顯示全部樓層
51hei**1140 發表于 2022-11-20 20:53
1、晶振用的多少,是否合適
2、收發程序都發上來
3、用示波器觀察波形,是怎樣波形

晶振用的都是38KHZ  發射程序也放上來了  人都要麻了  發射那里波形出來  然后接收模塊都不動的
回復

使用道具 舉報

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:1055814 發表于 2022-12-6 13:24 | 顯示全部樓層
sbit led8=P1^7   <——   缺了一點什么
回復

使用道具 舉報

ID:1055814 發表于 2022-12-6 13:24 | 顯示全部樓層


sbit led8=P1^7   <————缺一點什么
回復

使用道具 舉報

ID:1056229 發表于 2022-12-7 12:07 | 顯示全部樓層
sbit led8=P1^7   <——缺點什么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产免费视网址 | 国产亚洲一区精品 | 国产精品99视频 | 中文字幕不卡视频在线观看 | 久久免费国产视频 | 久久国产一区二区 | 国产传媒在线观看 | 蜜桃精品噜噜噜成人av | 欧美又大粗又爽又黄大片视频 | 成人av电影网 | 精品福利av导航 | 久久国产婷婷国产香蕉 | 日本亚洲一区二区 | 欧美视频免费在线 | 亚洲免费在线视频 | 亚洲第一视频网 | 一级一级毛片免费看 | 一区二区三区av | 欧美视频在线一区 | 国产视频一二三区 | 在线免费国产 | 91精品国产综合久久久久久蜜臀 | 三级黄色片在线观看 | 一区二区在线看 | 国产探花在线观看视频 | 99亚洲国产精品 | 综合精品久久久 | 成人亚洲一区 | 老司机狠狠爱 | 精品久久一区二区 | 涩涩视频在线观看 | 亚洲另类春色偷拍在线观看 | 国产精品乱码一区二三区小蝌蚪 | 国产福利网站 | 91精品国产综合久久久久久丝袜 | 日韩久久精品视频 | 在线一区视频 | 亚洲欧美视频 | 国产成人精品一区二区三区 | 久久成人国产精品 | 99亚洲精品 |