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

QQ登錄

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

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

關(guān)于stc15單片機(jī) 為什么紅外遙控按了沒(méi)反應(yīng),8位數(shù)碼管就都顯示0

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:256174 發(fā)表于 2017-12-26 15:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
10黑幣
求助各為大神,幫忙分析下這個(gè)程序,為什么紅外遙控按了沒(méi)反應(yīng),8位數(shù)碼管就都顯示0


  1. #include <stc15.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar code led_xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
  5. uchar code led_wei[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
  6. uchar t;

  7. sbit IR=P3^2;

  8. bit irok;//紅外接收完標(biāo)志位
  9. bit ieok;//紅外處理完標(biāo)志位

  10. uchar Ir_cd[4];
  11. uchar Ir_data[33];

  12. void iint();//設(shè)置準(zhǔn)雙向口
  13. void init();//外部中斷0初始化
  14. void intt();//定時(shí)器0初始化
  15. void hwjmcl(); //紅外解碼處理
  16. void hwmzzh();//紅外碼值轉(zhuǎn)換處理顯示
  17. void delay(uint t);

  18. void main()
  19. {
  20.         intt();//設(shè)置準(zhǔn)雙向口
  21.         iint();//外部中斷0初始化
  22.         init();//定時(shí)器0初始化
  23.         while(1)
  24.         {
  25.                 if(irok)  
  26.                 {
  27.                         irok=0;  
  28.                         ET0=0;   //禁止定時(shí)器0中斷
  29.                         hwjmcl();//紅外解碼處理
  30.                 }
  31.                 if(ieok)   
  32.                 {
  33.                         ieok=0;
  34.                 }
  35.                 hwmzzh();  //紅外碼值轉(zhuǎn)換處理顯示
  36.         }
  37. }

  38. void hwjmcl()  //紅外解碼處理
  39. {
  40.         uchar i,j,k=1,value=0;
  41.         for(i=0;i<4;i++)   
  42.         {
  43.                 for(j=0;j<8;j++)   
  44.                 {
  45.                         value>>=1;        
  46.                         if(Ir_data[k]>6)
  47.                         {               
  48.                                 value|=0x80;  
  49.                         }
  50.                         k++;
  51.                 }
  52.                 Ir_cd[i]=value;  
  53.         }
  54.         ieok=1;            
  55. }

  56. void hwmzzh()  //紅外碼值轉(zhuǎn)換處理顯示
  57. {
  58.         P2=led_xs[Ir_cd[0]/16];      
  59.         P0=led_wei[0];delay(1);P0=0xFF;
  60.         P2=led_xs[Ir_cd[0]%16];
  61.         P0=led_wei[1];delay(1);P0=0xFF;
  62.         
  63.         P2=led_xs[Ir_cd[1]/16];      
  64.         P0=led_wei[2];delay(1);P0=0xFF;
  65.         P2=led_xs[Ir_cd[1]%16];
  66.         P0=led_wei[3];delay(1);P0=0xFF;
  67.         
  68.         P2=led_xs[Ir_cd[2]/16];        
  69.         P0=led_wei[4];delay(1);P0=0xFF;
  70.         P2=led_xs[Ir_cd[2]%16];
  71.         P0=led_wei[5];delay(1);P0=0xFF;
  72.         
  73.         P2=led_xs[Ir_cd[3]/16];      
  74.         P0=led_wei[6];delay(1);P0=0xFF;
  75.         P2=led_xs[Ir_cd[3]%16];
  76.         P0=led_wei[7];delay(1);P0=0xFF;
  77. }        

  78. void time_0(void) interrupt 1 //定時(shí)器0中斷服務(wù)函數(shù)
  79. {
  80.         t++;
  81. }

  82. void INT_0(void) interrupt 0 //外部中斷0服務(wù)函數(shù)
  83. {
  84.         static uchar i;
  85.         static bit flag;
  86.         ET0=1;         
  87.         if(t>35)        
  88.         {
  89.                 flag=1;      
  90.                 i=0;        
  91.         }
  92.         if(flag)        
  93.         {
  94.                 Ir_data[i]=t;
  95.                 i++;           
  96.                 t=0;           
  97.                 if(i>=33)
  98.                 {
  99.                         i=0;
  100.                         flag=0;
  101.                         irok=1;
  102.                 }
  103.         }
  104. }

  105. void delay(uint t)
  106. {
  107.         uint i,j;
  108.         for(i=t;i<50;i++)
  109.                 for(j=25;j>0;j--);
  110. }

  111. void init()
  112. {
  113.         TMOD&=0xF0;
  114.         TMOD|=0x02;
  115.         TH0=0;
  116.         TL0=0;
  117.         TR0=1;
  118. }

  119. void iint()
  120. {
  121.         IT0=1;
  122.         EX0=1;
  123.         EA=1;
  124. }

  125. void intt()
  126. {
  127.         P0M0=0;P0M1=0;
  128.         P1M0=0;P1M1=0;
  129.         P2M0=0;P2M1=0;
  130.         P3M0=0;P3M1=0;
  131.         P4M0=0;P4M1=0;
  132.         P5M0=0;P5M1=0;
  133. }
復(fù)制代碼

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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