找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4820|回復: 8
打印 上一主題 下一主題
收起左側(cè)

幫修改個程序,4個LED燈對應按鍵號,只能亮一個,其它熄滅 謝謝!

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:353 發(fā)表于 2016-9-11 19:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  在網(wǎng)上找了個程序,已修改了遙控鍵值,實現(xiàn)了按紅外遙控器1,2,3,4號鍵,對應學習板P2^0-P2^3 IO口LED燈點亮,熄滅�,F(xiàn)在想修改為:4個LED燈對應按鍵號,只能亮一個,其它熄滅。比如按遙控器按1號鍵,對應P2^0燈亮;按2號鍵時,P2^1亮,其它熄滅。
本人水平有限,先謝謝了
程序如下:


#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void delay(uchar x);  //x*0.14MS
void delay1(int ms);
void beep();
sbit IRIN = P3^2;         //紅外接收器數(shù)據(jù)線
sbit BEEP = P3^7;         //蜂鳴器驅(qū)動線
sbit RELAY1= P2^0;         //繼電器驅(qū)動線//繼電器驅(qū)動線
sbit RELAY2= P2^1;
sbit RELAY3= P2^2;
sbit RELAY4= P2^3;  
uchar IRCOM[7];
main()
{
    IRIN=1;                    //I/O口初始化
    BEEP=1;
    RELAY1=1;
delay1(10);                 //延時
    IE = 0x81;                 //允許總中斷中斷,使能 INT0 外部中斷
TCON = 0x01;               //觸發(fā)方式為脈沖負邊沿觸發(fā)
     while(1);

} //end main
/**********************************************************/
void IR_IN() interrupt 0 using 0
{
      unsigned char j,k,N=0;
     EX0 = 0;     //關(guān)掉外部中斷防止中斷的再次發(fā)生進入檢測引導碼階段(9ms的低電平4.5ms的高電平)
delay(15);
if (IRIN==1)
     { EX0 =1;  //9ms的檢測檢測結(jié)束從新打開外部中斷
  return;
}
                           //確認IR信號出現(xiàn)
  while (!IRIN)            //等IR變?yōu)楦唠娖�,跳過9ms的前導低電平信號。
    {delay(1);}

for (j=0;j<4;j++)         //收集四組數(shù)據(jù)
{
for (k=0;k<8;k++)        //每組數(shù)據(jù)有8位
{
  while (IRIN)            //等 IR 變?yōu)榈碗娖�,跳過4.5ms的引導高電平信號。
    {delay(1);}
   while (!IRIN)          //等 IR 變?yōu)楦唠娖?br />     {delay(1);}
    while (IRIN)           //計算IR高電平時長(0和1的低電平的時長一樣的,只要判斷高電平時長超過0.56ms并小于1.12ms為1否  則為0)
     {
   delay(1);
   N++;           
if (N>=30)
{
EX0=1;
return;
}                  //0.14ms計數(shù)過長自動離開。
     }                        //高電平計數(shù)完畢               
    IRCOM[j]=IRCOM[j] >> 1;                  //數(shù)據(jù)最高位補“0”
    if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //高電平持續(xù)時間大于1.12ms則數(shù)據(jù)最高位補“1”
    N=0;
}//end for k
}//end for j

   if (IRCOM[2]!=~IRCOM[3])  // 判斷有沒有誤碼(有責放棄沒有判斷鍵碼)
   { EX0=1;
     return;
}
     switch(IRCOM[2])
{ // 顯示遙控上的字符按鍵
case 0x09:
RELAY1=!RELAY1;  
break;
case 0x0c:
    RELAY2=!RELAY2;
break;
case 0x0e:
    RELAY3=!RELAY3;  
break;
case 0x00:
     RELAY4=!RELAY4;  

}
     beep();
     EX0 = 1;
}

/**********************************************************/
void beep()
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   delay(4);
   BEEP=!BEEP;                 //BEEP取反
   }
  BEEP=1;                      //關(guān)閉蜂鳴器
}
/**********************************************************/
void delay(unsigned char x)    //x*0.14MS
{
unsigned char i;
  while(x--)
{
  for (i = 0; i<13; i++) {}
}
}

/**********************************************************/
void delay1(int ms)
{
unsigned char y;
  while(ms--)
{
  for(y = 0; y<250; y++)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
}
}


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

使用道具 舉報

沙發(fā)
ID:353 發(fā)表于 2016-9-11 23:13 | 只看該作者
已修改成功。
回復

使用道具 舉報

板凳
ID:137239 發(fā)表于 2016-9-12 00:39 | 只看該作者

樓主,我想學習下,可以把源程序發(fā)給我嗎?謝謝!
回復

使用道具 舉報

地板
ID:353 發(fā)表于 2016-9-12 18:31 | 只看該作者
STC89C51 發(fā)表于 2016-9-12 00:39
樓主,我想學習下,可以把源程序發(fā)給我嗎?謝謝!

已發(fā),
數(shù)字補丁

4路.zip

23.95 KB, 下載次數(shù): 19

修改好的,4路紅外遙控程序

回復

使用道具 舉報

5#
ID:137239 發(fā)表于 2016-9-13 00:37 | 只看該作者
yaofang1010 發(fā)表于 2016-9-12 18:31
已發(fā),
數(shù)字補丁

謝謝分享
回復

使用道具 舉報

6#
ID:138155 發(fā)表于 2016-9-13 14:15 | 只看該作者
恭喜樓主改造成功
回復

使用道具 舉報

7#
ID:139638 發(fā)表于 2016-9-17 16:24 | 只看該作者

恭喜樓主改造成功
回復

使用道具 舉報

8#
ID:353 發(fā)表于 2016-9-17 17:52 | 只看該作者
謝謝
已做成成品,配上其它紅外遙控設備一起使用,信號切換器
回復

使用道具 舉報

9#
ID:67838 發(fā)表于 2017-5-29 22:12 | 只看該作者
恭喜樓主改造成功
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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