900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 单片机发射红外c语言程序 STC单片机51简单的红外遥控发射程序C语言

单片机发射红外c语言程序 STC单片机51简单的红外遥控发射程序C语言

时间:2023-11-10 20:37:47

相关推荐

单片机发射红外c语言程序 STC单片机51简单的红外遥控发射程序C语言

/*功能说明:红外发射,用于遥控复制或自制发射器*/

//这里采用1T周期的stc15w102单片机,烧录时晶振选33,要在精准选外部晶振的芯片

#include

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit s1=P3^5; //红外LED

void Delay13us()//@33MHz //产生载波38KHZ

{

unsigned char a;

for(a=104;a>0;a--);

}

void Delay3000ms()//@33MHz 单片机小精灵生成,STC软件生成较长延时时测试不准

{

unsigned char a,b,c,d;

for(d=186;d>0;d--)

for(c=14;c>0;c--)

for(b=86;b>0;b--)

for(a=109;a>0;a--);

}

void L(){ //红外0 以低电平0.565ms,高电平0.565ms表示0

uchar j;

for (j=0;j<43;j++) {s1=~s1;Delay13us();} //低电平0.565ms载波,模拟38KHZ

for (j=0;j<43;j++) {s1=1;s1=1;Delay13us();} //高电平0.565ms无载波

}

void H(){ //红外1;以低电平0.565ms,高电平1685表示1

uchar j;

for (j=0;j<43;j++) {s1=~s1;Delay13us();} //低电平0.565ms载波,模拟38KHZ

for (j=0;j<129;j++) {s1=1;Delay13us();} //高电平1685ms无载波

}

void bit_8(uchar num){ //发送一个8位数据

uchar j;

for (j=0;j<8;j++){ if((num&0x01)==0x00)L(); //低位先发

else H();

num=num>>1;

}

}

void main(void)

{

uint j;

while(1){

Delay3000ms();

//以下开始发送

for (j=0;j<692;j++) {s1=~s1;Delay13us();}//载波发送9ms的起始码

for (j=0;j<346;j++) {s1=1;Delay13us();}//无载波发送4.5ms的结果码

bit_8(0x00);

bit_8(0xff);//前16位用户识别码

bit_8(0x15); //数据

bit_8(~0x15); //数据反码

for (j=0;j<44;j++) {s1=~s1;Delay13us();}//最后载波发送总的结束位

for (j=0;j<3076;j++) {s1=1;Delay13us();}//延时40ms,9ms+4.5ms+32位数据+结束位总共68ms,在延时会到108ms

//以下发送连发码,按键超过108ms时发送,不加也可

for (j=0;j<692;j++) {s1=~s1;Delay13us();}//载波发送9ms的起始码

for (j=0;j<173;j++) {s1=1;Delay13us();}//2.25ms

for (j=0;j<44;j++) {s1=~s1;Delay13us();}//结束位

for (j=0;j<7400;j++) {s1=1;Delay13us();}//在延时96.2ms到108ms,在发送连发码

for (j=0;j<692;j++) {s1=~s1;Delay13us();}//载波发送9ms的起始码

for (j=0;j<173;j++) {s1=1;Delay13us();}//2.25ms

for (j=0;j<44;j++) {s1=~s1;Delay13us();}//结束位

for (j=0;j<7400;j++) {s1=1;Delay13us();}//在延时96.2ms到108ms,在发送连发码

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。