51单片机红外解码C程序 51单片机红外线解码的程序

\u6c4251\u5355\u7247\u673a\u7ea2\u5916\u6447\u63a7\u63a5\u6536c\u7a0b\u5e8f\uff0c\u5e76\u5728\u6570\u7801\u7ba1\u4e0a\u663e\u793a\u952e\u503c\u51fa\u6765\uff1f

#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long


#define Nop() {_nop_(); _nop_(); _nop_(); _nop_(); _nop_();}



volatile ulong IRcode=0x00000000; //32\u4f4d\u7684\u952e\u4ee3\u7801
volatile ulong Irdcode=0x00000000;
volatile uint customcode=0x0000; //16\u4f4d\u7528\u6237\u7801
volatile uint time_us=0x0000; //\u4e24\u4e2a\u4e0b\u964d\u6cbf\u4e4b\u95f4\u7684\u65f6\u95f4

volatile uchar timeH,timeL; //\u4fdd\u5b58TH1 TL\u7684\u503c

uchar Lcustomcode; //\u4f4e8\u7528\u6237\u7801
uchar Hcustomcode; //\u9ad88
uchar datacode; //8\u4f4d\u952e\u6570\u636e\u7801
uchar mycode;
uchar Rdatacode; //8\u4f4d\u952e\u6570\u636e\u53cd\u7801
uchar uc1ms;
uchar uc10ms;
uchar uc3ms;


uchar ucDispTime;
uchar ucDispOrder;
uchar ucDispCon;
uchar ucSpeakerTime;
unsigned char code LedData[16] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned char code LedCon[2] = {0x8f,0x4f};
unsigned char ucDispData[2]; // \u5b58\u653e\u663e\u793a\u6570\u636e
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit power=P1^0; //\u7535\u6e90\u5f00\u5173
sbit BEEP= P2^1;
bit NewIRcode=0; //\u6307\u793a\u5f53\u5904\u7406\u5b8c\u4e8632\u4f4d\u7801\u540e\uff0c\u5c31\u6709\u4e86\u65b0\u7684\u9065\u63a7\u7801
bit DataRight=0; //\u4e3a1\u65f6\u8bfb\u53d6\u6570\u636e\u6b63\u786e
bit bSampleOk;
bit bSampling;
bit b10msInt;
bit b1msInt;
bit bKeySound;
bit b1msMain;
bit IR_E; //\u8868\u793a\u6709\u65b0\u7684\u9065\u63a7\u952e\u63a7\u4e0b\u5c31\u66f4\u65b0\u626b\u63cf\u6570\u636e
bit b3msint;

void SendDataToDispDevice();
void Ir_process();
void display();
void beeping();

/****** \u6676\u632f\u4e3a12 MHZ*******/
/**\u5b9a\u65f6\u56681,12 MHZ\u6700\u5927\u5b9a\u65f6\u4e3a65.53ms***/
//------------------------------------------------------------------------------
void init()
{
IP=0x09; //\u5b9a\u65f6\u56681\uff0c\u5916\u90e8\u4e2d\u65ad0\u4f18\u5148\u7ea7\u9ad8
TMOD=0x11; //\u5b9a\u65f6\u56680\uff0c\u5de5\u4f5c\u65b9\u5f0f1 ; \u5b9a\u65f6\u56681\uff0c\u5de5\u4f5c\u65b9\u5f0f1
TCON=0x01; //\u5916\u4e2d\u65ad0\u4e0b\u964d\u6cbf\u89e6\u53d1\uff0c\uff08\u5305\u62ecTR1=0\uff0cTR0=0\uff09
TH0=0xff; //\u521d\u59cb\u5316\u5b9a\u65f6\u56680,\u5b9a\u65f60.2ms
TL0=0x47;
TH1=0x00; //\u521d\u59cb\u5316\u5b9a\u65f6\u56681
TL1=0x00;

EA=1; //\u5f00\u5168\u4e2d\u65ad
ET0=1; //\u5f00\u653eT0\u4e2d\u65ad
ET1=1; //\u5f00\u653eT1\u4e2d\u65ad
EX0=1; //\u5f00\u653eINT0
TR1=0;
TR0=1;

}
//--------------------------------------
void TimeProg(void)
{
b1msMain = b1msInt;
b1msMain=0;
b10msInt = 0;


if(b1msInt == 1)
{
b1msMain=1;
if(++uc10ms == 10)
{
uc10ms = 0;
b10msInt = 1;
if(bKeySound==1)
{ beeping();
bKeySound=0;
}
}

}
}//void TimeProg(void)
//-------------------------------------interrupt0-------------------------------------
void IR_ISR() interrupt 0 using 1 //\u9065\u63a7\u5668\u4e2d\u65ad\u5904\u7406\u51fd\u6570
{
static uchar cn;

TR1=0;
timeH=TH1;
timeL=TL1;
TH1=0;
TL1=0;
TR1=1; //\u5f00\u5b9a\u65f6\u5668\u4e2d\u65ad1

time_us=(unsigned int)timeH;
time_us=time_us<<8;
time_us=time_us|timeL;

if(time_us>12200&&time_us<13000) {cn=1;IRcode=0;} //\u9047\u5230\u5f15\u5bfc\u7801,\u5c31\u628acn\u6e050\uff0cIRcode\u6e050
//\u5f15\u5bfc\u7801\u7684\u65f6\u95f4\u957f\u5ea6\u4e3a9ms+4.5ms
if(cn<34)
{
if(time_us>950&&time_us<1120) //0
{
IRcode=IRcode|0x00000000;
if(cn>1;
}

else if(time_us>1920&&time_us 1950 && t < 2150
{
IRcode=IRcode|0x80000000;
if(cn>1;
}


//else if(time_us>10000&&time_us<11000) {Irdcode=IRcode;cn=34; } //\u9047\u5230\u91cd\u590d\u7801
//cn\u7528\u4e8e\u8bb0\u5f55\u63a5\u6536\u5230\u7684\u6570\u636e\u4f4d
}
cn++;
if(cn==34)
{ NewIRcode=1;
TR1=0;

Irdcode= IRcode; cn=0;
} //\u8bfb\u5b8c32\u4f4d\u7801\uff0c\u5219\u6709\u65b0\u7801\u4ea7\u751f

}

//--------------------------------------timer_ISR------------------------------
void Timer0_ISR() interrupt 1 using 2 //\u5b9a\u65f6\u56680\u4e2d\u65ad\u51fd\u6570
{
TR0=0;
TH0=0xff; //\u521d\u59cb\u5316\u5b9a\u65f6\u56680,\u5b9a\u65f60.2ms \u6676\u632f\u4e3a11.0592 MHZ
TL0=0x47;
TR0=1;
if(++uc1ms == 5)
{
uc1ms = 0;
b1msInt=1;
if(++uc3ms==8)
{
uc3ms=0;
b3msint=1;
SendDataToDispDevice(); //n* ms\u9001\u4e00\u6b21\u663e\u793a
}


}
}//void Timer0IntProg() interrupt 1 using 1

void Timer1_ISR() interrupt 3 using 3 //\u5b9a\u65f6\u56681\u4e2d\u65ad\u51fd\u6570
{
TR1=0;
TH1=0x00; //\u521d\u59cb\u5316\u5b9a\u65f6\u56681
TL1=0x00;
TR1=1;

}
//--------------------SendDataToDispDevice----------
void SendDataToDispDevice()
{
unsigned char n;
//watchdog();
if(++ucDispOrder >= 2) ucDispOrder = 0; // \u4e0b\u4e00\u663e\u793a\u5de1\u56de

// \u4e0b\u9762\u4e3a\u53d1\u9001\u63a7\u5236\u6570\u636e \u4f4d\u63a7

if(ucDispOrder==0)
{led1=0;
led2=1;
Nop();
Nop();

}
if(b3msint==1)
{if(ucDispOrder==1)
{led2=0;
led1=1;
Nop();
Nop();
}
}
// \u4e0b\u9762\u4e3a\u53d1\u9001\u663e\u793a\u6570\u636e
n = LedData[ucDispData[ucDispOrder]];
P0=n;



} //void SendDataToDispDevice()

//------------------------------------main()----------------------------------------------
void main()
{

init();
beeping();
while(1)
{
TimeProg();
Ir_process();
display();

}

}

void Ir_process()

{

if(NewIRcode==1) //\u5982\u679c\u6709\u65b0\u7684\u9065\u63a7\u7801\u5c31\u8bfb
{
NewIRcode=0; //\u8bfb\u5b8c\u4e4b\u540e\u6e05\u96f6\uff0c\u8868\u793a\u65b0\u7801\u5df2\u8bfb
customcode=(Irdcode>>16); //\u53d6\u7ea2\u5916\u7801\u4e2d\u7684\u6309\u7801\u952e
//\u53d6\u4f4e8\u4f4d\u7528\u6237\u7801
Lcustomcode=customcode>>8;//\u53d6\u4f4e8\u4f4d\u6309\u7801\u952e
datacode=(unsigned char)(customcode&0x00ff); //\u53d6\u9ad88\u4f4d\u6309\u7801\u952e


Rdatacode=Lcustomcode; //\u53d6\u4f4e8\u4f4d\u6309\u7801\u952e\u7684\u53cd\u7801

if(~Rdatacode!=datacode)
{ DataRight=0;
Irdcode=0;
datacode=Rdatacode=0;
} //\u6821\u9a8c\u7528\u6237\u7801\uff0c\u53cd\u7801

else
{ DataRight=1;
IR_E=1;
mycode=datacode;}
if(DataRight==1) { bKeySound = 1;DataRight=0; }

}



}

void display()
{
/* unsigned char a[2];
a[0] = mycode & 0x0f;
mycode = mycode >> 4;
a[1] = mycode & 0x0f;
ET0 = 0;
ucDispData[0] = a[0];
ucDispData[1] = a[1];
ET0 = 1;*/
if(IR_E==1)
{
ET0 = 0;
ucDispData[0] = mycode & 0x0f;
mycode = mycode >> 4;
ucDispData[1] = mycode & 0x0f;
IR_E=0;
ET0 = 1;
}
}

/**********************************************************/
void delay(unsigned char x) //x*0.14MS
{
unsigned char a;
while(x--)
{
for (a = 0; a<13; a++) {;}
}
}


/**********************************************************/
void beeping()
{
unsigned char i;

for (i=0;i<100;i++)
{
delay(4);
BEEP=!BEEP; //BEEP\u53d6\u53cd
}
BEEP=1;
//\u5173\u95ed\u8702\u9e23\u5668
}

\u5b9e\u9645\u4e0a\u5982\u679cir_code[2]\u662f8\u4f4d\u4e8c\u8fdb\u5236\u6570\u7684\u8bdd ir_code[2]/16\uff0c\u7ed3\u679c\u5c31\u53ea\u5269\u4f4e4 \u4f4d\u6709\u6548\u4e86
\u518d\u8fdb\u884c&0x0f;\u8fd8\u662f\u53d6\u4f4e4\u4f4d\u6ca1\u610f\u4e49\u4e86 \u5982 0XA8/16=0X0A 0X0A &0x0f=0X0A
ir_code[2]&0x0f\u6709\u610f\u4e49 \u662f \u5c06\u9ad84\u4f4d\u6e050\u53ea\u53d6\u4f4e4\u4f4d
\u4f30\u8ba1\u4f60\u7684\u8868\u683c\u91cc\u53ea\u670916\u4e2a\u4e03\u6bb5\u7801 \u56e0\u6b64\u67e5\u8868\u65f6\u53ea\u80fd\u5bf9\u9ad84\u4f4d\u548c\u4f4e4\u4f4d\uff08\u90fd\u4e0d\u5927\u4e8e15\uff09\u5206\u522b\u5904\u7406\u548c\u663e\u793a
/16\u548c\u6570\u5b66\u7684\u9664\u6cd5\u76f8\u4f3c\uff0c\u4e0d\u8fc7\u53ea\u53d6\u6574\u6570\u90e8\u5206\uff0c\u4e0d\u7406\u4f1a\u4f59\u6570 \u5982 15/16=0 17/16=1 18/16=1
32/16=2 35/16=2
0x0f\u5316\u6210\u4e8c\u8fdb\u5236\u662f 0000 1111 \u53e6\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570xxxx xxxx\u548c\u5b83\u76f8\u201c\u4e0e\u201d \u5219\u9ad84\u4f4d\u5168\u4e3a0
\u4f4e4\u4f4d\u4e0d\u53d8\uff0c\u5373\uff08xxxx xxxx\uff09&(0000 1111 )=0000 xxxx
\u53e6\u5916\uff0c/2\u76f8\u5f53\u4e8e\u628a\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u5411\u53f3\u79fb1 \u4f4d\uff08\u9ad8\u4f4d\u88650\uff09
/4\u76f8\u5f53\u4e8e\u628a\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u5411\u53f3\u79fb2 \u4f4d
/16\u76f8\u5f53\u4e8e\u628a\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u5411\u53f3\u79fb4 \u4f4d\uff0c\u539f\u6765\u7684\u9ad84\u4f4d\u5c31\u8dd1\u5230\u4e86\u73b0\u5728\u7684\u4f4e4 \u4f4d\u4e0a\uff0c\u73b0\u5728\u9ad84 \u4f4d\u5c31\u5168\u6210\u4e860
\u6240\u4ee5C \u8bed\u8a00\u4e2d\u5e38\u89c1>>4 >>8 \u548c/16 /256\u662f\u7b49\u4ef7\u7684

单片机采用外部中断P3.3管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。
// 解码值在Im[2]中,当IrOK=1时解码有效。 
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码
#include <reg52.h>
#define uchar unsigned char 
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar f;
#define Imax 14000    //此处为晶振为11.0592时的取值, 
#define Imin 8000    //如用其它频率的晶振时,
#define Inum1 1450    //要改变相应的取值。
#define Inum2 700 
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
  uchar j,k; 
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display()
{
   dula=0;
   P0=table[show[0]];
   dula=1;
   dula=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   P0=table[show[1]];
   dula=1;
   dula=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
} //外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
 Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
 TH0=0; 
    TL0=0;              //定时中断重新置零
 if((Tc>Imin)&&(Tc<Imax))
      { 
  m=0;
        f=1;
  return;
      }       //找到启始码
   if(f==1)
      {
        if(Tc>Inum1&&Tc<Inum3) 
    {
   Im[m/8]=Im[m/8]>>1|0x80; m++; 
       }
      if(Tc>Inum2&&Tc<Inum1) 
        {
         Im[m/8]=Im[m/8]>>1; m++; //取码
  }
  if(m==32) 
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3]) 
      {
           IrOK=1; 
   }
        else IrOK=0;   //取码完成后判断读码是否正确
     }
               //准备读下一码
   }
}
/*演示主程序*/
void main(void)
{
    unsigned int  a;
 m=0;
    f=0;
 EA=1;
 IT1=1;EX1=1;
 TMOD=0x11;  
 TH0=0;TL0=0;
 TR0=1;//ET0=1;
 while(1)
 {
       if(IrOK==1) 
  {
      show[1]=Im[2] & 0x0F;     //取键码的低四位
           show[0]=Im[2] >> 4;  
           IrOK=0;
  }
           for(a=100;a>0;a--)
          {
    display();
   }
 }
}
解码程序这个就能实现

关键程序如下:
//外部中断为边沿触发,接低电平进入
//1838将外部的高电平转为低电平
//NEC的码为1时,初次进入外部中断,启动定时器,下一次进入外部中断时通过定时器数值判断
//上一脉冲的周期,从而区分引导码或0码1码......
void intersvr1(void) interrupt 2 using 1 //外部中断
{
Tc=TH0*256+TL0;
TH0=0;
TL0=0; //定时中断重新置零
if((Tc>Imin)&&(Tc<Imax)) //8-14毫秒对应引导码13.5毫秒(9高4.5低)
{
m=0;
f=1;
return;
//在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。
}
if(f==1)
{
if(Tc>Inum1&&Tc<Inum3) //1.45-3.0毫秒对应NEC码的1.125(0.565;0.565)毫秒的1
{
Im[m/8]=Im[m/8]>>1|0x80; m++; //取一位码,共32个位,放在数组Im[4]的4字节中
}
if(Tc>Inum2&&Tc<Inum1) //0.7-1.45毫秒对应NEC码的1.125(0.565;1.685)毫秒的0
{
Im[m/8]=Im[m/8]>>1; m++; //取一位码,共32个位,放在数组Im[4]的4字节中
}
if(m==32)
{
m=0;
f=0;
if(Im[2]==~Im[3]) //Im[2]为8位数据码,Im[3]为8位数据码的反码
{
IrOK=1;
}
else IrOK=0; //取码完成后判断读码是否正确
}
}
}

想要完整的demo留邮箱

哈哈,这个我最近刚写出来,遥控器和你那个一样,1~8键控制8个IO口,按下0键关闭所有IO口,电源键可接继电器控制总开关,程序改写简单,家里的遥控器均可利用,多种工作方式,加qq:657054041

给你个我做项目用的42位电视剧遥控器解码源代码 参考程序:
/**************************************************
*
* 51单片机精简遥控解码实验程序
*
*实验功能 :数码管显示遥控器键码
*
* 遥控器是42位电视遥控器
*
* 数码管上电默认显示【 E--000 】
***************************************************/
#include "REG52.H"

sbit delu = P2^6; //数码管段选sbit wela = P2^7; //数码管位选
sbit IR_dat = P3^2; //遥控数据口sbit Bee_tp = P2^3;
unsigned int IR_boke;
unsigned char IR_temp;
unsigned char IR_vnum;
unsigned char IR_data[4];

unsigned char code value_tab[] =
{
0x3F,
0x06,
0x5B,
0x4F,
0x66,
0x6D,
0x7D,
0x07,
0x7F,
0x6F
}; //0-9

#define IR_200 (200 * 110592 / 120000)
#define IR_800 (800 * 110592 / 120000)
#define IR_1120 (1120* 110592 / 120000)
#define IR_2000 (2000* 110592 / 120000)
#define IR_8500 (8500* 110592 / 120000)
#define IR_9500 (9500* 110592 / 120000)
#define IR_4000 (4000* 110592 / 120000)
#define IR_4500 (4500* 110592 / 120000)

/*
** 外部中断初始化子函数
**/
void INTO_Init(void)
{
TMOD = 0x01;
EA = 1;
EX0 = 1;
IT0 = 1;
}

/*
** 红外下升沿低电平延时时间计算子函数
**/
unsigned int IR_Interrupt_LSB(void)
{
TL0 = 0;
TH0 = 0;
TR0 = 1;

while(!IR_dat && (TH0 & 0x80) == 0);
TR0 = 0;
return(TH0 * 256 + TL0);
}

/*
** 红外上升沿高电平延时时间计算子函数
**/
unsigned int IR_Interrupt_MSB(void)
{
TL0 = 0;
TH0 = 0;
TR0 = 1;

while(IR_dat && (TH0 & 0x80) == 0);
TR0 = 0;
return(TH0 * 256 + TL0);
}

/*
** 软件延时1ms子函数
**/
void Delay_1ms(unsigned int time)
{
unsigned int x, y;
for(x = time; x > 0; x--)
for(y = 120; y > 0; y--);
}

void Buf_beepCmd(void)
{
unsigned char i;
for(i = 0; i < 100; i++)
{
Bee_tp = 0;
}
Delay_1ms(20);
Bee_tp = 1;
}

/*
** 数码管显示遥控器按键值子函数
**/
void Shumg_Display_dataCmd(unsigned char value_bai)
{
delu = 1; /*************** E ***************/
P0 = 0x79;
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xFE;
wela = 0;
Delay_1ms(2);

delu = 1; /*************** - ***************/
P0 = 0x40;
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xFD;
wela = 0;
Delay_1ms(2);

delu = 1; /*************** - ***************/
P0 = 0x40;
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xFB;
wela = 0;
Delay_1ms(2);

delu = 1;
P0 = value_tab[value_bai / 100]; /************** 百位 *************/
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xF7;
wela = 0;
Delay_1ms(2);

delu = 1;
P0 = value_tab[value_bai % 100 / 10]; /************** 十位 *************/
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xEF;
wela = 0;
Delay_1ms(2);

delu = 1;
P0 = value_tab[value_bai % 10]; /************** 个位 *************/
delu = 0;
P0 = 0xFF;
wela = 1;
P0 = 0xDF;
wela = 0;
Delay_1ms(2);
}

/*
** 函数主体
**/
int main(void)
{
INTO_Init();
while(1)
{
Shumg_Display_dataCmd(IR_data[2]);
}
}

/*
** 外部中断服务程序
**/
void INTO_timero()interrupt 0
{
unsigned char i;
unsigned char temp;

IR_dat = 1;
IR_boke = IR_Interrupt_LSB();
if((IR_boke < IR_8500) || (IR_boke > IR_9500)) /*******判断低电平引导码9ms********/
{
return;
}

IR_boke = IR_Interrupt_MSB();
if((IR_boke < IR_4000) || (IR_boke > IR_4500)) /******判断高电平引导码4.5ms******/
{
return;
}
IR_vnum = 3;
for(i = 1; i < 43; i++)
{ /******电视遥控器是42位编码*******/
IR_temp >>= 1;
IR_boke = IR_Interrupt_LSB();
if((IR_boke < IR_200) || (IR_boke > IR_800)) /********判断低电平0.56ms*********/
{
return;
}

IR_boke = IR_Interrupt_MSB();
if((IR_boke < IR_200) || (IR_boke > IR_2000)) /********判断高电平1.68ms********/
{
return;
}

if(IR_boke > IR_1120) /*********判断键码1还是0**********/
{
IR_temp |= 0x80;
}
if(i == 13 || i == 26 || i == 34 || i == 42)
{
IR_vnum++;
if(IR_vnum == 4)
{
IR_vnum = 0;
}
IR_data[IR_vnum] = IR_temp;
IR_temp = 0;
}
}

if((IR_data[0]) != (~ IR_data[1]) || (IR_data[2]) != (~ IR_data[3])) //判断用户吗和按键码
{
return;
}
temp = IR_data[2] / 16;
IR_data[2] = IR_data[2] % 16;
IR_data[2] = IR_data[2] + temp * 10; //得到的十六进制键码头转换成十进制数
Buf_beepCmd();
}

  • 閬ユ帶鍣ㄦ寜涓嬩粈涔堥敭鏁扮爜绠″氨鏄剧ず浠涔堢殑51鍗曠墖鏈虹孩澶朿绋嬪簭,鏈濂借兘缁欎竴...
    绛旓細閬ユ帶鍣ㄤ笂1-9浼氬湪鏁扮爜绠′笂瀵瑰簲鏄剧ず ---*/ include<reg52.h> //鍖呭惈澶存枃浠讹紝涓鑸儏鍐典笉闇瑕佹敼鍔紝澶存枃浠跺寘鍚壒娈婂姛鑳藉瘎瀛樺櫒鐨勫畾涔 sbit IR=P3^2; //绾㈠鎺ュ彛鏍囧織 define DataPort P0 //瀹氫箟鏁版嵁绔彛 绋嬪簭涓亣鍒癉ataPort 鍒欑敤P0 鏇挎崲 sbit LATCH1=P2^2;//瀹氫箟閿佸瓨浣胯兘绔彛 娈甸攣瀛 sbit LATC...
  • 鎴戞棤绾跨數涓嶆噦,绾㈠鍐欒繃51鍗曠墖鏈鐨勬敹鍙绋嬪簭,鍙垜涓嶄細鍒朵綔閬ユ帶鍣...
    绛旓細2锛夎浇娉:甯哥敤鐨勬湁33K,36K,36.6K,38K,40K,56K,鏃犺浇娉 3锛夊崰绌烘瘮:甯哥敤鐨勬湁1/3,1/2,涓嶅父鐢1/4 4锛夎皟鍒舵柟寮:鑴夊璋冨埗,鐩镐綅璋冨埗锛岃剦鍐蹭綅缃皟鍒 1.2 绾㈠瑙g爜鍘熺悊 鏈浣滀笟閫夌敤鐨勬槸NEC鍗忚缂栫爜鐨勶紝鐢38K杞芥尝璋冨埗鐨绾㈠缂栫爜銆傚熀浜51鍗曠墖鏈鐨勭紪鐮佺幆澧冿紝缂栫▼璇█涓篊51銆 鍘熺悊妗嗗浘濡備笅锛1.3 NEC缂栫爜...
  • 姹51鍗曠墖鏈+1602瀹炵幇绾㈠璁℃暟鍣ㄧ殑鏄剧ずc绋嬪簭,闄勪笅 鏁扮爜绠$▼搴,鐜板湪瑕...
    绛旓細; //16*2鏄剧ず锛5*7鐐归樀锛8浣嶆暟鎹 delay(1);lcd_wcmd(0x0c); //鏄剧ず寮锛屽叧鍏夋爣 delay(1);lcd_wcmd(0x06); //绉诲姩鍏夋爣 delay(1);lcd_wcmd(0x01); //娓呴櫎LCD鐨勬樉绀哄唴瀹 delay(1);} 娣诲姞瀹屼箣鍚庡湪main鍑芥暟涓坊鍔犲垵濮嬪寲LCD鐨勫嚱鏁 渚嬪 void main(void){ ...
  • 鐢51鍗曠墖鏈鍐欎竴涓C绋嬪簭,绾㈠绾垮弽灏勭寮鍏崇▼搴忔帶鍒朵竴涓狶ED鐨勪寒鐏璤鐧惧害...
    绛旓細绾㈠鍙嶅皠绠 楂樹綆鐢靛钩杈撳嚭鎺1.0 led鎺1.1 绋嬪簭濡備笅锛歩nclude"regc51.h"sbit IR=P1^0;sbit led=P1^1;main(){ while(1) { led=IR; }}
  • 涓轰粈涔堟垜杩欎釜51鍗曠墖鏈虹孩澶绾绋嬪簭鐢ㄤ笉浜
    绛旓細鎴戝府浣犵湅浜嗕竴涓嬶紝娌″彂鐜颁唬鐮佷笂鏈夋槑鏄剧殑闂锛屽缓璁綘鎸夌収鎴戣鐨勬楠よ嚜宸辫皟璇曚竴涓嬨1銆佸皢main鍑芥暟閲岄潰鐨凩ED娉ㄩ噴鎺夈2銆佷娇鐢≒0=LED[涓嶄竴鏍风殑鍊糫锛屾坊鍔犲埌绾㈠瑙g爜鐨勪唬鐮侀噷闈備緥濡傦紝濡傛灉鏁扮爜绠℃樉绀1锛屽垯琛ㄦ槑P0=LED[1]涔嬪墠鐨勪唬鐮佽兘澶熻杩愯锛屼篃灏辨槸寮曞鐮9ms鐨勪綆鐢靛钩鑳藉琚瘑鍒備綘鍙互澶氭坊鍔犲嚑鏉★紝鐪...
  • 鍗曠墖鏈虹孩澶鐨勬椂搴
    绛旓細鍗曠墖鏈洪噰鐢ㄥ閮ㄤ腑鏂璉NTI绠¤剼鍜岀孩澶栨帴鏀跺ご鐨勪俊鍙风嚎鐩歌繛锛屼腑鏂柟寮忎负杈规部瑙﹀彂鏂瑰紡銆傚苟鐢ㄥ畾鏃跺櫒0璁$畻涓柇鐨勯棿闅旀椂闂达紝鏉ュ尯鍒嗗墠瀵肩爜銆佷簩杩涘埗鐨勨1鈥濄佲0鈥濈爜銆傚苟灏8浣嶆搷浣滅爜鎻愬彇鍑烘潵鍦ㄦ暟鐮佺涓婃樉绀恒// 瑙g爜鍊煎湪Im[2]涓紝褰揑rOK=1鏃惰В鐮佹湁鏁堛/* 51鍗曠墖鏈虹孩澶閬ユ帶瑙g爜绋嬪簭 */ //鐢ㄩ仴鎺у櫒瀵瑰噯绾㈠鎺ユ敹...
  • 鍗曠墖鏈篊璇█瀹炵幇绾㈠鑴夊啿璁℃暟璁$畻杞﹂
    绛旓細浠51鍗曠墖鏈 12MHz鏅舵尟鎯呭喌涓嬩负渚 define STAYTIME 781//瀹氭椂200ms 鍏朵粬鏃堕棿鍙互鑷繁绠 int tcount,p_count;double speed;void t0_init(void){ TH0=0x00;TL0=0x00;TMOD|=0x02;ET0=1;TR0=1;IT0=1;//澶栭儴涓柇涓嬮檷娌胯Е鍙 EX0=1;} void pulse_int(void) interrupt 0 { p_count++;} vo...
  • ...绗竴娆″紑,绗簩娆″叧,姣斿P0^1寮鍚叧闂C璇█浠g爜?楂樻墜璇疯繘...
    绛旓細绗簩锛屼负浜嗛伩鍏嶄竴娆℃寜閿紝澶氭瑙﹀彂锛屽鎸夐敭鍊兼搷浣滃悗锛岄渶瑕佽繘琛屾竻闄ゅ鐞嗭紱锛堝嵆璧嬪兼垚鏃犳晥鐨勬寜閿硷級锛屽 IrValue[2]=0xff锛涳紙濡傛灉娌℃湁鎸夐敭鏄 0xff鐨勮瘽锛夌涓夛紝鏈姝g‘鐨勫仛娉曟槸锛屾敹鍒伴仴鎺у悗锛岄澶栨彁渚涗竴涓爣蹇椾綅锛堝 IR_UpdateFlag锛夛紝绋嬪簭璇嗗埆鏍囧織浣嶅悗锛岃繘琛屾寜閿夋嫨锛屽鐞嗗畬鎸夐敭鍚庯紝娓呴櫎鏍囧織浣嶃傝繖鏍...
  • 51鍗曠墖鏈篊绋嬪簭
    绛旓細sfr P0M1 = 0X93; //杩欎簺鏄瀹氫箟瀵勫瓨鍣ㄧ殑鍦板潃鐨 sfr P0M0 = 0X94; // 鍦ㄧ紪璇戣繃绋嬩腑浼氭妸 POM1涔嬬被鐨勪笢瑗垮彉鎴愯繖浜涘湴鍧 sfr P1M1 = 0X91; //mcu鍦ㄨ繍琛屼腑涔熸槸瀵硅繖浜涘湴鍧鎿嶄綔鐨 sfr P1M0 = 0X92;sfr P2M1 = 0X95;sfr P2M0 = 0X96;uchar CONT_1...
  • 璋佸彲浠ュ憡璇夋垜涓涓叧浜51鍗曠墖鏈鐨勬暟瀛楁俯搴﹁C绋嬪簭鍟
    绛旓細sbit TMDAT =P3^3; //DS18B20 鐨勬暟鎹緭鍏/杈撳嚭鑴欴Q,鏍规嵁鎯呭喌璁惧畾 unsigned int sdata;//娴嬮噺鍒扮殑娓╁害鐨勬暣鏁伴儴鍒 unsigned char xiaoshu1;//灏忔暟绗竴浣 unsigned char xiaoshu2;//灏忔暟绗簩浣 unsigned char xiaoshu;//涓や綅灏忔暟 bit fg=1; //娓╁害姝h礋鏍囧織 ///*鏄剧ず寤舵椂绋嬪簭*/// void Delay(u...
  • 扩展阅读:51单片机时钟c程序 ... 51单片机遥控小车编程 ... 51单片机简单时钟程序 ... 51单片机三角波程序 ... 51单片机红外接收程序 ... 手机上编程51单片机 ... 51单片机如何接摄像头 ... 人体红外感应传感器 ... 51单片机自制红外遥控器 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网