基于51单片机的NEC红外解码要点详解.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“ ” “ ” 基于51单片机的NEC红外解码 张静 高佳华 NEC编码 头码: 9ms高电平 + 4.5ms低电平 码0: 0.56ms高电平 + 0.56ms低电平 码1: 0.56ms高电平 + 1.68ms低电平 结束位: 0.56ms高电平 发码顺序为先发低位再发高位 单键码:头码+16位系统码+8位数据码+8位数据码反码 连续键码(发简码):9ms高电平 + 2.25ms低电平 简码重复周期:108ms NEC编码 硬件 红外OUT脚接到了单片机P3^3中断接口 需求分析 思想:上升沿中断触发,时间清零 38K载波信号 HS0038 矩形波信号 单片机中断接口 是否有上升沿 /读取时间 /时间清零 引导标志位是否为1 1 时间是否为0、1、2 2 错误,引导标志置0,时间置0,中断置0 有 0 时间是否满足引导码 是 引导标志置1,中断计数置0,时间清零 否 时间清零 0 中断计数+1,数据位移,低位置0 中断计数+1,数据位移,低位置0 中断计数为8/16/24/32 24 数据储存 8 地址储存 16 地址进行相加校验是否成功 失败 所有数据清零 成功 32 数据校验是否成功 否 数据清零 是 输出数据 程序流程图 主函数 TMOD = 0xF0; //将TMOD的低4位定时器0控制部分清零 TMOD |= 0x01; //设置定时器0为方式1 TL0 = 0x33; //设置定时器0初值低8位 TH0 = 0xFE; //设置定时器0初值高8位 TR0 = 1; //启动定时器0 ET0 = 1; //Timer0中断允许 IT1 = 1; //下降沿触发方式 EX1 = 1; //外部INT1中断允许 EA = 1; //开全局中断 LCD1602_init(); //调用1602液晶初始化函 while (1) 定时器中断 void Timer0(void)interrupt 1 { //定时250微秒 TL0 = 0x33; //重新给TL0赋初值 TH0 = 0xFE; //重新给TH0赋初值 tmr_times++;//计时周期自加 //****************************************** } 接收信号中断 0/1判断 void one_zero() { lanth = 0; if ((tmr_times 2) (tmr_times 7))//信号时长 { lanth = 0; } else if ((tmr_times 7) (tmr_times 13)) { lanth = 1; } } 接收信号存储 one_zero();//01判断 code_data = code_data 1;//右移一位以存储信息 if (lanth == 1) { code_data |= 0x80;//最高位为1 } else { code_data = 0x7f;//最高位为0 } tmr_times = 0;//引导时间清零 lanth = 0; 对信号进行校验 if (int_times == 8)//用户地址赋值 { address = code_data; } else if (int_times == 16)//地址检验 { if (code_data + address != 0xff) wrong(); } else if (int_times == 24)//数据码记录 { code_data1 = code_data; } else if (int_times == 32) //数据码校验/校验正确,显示 { int_times = 0; head_ok = 0; if (code_data1 == ~code_data) { flagf = 1; shuju = code_data1; } else flagf = 0; } 错误数据清零 void wrong() { int_times = 0; tmr_times = 0; head_ok = 0; code_data = 0; lanth = 0; flagf = 0; } LCD1602显示 void LCD1602_init(void) { Delay1602(1500); //调用延时函数

文档评论(0)

挺进公司 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档