标题:
AT89S52单片机红外遥控部分程序
[打印本页]
作者:
wjh666..
时间:
2018-11-25 20:26
标题:
AT89S52单片机红外遥控部分程序
#include<reg52.h>
#defineuchar unsigned char
#defineuint unsigned int
ucharirtime;
ucharstartflag;
ucharirdata[33];
ucharbitnum;
ucharirreceok;
ucharircode[4];
ucharirprosok;
uchardisplay[8];
ucharcode table[16]="Infrared control";
uchartable1[16]="Nowcode:";
sbitlcden=P3^6;
sbitlcdrs=P3^7;//rw接地
ucharnum;
voidirpros(void)//数据处理函数
{
uchar k=1,i,j;
uchar value;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
}
voidirwork(void)//数据分离函数
{
display[0]=ircode[0]/16;
display[1]=ircode[0]%16;
display[2]=ircode[1]/16;
display[3]=ircode[1]%16;
display[4]=ircode[2]/16;
display[5]=ircode[2]%16;
display[6]=ircode[3]/16;
display[7]=ircode[3]%16;
}
voidnumzh(void)//ASCII码转换函数
{
uchar i,j=8,a;
for(i=0;i<8;i++)
{
switch(display[ i])
[ i]
{
case 0 :a=48;break;
case 1 :a=49;break;
case 2 :a=50;break;
case 3 :a=51;break;
case 4 :a=52;break;
case 5 :a=53;break;
case 6 :a=54;break;
case 7 :a=55;break;
case 8 :a=56;break;
case 9 :a=57;break;
case 10:a=65;break;
case 11:a=66;break;
case 12:a=67;break;
case 13:a=68;break;
case 14:a=69;break;
case 15:a=70;break;
}
table1[j]=a;
j++;
}
}
voidmain()//主函数
{
timer0init();
int0init();
lcdinit();
play_1();
while(1) //循环检测处理
{
if (irreceok)
{
irreceok=0;
irpros();
}
if(irprosok)
{
irprosok=0;
irwork();
numzh();
play_2();
}
}
}
voidtinmer0() interrupt 1//定时器0中断函数
{
irtime++;
}
void int0() interrupt 0// 外部中断0函数,数据接收
{
if(startflag)
{
if (irtime>30)//检测引导吗
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
}
}
else
{
startflag=1;
irtime=0;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1