- /************************************************
- hex文件刷到51hei学习板就可以做解码实验
- BA5104的编码格式:
- 每一帧遥控码的长度为12位,高位在前,包括3位起始码位(110)、2位用户码位、7位指令码位。
- 每一帧遥控码的时间间隔为4T(6.7516ms),其中T=1.6879ms为每一位遥控码的周期。
- 遥控码“0”用1/4T的高电平(0.395ms)、3/4T(1.284ms)的低电平表示,遥控码“1”用3/4T的高电平、1/4T的低电平表示。
- 关-0x01 摇头-0x10 定时-0x08 风类-0x04 开/风速-0x02 彩灯-0x43
- 110 11 1000011=0x0dc3=67 彩灯
- 晶振:11.0592M
- Time: 2018.1.6
- *************************************************/
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- void display();
- void delay(uchar i);
- void zir();
- uint tes,ird0,ird1;
- uchar num,kx,irok;
- uchar ircode[8];
- sbit ir=P3^3; //HS0038接收头OUT端直接连P3.2(INT0)
- void Int1() interrupt 2
- {
- if(!kx)
- {
- tes=TH0*256+TL0; //提取中断时间间隔时长
- TH0=0;
- TL0=0;
- ET0=0;
- TR0=1; //定时中断重新置零
- if((tes>7600)&&(tes<8200)) //4T+3/4T=8.017ms //8246.52777777778微秒-8897.56944444445微秒 8.2465ms-8.8975ms 7.173ms-8.017ms 8.56ms 7000-8200 7.6ms-8.89ms
- {
- kx=1;
- }
- }
- if(!irok&&kx)
- {
- TH0=0xfc;
- TL0=0xf1;
- TR0=1;
- ET0=1;
- }
- }
- void t0()interrupt 1//定时器0中断
- {
- TR0=0;
- ird0=(ird0<<1)|!ir;
- num++;
- if(num>11)
- {
- irok=1;
- zir();
- }//kx=0;num=0;zir();}
- }
- void zir()
- {
- //uchar k;
- if(ird0<<4==ird1<<4)
- {
- //for(k=0;k<8;k++){ircode[k]=ird0>>(7+4-k)&0x01;}//ird0>>(7-k)&0x01;} //二进制显示12-5位
- //for(k=0;k<8;k++){ircode[k]=ird0>>(7-k)&0x01;}//ird0>>(7-k)&0x01;} //二进制显示低8位
- ircode[0]=(ird0>>9&0x07)>>4;
- ircode[1]=(ird0>>9&0x07)&0x0f;
- ircode[2]=(ird0>>7&0x03)>>4;
- ircode[3]=(ird0>>7&0x03)&0x0f;
- ircode[6]=(ird0&0x7f)>>4;
- ircode[7]=(ird0&0x7f)&0x0f;
- }
- else
- {
- ird1=ird0;
- }
- num=kx=irok=0;
- TR0=0;
- ET0=0;
- }
- void main()
- {
- EA=1;
- IT1=1;
- EX1=1;
- TMOD=0x11;
- TH0=0x00;
- TL0=0x00;
- TR0=0;
- ET0=0;
- while(1)
- {
- display();
- }
- }
- void delay(uchar i)
- {
- uchar j,k;
- for(j=i; j>0; j--)
- for(k=125; k>0; k--)
- {
- ;
- }
- }
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit laba=P2^2;
- void display()
- {
- uchar a;
- uchar dis[8];
- uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- for(a=0; a<8; a++)
- {
- dis[a]=ircode[a];
- }
- for(a=0; a<8; a++)
- {
- dula=0;
- P0=table[dis[a]]; //送出要点亮的段
- dula=1;
- dula=0;
- wela=0;
- P0=~(0x01<<a); //依次点亮八个位
- wela=1;
- wela=0;
- delay(5);
- }
- }
复制代码 |