- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电视机红外遥控和接收的制作(完整的电路、程序、照片)
电视机红外遥控和接收的制作
2011-04-28 12:18
红外遥控器发送数据时,是将二进制数据调制成一系列的脉冲信号红外发射管发射出去,红外载波为频率 38KHz
的方波,红外接收端在收到 38KHz 的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的
红外光信号解调成一定周期的连续方波信号,再经过 1838 一体化红外接收头解调便可以恢复出原数据信号。
红外遥控器的原理到处是,这里就不多废话了,直接上图:
程序:
#includereg52.h
#includeintrins.h
#includestdio.h
#define uint unsigned int
#define uchar unsigned char
sbit ir=P3^2 ;
//红外端口
sbit P2_0=P2^0 ; //LED1 端口
sbit P2_1=P2^1 ; //LED2 端口
sbit P2_2=P2^2 ; //LED3 端口
sbit P2_3=P2^3 ; //LED4 端口
sbit P2_4=P2^4 ; //LED5 端口
sbit P2_5=P2^5 ; //LED6 端口
sbit P2_6=P2^6 ; //LED7 端口
sbit P2_7=P2^7 ; //LED8 端口
uchar key_code=0 ;
//遥控键值
uchar new_code=0 ;
//有无新按键
uint buf_key_code=0 ;
//键值暂存
uchar key_bit_count=0 ;
//键编码脉冲计数
uint count 0 ;
//定时中断次数计数
uint buf_count=0 ;
//定时中断计数暂存
uchar common_code_count=0 ;
//前导码脉冲计数
uchar ir_status=0 ;
//脉冲接收器所处的状态,0:无信号,1:系统码接收区,2:数据编码接收区
///延时子程序 10us
void delay_10us(unsigned char y)
{
unsigned char x ;
for(x=y;x0;x--);
}
/////初始化
void init(void)
{
ir=1 ;
//红外端口写 1
EA=1 ;
//开总中断
TMOD=0x02 ;
//定时器 0,模式 2,8 位自动装载模式
TH0=0Xd1 ;
//定时 50us
TL0=0Xd1 ;
IT0=1 ;
//INT1 下降沿触发
ET0=1 ;
//允许定时器中断
EX0=1 ;
//允许外部中断
}
/***********************************************
定时器中断
***********************************************/
///定时器中断
void time0()interrupt 1
{
count++;
//定时器中断次数累加
}
/**********************************************
外部中断,红外解码程序
**********************************************/
///外部中断
void int1()interrupt 0
{
TR0=1 ;
//开定时器中断
//如果信号合法,则放入buf_count,count 清 0,对下一个脉冲信号计时
if(count12count270)
{
buf_count=count ;
count=0 ;
}
delay_10us(10);
//延时 100us 以消除下降沿跳变抖动
//INT1 引脚稳定为低电平, 则表法确实是信号, count 重新计时, 因上面延时了 50us,故要 补偿 1 次 TO 中
断
if(ir
文档评论(0)