1、效果图 2、发射码格式 3、38KH载波发射(完整的发射图) 4、0 与 1的区别 5、载 波 6、小结 7、代码
发射码格式
38KH载波发射(完整的发射)
0与1的区别
载 波
小 结 1、发射端发射出来的是高电平。但是接收到的是低电平。(接收到的数据与发射的相反) 2、我这里用的外部下降沿触发的中断 3、使用12M的晶振完 4、整源码下载地址:http://www.51hei.com/f/hongc.rar 代码
#include <reg51.h>
sbit =P3^2; //红外标志
sbit dm = P2^2; //段码
sbit wm = P2^3; //位码
unsigned char hc[8]; //显示缓存
unsigned char []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码。显示的位置
unsigned char sj[33]; //接收脉冲时间数组
char w=0; //数码管显示缓存指针(0~7)
unsigned char i; //脉冲个数记录
unsigned char mcsj; //脉冲时间(大于0.56ms小于1.125ms为0,大于1.125ms小于2.25ms)
bit MC=0; //接收红外脉冲开始标志(0:脉冲已经结束,1:脉冲刚开始)
bit JS=0; //脉冲接收结束标志位(1标志接收结束)
bit JM=0; //解码完成标志位(1:解码完成)
void Delay(unsigned char f);
void dsq_0() interrupt 1 using 1 //定时器T0中断服务函数
{
mcsj++; //256
}
void wbzd_0() interrupt 0 //外部中断服务函数
{
if(MC)
{
if(mcsj>32) //判断是不是引导码。(如果是i=0)
i=0;
sj[i]=mcsj; //把脉冲时间存入sj这个数组里
mcsj=0; //清空脉冲时间准备接收下一个脉冲时间
i++;
if(i==33) //判断是否接收完脉冲时间
{
i=0;
JS = 1; //接收完成标志位置1
MC=0; //红外脉冲结束
}</