没有合适的资源?快使用搜索试试~ 我知道了~
首页红外遥控玩具小车驱动程序
红外遥控玩具小车驱动程序

其中包括红外编码程序,红外解码程序以及小车驱动程序,在自动模式下小车还可以完成自动寻迹和壁障。
资源详情
资源评论
资源推荐

附录一 程序代码
红外遥控编码程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define uintlong unsigned long
sbit p3_0=P3^0;
sbit p2_1=P2^1;
sbit p1_0=P1^0;
sbit p1_1=P1^1;
sbit p1_2=P1^2;
sbit p1_3=P1^3;
bit out;
uint keyvalue=0x00,flag_key=0,value1,value2,keycount=0,i,j,flag_set=0,
flag_press=0;
uchar code keycode[4]={0x7f,0xbf,0xdf,0xef};
uchar code
portvalue[12]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x00,
0x0b};
uchar code wy[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//**********红外发送部分**********//
uchar user1=0x00,user2=0x00;
uint count=0,endcount=0;
uint irdata=0;
void deltime(void);
void key_scan(void);
void sendirdata(void);

main(void)
{
EA = 1;
TMOD = 0x11;
ET0 = 1;
p3_0=1;
P1=0xff;
TH0 = 0xFF;
TL0 = 0xE4;
TR0 = 0;
while(1)
{
key_scan();
if(flag_press==1)
{
flag_press=0;
TR0=1;
sendirdata();
}
}
}
//**********按键扫描***********//
void key_scan(void)
{
for(i=0;i<=3;i++)
{
P1=keycode[i];

if(p1_3==0)
{keycount=i*3+0;flag_key=1; break;}
if(p1_2==0)
{keycount=i*3+1;flag_key=1;break;}
if(p1_1==0)
{keycount=i*3+2;flag_key=1;break;}
}
if(flag_key==1)
{
flag_key=0;
value1=P1;
deltime();
value2=P1;
if(value1==value2)
{keyvalue=portvalue[keycount];flag_set=1;flag_press=1;}
while(flag_set)
{value2=P1;
if(value1!=value2)
flag_set=0;
}
}
}
//**********延时**********//
void deltime(void)
{
uint k;
for(k=0;k<=20;k++)

{ }
}
//**********定时中断**********//
void time0int(void) interrupt 1
{
TH0=0xFF;
TL0=0xE4;
count++;
}
//**********发送数据**********//
void sendirdata()
{
uchar s=0,datapd=0;
endcount=320;
p3_0=0;
count=0;
do{}while(count<endcount);
endcount=180;
count=0;
p3_0=1;
do{}while(count<endcount);
for(s=0;s<=11;s++)
{
endcount=20;
count=0;
p3_0=0;
do{}while(count<endcount);

endcount=20;
count=0;
p3_0=1;
do{}while(count<endcount);
}
irdata=keyvalue;
for(s=0;s<=7;s++)
{
datapd=irdata & wy[s];
if (datapd==0)
{endcount=20;count=0;}
else
{endcount=60;count=0;}
p3_0=0;
do{}while(count<endcount);
endcount=20;count=0;
p3_0=1;
do{}while(count<endcount);
}
irdata=keyvalue;
for(s=0;s<=7;s++)
{
datapd=irdata & wy[s];
if (datapd==0)
{endcount=60;count=0;}
else
{endcount=20;count=0;}
剩余22页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1