红外线调制的软件实现红外线调制的软件实现
通过定时器的方式对红外数据进行软件编码,再调制到载波发送出去。
//本程序对应11.0592M晶振//
#include
#define uint unsigned int #define uchar unsigned char sbit IR=P1^6; //定义发射端口 sbit speak=P1^1;
bit flag,f2,f4,f8,f16,f32; uchar irtime=0,key; //定义计时变量、键盘取值变量
/*******************定时器0方...
红外线调制的软件实现
通过定时器的方式对红外数据进行软件编码,再调制到载波发送出去。
//本程序对应11.0592M晶振//
#include
#define uint unsigned int #define uchar unsigned char sbit IR=P1^6; //定义发射端口 sbit speak=P1^1;
bit flag,f2,f4,f8,f16,f32; uchar irtime=0,key; //定义计时变量、键盘取值变量
/*******************定时器0方式2初始化函数***************/ void initT0()
{
TMOD=0x02; //方式2
TF0=0; //清溢出标志
ET0=1; //使能定时器0中断
TH0=0; //赋初值
TL0=0;
EA=1; //开总中断 // TR0=1; //启动定时
}
/********************定时器0中断服务函数****************/ void Timer0() interrupt 1 using 1 {
irtime++; //中断计数
switch(irtime)
{
case 2:f2=1;break; //高0.56ms标志位
case 4:f4=1;break; //低0.56ms标志位
case 8:f8=1;break; //地1.68ms标志位
case 16:f16=1;break; //高4.5ms标志位
case 32:f32=1;break; //低4.5ms标志位
}
}
/*********************键盘扫描函数*********************/ //uchar void keyscan(void) //键盘扫描函数,使用行列反转扫描法 void keyscan()
{
/*
uchar cord_h,cord_l; //行列值中间变量
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(400); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l); //键盘最后组合码值
}
}return(0xff); //返回该值 */
key=0xeb;
flag=1; //得到按键值就置标志位
}
/*********************引导码发送函数*******************/ void sendstart()
{
IR=1;
while(!f16);IR=0;f16=0; //高电平4.5ms
while(!f32);IR=1;irtime=0;f32=0; //低电平4.5ms
f2=0; //清零标志位
f4=0;
f8=0;
}
/*******************8位数据发送函数********************/ void sendnum(uchar t)
{
uchar b=0,i;
// t=key;
for(i=0;i<8;i++) //发送8位数据
{
b=t&0x01; //取出地i位
t=t>>1;
if(b==0) //为1时发送
{
IR=1;
while(!f2);IR=0;f2=0; //等待时间 完成 0.56ms
while(!f4);IR=1;irtime=0;f4=0; //0.56ms
}
else //为0时发送
{
IR=1;
while(!f2);IR=0;f2=0; //等待时间完成0.56ms
while(!f8);irtime=0;IR=1;f8=0; //1.68ms
f4=0; //清标志
}
}
}
/*********************终止码发送函数*******************/ /*void sendend() //终止码自由定义 {
sendnum(0x0f);
} */
/*******************16位客户地址码发送函数********************/ void sendadd() //客户地址码自由定义 {
sendnum(0xfb);
sendnum(0xed);
}
/*********************编码发送函数********************/ void send()
{
TR0=1; //启动定时
while(flag)
{
sendstart(); //发送起始码
sendadd(); //发送客户地址码
sendnum(key); //发送数据码
sendnum(~key); //发送数据反码
//sendend(); //发送终止码
irtime=0;
flag=!flag;
}
TR0=0; //关闭定时 }
/*********************主函数**********************/ void main()
{
IR=0;
// P1=0; //复位后赋初值
initT0(); //调用定时器0初始化函数
while(1) //进入循环,实时监控
{
keyscan(); //调用键盘扫描函数
send(); //调用编码发射函数
本文档为【红外线调制的软件实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。