📄 红外发送.c
字号:
#include <myincludes.h>
//发送规则:0的时候发 1时停 先发9+4.5ms的开止码 每次发送的32二进制码可分成两部分,
//其中前16位是遥控器辨识码(这里是01010101),主要用于区别不同遥控器,后16位是操作码。
#define dd DC07=1
#define fa PC07=1
//发送
#define ting PC07=0
//停止发送
//PORTC7 做发送
uchar shibiema,data;
/********************************************************************
* 函数说明:1 MS延时程序 *
********************************************************************/
void delay_0_5ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(4*143-2);i++)
;
}
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(8*143-2);i++)
;
}
void Delay_Ms(uint num)
{
uint i;
for(i=0;i<num;i++) delay_1ms();
}
void ray_sent(uchar data)
{ uchar i,data2,shibiema2;
shibiema=0b01010101;
dd;
fa;
Delay_Ms(9); //发9ms的低电平
ting;
Delay_Ms(4);
delay_0_5ms(); //发送开始码与结束码
for(i=0;i<8;i++) //发送8位识别码
{
//二进制数最后是1不能整除2;0才可以
if(shibiema%2==0) //为0
{
fa;
delay_0_5ms();
ting;
delay_0_5ms();
}
if((shibiema%2)!=0) //为1
{
fa;
delay_0_5ms();
ting;
delay_1ms();
delay_0_5ms();
}
shibiema>>i;
}
shibiema2=0xff-shibiema;
for(i=0;i<8;i++) //发送8位识别码的反码
{
//二进制数最后是1不能整除2;0才可以
if(shibiema2%2==0) //为0
{
fa;
delay_0_5ms();
ting;
delay_0_5ms();
}
if((shibiema2%2)!=0) //为1
{
fa;
delay_0_5ms();
ting;
delay_1ms();
delay_0_5ms();
}
shibiema2>>i;
}
for(i=0;i<8;i++) //发送8位数据码
{
//二进制数最后是1不能整除2;0才可以
if(data%2==0) //为0
{
fa;
delay_0_5ms();
ting;
delay_0_5ms();
}
if((data%2)!=0) //为1
{
fa;
delay_0_5ms();
ting;
delay_1ms();
delay_0_5ms();
}
data>>i;
}
data2=0xff-data;
for(i=0;i<8;i++) //发送8位数据码反码
{
//二进制数最后是1不能整除2;0才可以
if(data2%2==0) //为0
{
fa;
delay_0_5ms();
ting;
delay_0_5ms();
}
if((data2%2)!=0) //为1
{
fa;
delay_0_5ms();
ting;
delay_1ms();
delay_0_5ms();
}
data2>>i;
}
}
void main(void)
{
ray_sent(data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -