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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2218|回復: 10
打印 上一主題 下一主題
收起左側

求大神解答單片機紅外遙控一直接受信號停不下來的程序問題問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:944932 發表于 2021-12-14 18:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
改的密碼鎖,紅外遙控器一個按鍵按下之后一直會接受到這個信號,然后一直會執行這個按鍵的功能,本來按下1是會在1602顯示一個1的,接著按下其他按鍵會顯示其他數字,但是現在按下1之后,會一直有111111111一直往后延續
到底是紅外設置的不對還是輸入程序不對啊

  1. if(i<16&&num1!=14&&num1!=13)
  2.                         {
  3.         
  4.                                 passwordtemp[i]=num1;
  5.                                 LCD_Write_Char(i,1,num1+0x30
  6.                                 delay(100);

  7.                         }
  8.                 i++;





  9. //紅外模塊的


  10. void IR_decode() interrupt 0
  11. {
  12.         uchar j,k,count=0;
  13.   EX0 = 0;           



  14.         delayy(20);               
  15.         if (irin==1)                 
  16.   {
  17.                  EX0 =1;               
  18.                    return;        
  19.         }                                                            
  20.   while (!irin) delayy(1);
  21.         for (j=0;j<4;j++)      
  22.          {
  23.           for (k=0;k<8;k++)      
  24.           {
  25.                    while (irin)           
  26.                      delayy(1);
  27.                         while (!irin)         
  28.                      delayy(1);
  29.                      while (irin)         
  30.                       {
  31.                             delayy(1);        
  32.                             count++;         
  33.                             if (count>=30)        
  34.                                  {
  35.                                         EX0=1;               
  36.                                          return;
  37.                                 }                  
  38.                       }   
  39.                      IrValue[j]=IrValue[j] >> 1;              
  40.                      if (count>=6) {IrValue[j] = IrValue[j] | 0x80;}
  41.                      count=0;                                        //????0        
  42.           }
  43. }
  44.         if (IrValue[2]!=~IrValue[3])        
  45.          {
  46.         
  47.      EX0 = 1;                 
  48.         return;
  49. }




  50. /******************************************************************/
  51.   waimm=0;

  52.   EX0 = 1;                        

  53. }
  54. uchar hong()
  55. {
  56.         if(waimm==0)
  57.         {
  58. switch(IrValue[2])
  59. {

  60.   case 0x0c:return 1;break;//1
  61.   case 0x18:return 2;break;//2
  62.   case 0x5E:return 3;break;//3
  63.   case 0x08:return 4;break;//4

  64.   case 0x1C:return 5;break;//5                          
  65.   case 0x5A:return 6;break;//6
  66.   case 0x42:return 7;break;//7
  67.   case 0x52:return 8;break;//8

  68.   case 0x4A:return 9;break;//9
  69.   case 0x16:return 0;break;//0
  70.   case 0x44:return 10;break;//a
  71.   case 0x40:return 11;break;//b

  72.   case 0x43:return 12;break;//c
  73.   case 0x19:return 13;break;//d
  74.   case 0x0D:return 14;break;//e
  75.   case 0x07:return 15;break;//f
  76.   default:return 0xff;break;
  77. }waimm=1;
  78. }
  79.         
  80. }

復制代碼

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

使用道具 舉報

沙發
ID:301191 發表于 2021-12-14 22:56 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:944932 發表于 2021-12-15 00:30 | 只看該作者
求大神解答啊,用矩陣鍵盤好好的,用紅外發射信號接收的停不下來了
回復

使用道具 舉報

地板
ID:844772 發表于 2021-12-15 08:43 | 只看該作者
  語句 LCD_Write_Char(i,1,num1+0x30,顯示的是num1,   但之前的語句是 passwordtemp[i]=num1; num1也不會變,寫反了吧?
回復

使用道具 舉報

5#
ID:425825 發表于 2021-12-15 09:01 | 只看該作者
你發的程序不全呀
回復

使用道具 舉報

6#
ID:944932 發表于 2021-12-15 10:08 來自手機 | 只看該作者
glinfei 發表于 2021-12-15 08:43
語句 LCD_Write_Char(i,1,num1+0x30,顯示的是num1,   但之前的語句是 passwordtemp=num1; num1也不會變 ...

num1是在之前的程序的過去到了一個鍵值,現在它是紅外接受信號只要接受到了這個信號會一直存在,該咋辦啊
回復

使用道具 舉報

7#
ID:811729 發表于 2021-12-15 12:24 | 只看該作者
首先不知道你的num1在哪賦值的,貌似紅外中斷里沒有。。
其次。。別這樣寫程序。。。if(i<16&&num1!=14&&num1!=13) 你這你自己看的懂嗎?
if(i<16)
{
     if(num1 != 14)
     {
           if(num1 != 13)
          {
               // do your work
          }
     }
} 程序寫明白,注釋一下,完整點發上來。
回復

使用道具 舉報

8#
ID:944932 發表于 2021-12-15 13:53 | 只看該作者
love_ourlife 發表于 2021-12-15 12:24
首先不知道你的num1在哪賦值的,貌似紅外中斷里沒有。。
其次。。別這樣寫程序。。。if(i

就以部分顯示來說吧,我的思路是這樣的,如果我在遙控器按下一個鍵,通過鍵值解析來實現具體功能,現在按下一個按鍵之后,一直在循環這個按鍵的處理程序


uchar code password[]={1,2,3,4,5,6,7,8};
sbit led1=P2^0;
sbit led2=P2^1;
sbit dz=P1^5;
sbit moto=P1^0;
sbit IRIN = P3^2;
unsigned char irok;  
unsigned char IrValue[6];
unsigned char Time;這是主程序里的
        while(1)
        {
                 
                //num=Keyvalue
                switch(IrValue[2])  //  通過紅外鍵值來給s賦值,b暫時沒有用
          {
                       
                case 0x16: b=0;s=0;break;
                case 0x0c: b=1;s=1;break;
                case 0x18: b=2;s=2;break;
                case 0x5e: b=3;s=3;break;
                case 0x08: b=4;s=4;break;
                case 0x1c: b=5;s=5;break;
                case 0x5a: b=6;s=6;break;
                case 0x42: b=7;s=7;break;
                case 0x52: b=8;s=8;break;
                case 0x4a: b=9;s=9;break;
                       
                case 0x07: b=15;s=15;break;
                case 0x19: b=14;s=14;break;
                case 0x0d: b=13;s=13;break;                       
//        default:h=1;s=0xff;;break;
          }
               
                  //       
       
                {

                            num=s;
//將s在賦值給num,通過判斷num的數字來實現具體功能
               
if(i<16&&num!=14&&num!=15)//如果輸入的數字小于16并且14和15按鍵都沒有按下
                        {
                                passwordtemp=num;//將num得到的數字放進密碼緩存
                                 
                                LCD_Write_Char(i,1,num+0x30);//在1602顯示
                       
                                delay(100);
                               
                        }
                        i++;
                       
                                                                               
                }

//紅外初始化接收
void IrInit()
{
        IT0=1
        EX0=1
        EA=1;

        IRIN=1;
}



紅外數值讀取的中斷函數,
void ReadIr() //interrupt 0
{
        unsigned char j,k;
        unsigned int err;
        Time=0;                                         
        DelayMs(70);

        if(IRIN==0)        確認是否接收到正確的信號
        {         
               
                err=1000;               
                while((IRIN==0)&&(err>0))          //等待前面9ms低電平過去       
                {                       
                        DelayMs(1);
                        err--;
                }
                if(IRIN==1)        //如果正確等到9ms低電平過去
                {
                        err=500;
                        while((IRIN==1)&&(err>0))        //等待4.5ms起始高電平過去
                        {
                                DelayMs(1);
                                err--;
                        }
                        for(k=0;k<4;k++)//共4組數據
                        {                               
                                for(j=0;j<8;j++)  //接收一組數據
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0)//等待信號前面的560us過去
//                                        while (!IRIN)
                                        {
                                                DelayMs(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))   //計算高電平時間長度
                                        {
                                                DelayMs(1);//0.14ms
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        EX0=1;
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;   //k表示第幾組數據
                                        if(Time>=8)                //如果高電平出現大于565us,是1
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                //用完時間重新賦值                                       
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }                       
}




回復

使用道具 舉報

9#
ID:624769 發表于 2021-12-15 23:14 | 只看該作者
        if(IRIN==0)        確認是否接收到正確的信號
回復

使用道具 舉報

10#
ID:624769 發表于 2021-12-15 23:15 | 只看該作者
        if(IRIN==0)        確認是否接收到正確的信號
只要你 沒有 IRIN = 1;  就會不停的處理。
你要他停止處理, 就找個適當的地方  IRIN = 1
回復

使用道具 舉報

11#
ID:843335 發表于 2021-12-16 16:39 | 只看該作者
switch(IrValue[2])你這里不清空鍵值那當然一直循環這一個鍵值啊,用完一次就把他清0就行了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品伊人久久 | 91国产视频在线 | 国产精久久久久久久 | 国产在线97 | 国产精品99 | 蜜桃精品噜噜噜成人av | 日本欧美在线观看视频 | 欧美日韩中文在线 | 国产欧美日韩在线观看 | 在线视频 亚洲 | 久久久久一区 | 中文字幕一区二区三区四区五区 | 欧美激情综合 | 国产专区在线 | 狠狠草视频 | 亚洲社区在线 | 国产成人精品一区二区三区在线观看 | 日本aa毛片a级毛片免费观看 | 久久99精品久久久久久 | 国产亚洲欧美日韩精品一区二区三区 | 亚洲一区二区不卡在线观看 | 亚洲欧美日韩中文在线 | 欧美v免费 | 天天插日日操 | 欧美11一13sex性hd | 国产欧美精品一区二区 | 欧美一区二区三区在线观看视频 | 日韩综合色 | 亚洲精品美女在线观看 | 久久机热 | 日韩三级在线 | 欧美日韩国产中文 | 欧美综合一区 | 成人在线观看亚洲 | 9久9久| 日韩视频三区 | 中文字幕在线一区二区三区 | 日韩一区二区三区在线 | 91九色婷婷 | 欧美一卡二卡在线 | 日韩av资源站|