📄 hongwaifashe.c
字号:
/***********************************************/
/* copyright(c) */
/* Author:jiedin */
/* data:2008.6.3 */
/* 红外线发射,信息发送成功,红外接收解码正确*/
/***********************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/***************************/
//变量定义***********///////
uint count,endcount,i,j,k,t,howaddr1,howaddr2;
static uchar howdat;
static flag;
sbit P30=P1^3;
/***********************/
//函数声明************//
void delay(uint );
void sencode(uchar );
/***********************/
//函数部分************//
void delay(uint t)
{
while(--t);
}
/*****************/
//中断函数部分**//
void time0(void) interrupt 1 //用定时器做为载波发生器,振荡频率为f0(38kHz)。编码信号f1对f0进行调制。
{
count++;
if(flag==1)
P30=~P30;
else
P30=0;
}
/************************/
//主函数部分*****///////
void main(void)
{
count=0;
P30=0;
flag=0;
TMOD=0X02;
TH0=(256-26); //计数初值精确到25.99US
TL0=(256-26);
ET0=1;
TR0=1;
howaddr1=0x00;
howaddr2=0xff;
EA=1;
while(1)
{ //混频输出引脚。
delay(6500); //间隔一段时间再进行第二次发送
delay(6550);
sencode(0x1d);//将数据10发射出去*/
}
}
/*******************************/
//代码转换发射函数部分***///////
void sencode( uchar howcode)
{ uchar i;
endcount=690;
count=0;
flag=1;
do
{
}
while(count<=endcount); //将9ms高电平混频发射出去
endcount=345; //常数已定
count=0;
flag=0;
P30=0;
do
{
}while(count<=endcount); //4.5ms低电平
//******
howdat=howaddr1; //address1 ,发送用户码1
for(i=8;i>0;i--) // 0.56ms的高电平<>
{ endcount=38; //常数已定
count=0;
flag=1;
do
{
}while(count<=endcount);
if(howdat-(howdat/2)*2) // 低平的时间长度为1.68ms
{
endcount=125; //
}
else
{ // 低电平的时间长度为0.565ms
endcount=39; //
}
count=0;
flag=0;
do //开始 混频且为持续的低电平
{
}
while(count<=endcount);
howdat=howdat>>1;
}
howdat=howaddr2; //address2
for(i=8;i>0;i--)
{
endcount=38; //常数已定
flag=1;
count=0;
do
{
}
while(count<=endcount);
if(howdat-(howdat/2)*2)
{
endcount=125;
}
else
{
endcount=39;
}
count=0;
flag=0;
do
{
} while(count<=endcount);
howdat=howdat>>1;
}
//*******
howdat=howcode;
for(i=8;i>0;i--)
{
endcount=38; //常数已定
count=0;
flag=1;
do
{
}while(count<=endcount);
if(howdat-(howdat/2)*2)
{
endcount=125;
}
else
{
endcount=39;
}
count=0;
flag=0;
do
{
}while(count<=endcount);
howdat=howdat>>1;
}
howdat=~howcode;
for(i=8;i>0;i--)
{
endcount=38; //常数已定
count=0;
flag=1;
do
{
}while(count<=endcount);
if(howdat-(howdat/2)*2)
{
endcount=125;
}
else
{
endcount=39;
}
count=0;
flag=0;
do
{
}while(count<=endcount);
howdat=howdat>>1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -