基于51单片机的红外发射程序
#include
static bit OP;
#define uint unsigned int
#define uchar unsigned char
uchar qishiok,count,key,flag,temp1;
uchar xinhaook,ding,qishiflag,temp2;
uchar temp;endcount,temp3,temp4;
uchar kaiok;
int c=0,d=0,e=0;
sbit key1=P2^7;
sbit key2=P2^6;
sbit key3=P2^5;
uchar shu;
sbit P3_5=P3^5;
void init()
{
TMOD=0x02;
TH0=0xe6;
TL0=0xe6;
EA=1;
ET0=1;
TR0=1;
flag=0;
qishiok=0;
}
void time0() interrupt 1
{
count++;
if(flag)
{P3_5=~P3_5;}
else
{P3_5=1;}
}
void qishi()
{
int a;
count=0;
flag=1;
for(a=0;a
{
endcount=173;
do{}
while(count
count=0;
}
flag=0;
count=0;
endcount=173;
do{}
while(count
count=0;
qishiok=1;
}
void jieshu()
{
int b;
shu=0x02;
count=0;
for(b=0;b
{
flag=1;
do{}while(count
if(shu-(shu/2)*2)
{
ding=45;
}
else
{
ding=15;
}
flag=0;
count=0;
do{}while(ding>count);
count=0;
shu=shu>>1;
}
}
void xinhao(uchar temp)
{
int i;
shu=temp;
count=0;
for(i=0;i
{
flag=1;
do{}while(count
if(shu-(shu/2)*2)
{
ding=45;
}
else
{
ding=15;
}
flag=0;
count=0;
do{}while(ding>count);
count=0;
shu=shu>>1;
}
xinhaook=1;
}
void delay()
{
int i,j;
for(i=0;i
{
for(j=0;j
{
}
}
}
void fashe(temp1,temp2,temp3,temp4)
{
init();
qishi();
xinhao(temp1);
xinhao(temp2);
xinhao(temp3);
xinhao(temp4);
jieshu();
delay();
}
void kaiguan()
{
if(c)
{
fashe(0x09,0x00,0x00,0x50);//开
kaiok=1;
}
else
{
fashe(0x01,0x00,0x00,0x50);//关
kaiok=0;
}
}
void saofeng()
{
switch(e)
{
case 0:
{
if(d)
fashe(0x49,0x00,0x00,0x50);//风速关时扫风开 else
fashe(0x09,0x00,0x00,0x50);//风速关时扫风关 };break;
case 1:
{
if(d)
fashe(0x59,0x00,0x00,0x50);//风速一时扫风开 else
fashe(0x19,0x00,0x00,0x50);//风速一时扫风关 };break;
case 2:
{
if(d)
fashe(0x69,0x00,0x00,0x50);//风速二时扫风开 else
fashe(0x29,0x00,0x00,0x50);//风速二时扫风关 };break;
case 3:
{
if(d)
fashe(0x79,0x00,0x00,0x50);//风速三时扫风开 else
fashe(0x39,0x00,0x00,0x50);//风速三时扫风关 }
}
}
void fengsu()
{
if(d)//扫风开时
switch(e)
{
case 0:
fashe(0x49,0x00,0x00,0x50);break;//风速关 case 1:
fashe(0x59,0x00,0x00,0x50);break;//风速一 case 2:
fashe(0x69,0x00,0x00,0x50);break;//风速二 case 3:
fashe(0x79,0x00,0x00,0x50);break;//风速三 }
}
else//扫风关时
{
switch(e)
{
case 0:
fashe(0x09,0x00,0x00,0x50);break;//风速关 case 1:
fashe(0x19,0x00,0x00,0x50);break;//风速一 case 2:
fashe(0x29,0x00,0x00,0x50);break;//风速二 case 3:
fashe(0x39,0x00,0x00,0x50);break;//风速三 }
}
}
void main()
{
while(1)
{
if(key1==0)
{
while(key1==0);
kaiguan();//开关
c++;
if(c>1)
c=0;
}
else if(key2==0)
{
while(key2==0);
if(kaiok)
saofeng(); d++; if(d>1) d=0; } } else if(key3==0) {
}
}
} while(key3==0) if(kaiok) { fengsu(); e++; if(e>3) e=0; }