ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:18.67KB ,
资源ID:3611130      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3611130.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c51单片机红外解码程序汇总版和c语言版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c51单片机红外解码程序汇总版和c语言版.docx

1、c51单片机红外解码程序汇总版和c语言版纯软件解码-汇编版利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低ORG0000HT0ZDBIT20H.2XHBITP3.3;红外接收头数据接口RSBITP2.3RWBITP2.4EBITP2.5BBBITP3.6ORG0000H;AJMPMAINORG000BH;T0中断入口LJMPT0ZDCXORG0100H;主程序首地址MAIN:LCALLCSHMOVDPTR,#TAB;总查表SETBEA;T0中断设定SETBET0MOVTMOD,#01HDDXH:;信号接收前准备SETBP2.0;关信号指示灯MOVP0,#0FFHC

2、LRTR0;关T0中断CLRT0ZD;接收信号时间判断MOVR5,#4;延时计数MOVTH0,#00HMOVTL0,#00H;=解码主要过程=关键=JBXH,$;等待电平变低,解码从这开始CLRP2.0;开信号指示灯,表示正在接收信号MOVP0,#8EHSETBTR0;开T0中断LCALLYS3MSJBXH,DDXH;干扰检测LCALLYS3MSJBXH,DDXH;干扰检测DD1:JBT0ZD,DDXH;是否超出接收允许时间JNBXH,DD1;等待电平变高LCALLYS3MSJNBXH,DDXH;干扰检测DD2:JBT0ZD,DDXH;是否超出接收允许时间JBXH,DD2;等待电平变低JSSJ

3、:;信号确认,开始接收数据MOVR0,#30HZJ:;接收一个字节数据MOVR2,#8WEI:;位数据,分辩0和1JBT0ZD,DDXH;是否超出接收允许时间JNBXH,WEI;等待电平变高LCALLYS845MOVC,XH;取位数据RRCADD3:JBT0ZD,DDXH;是否超出接收允许时间JBXH,DD3;等待电平变低,为1的高电平提供过度DJNZR2,WEI;8位数据是否接收完MOVR0,AINCR0CJNER0,#34H,ZJ;四字节数据是否接收完MOVA,33HCPLACJNEA,32H,DDXH;键值确认,解码MOVR4,A;=这里已经取出键值,存在R4中=MOVR7,#100;T

4、SY:MOVR6,#255DJNZR6,$CPLBBDJNZR7,TSYMOVA,#0CDH;键值高位输出LCALLYJP_XZLMOVA,R4MOVB,#10HDIVABMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0CEH;键值低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJ;LCALLDYBF;调用灯控制子程序LJMPDDXH;返还等待下一次信号YS845:;延时845微秒MOVR7,#255DJNZR7,$MOVR7,#165DJNZR7,$RETYS3MS:;延时3msMOVR7,#8DDD:MOVR6,#255DJNZR6,

5、$DJNZR7,DDDRETT0ZDCX:;T0中断程序MOVTL0,#00HMOVTH0,#00HDJNZR5,T0FHSETBT0ZDT0FH:RETI;=以下是多余部分=DYBF:MOVA,#0C0H;用号码前高位输出LCALLYJP_XZLMOVA,30HMOVB,#10HDIVABMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0C1H;用户码前低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0C4H;用户码后高位输出LCALLYJP_XZLMOVA,31HMOVB,#10HDIVABMOVCA,A+DPTRLCAL

6、LYJP_XSJMOVA,#0C5H;用户码后低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJ;=此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例MOVA,R4CJNEA,#0CH,BA1;是否1号键按下CPLP1.0;点亮1号灯BA1:CJNEA,#18H,BA2;是否2号键按下CPLP1.1;点亮1号灯BA2:CJNEA,#5EH,BA3;是否3号键按下CPLP1.2;点亮1号灯BA3:CJNEA,#08H,BA4;是否4号键按下CPLP1.3;点亮1号灯BA4:CJNEA,#1CH,BA5;是否5号键按下CPLP1.4;点亮1号灯

7、BA5:CJNEA,#5AH,BA6;是否6号键按下CPLP1.5;点亮1号灯BA6:CJNEA,#42H,BA7;是否7号键按下CPLP1.6;点亮1号灯BA7:CJNEA,#52H,BAB;是否8号键按下CPLP1.7;点亮1号灯BAB:RETCSH:;=液晶初始化=MOVA,#00111000B;8位数据,双行显示,5-7字型LCALLYJP_XZL;调用写液晶指令MOVA,#00001100B;显示屏开启,光标出现在地址计数器位置,光标不闪烁LCALLYJP_XZL;调用写液晶指令MOVA,#00000110B;光标右移一格,AC值加一,字符全部不动LCALLYJP_XZL;调用写液晶

8、指令MOVA,#81H;LCALLYJP_XZLMOVA,#4CH;L的ASCII码LCALLYJP_XSJMOVA,#83H;LCALLYJP_XZLMOVA,#47H;G的ASCII码LCALLYJP_XSJMOVA,#85H;LCALLYJP_XZLMOVA,#58H;X的ASCII码LCALLYJP_XSJMOVA,#88H;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#89H;LCALLYJP_XZLMOVA,#68H;h的ASCII码LCALLYJP_XSJMOVA,#8AH;LCALLYJP_XZLMOVA,#69H;i的ASCI

9、I码LCALLYJP_XSJMOVA,#8CH;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#8DH;LCALLYJP_XZLMOVA,#61H;a的ASCII码LCALLYJP_XSJMOVA,#8EH;LCALLYJP_XZLMOVA,#6FH;o的ASCII码LCALLYJP_XSJMOVA,#0C2H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0C6H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0CAH;LCALLYJP_XZLM

10、OVA,#4AH;J的ASCII码LCALLYJP_XSJMOVA,#0CBH;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#0CCH;LCALLYJP_XZLMOVA,#3AH;:的ASCII码LCALLYJP_XSJMOVA,#0CFH;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJRET;=写指令到液晶=YJP_XZL:LCALLCHECK_BUSY;查询忙碌状态CLRECLRRSCLRRWSETBEMOVP0,A;写指令CLRERET;=写数据到液晶=YJP_XSJ:LCALLCHECK_BUSY;

11、查询忙碌状态CLRESETBRSCLRRWSETBEMOVP0,A;写数据CLRERET;=查询忙碌标志=CHECK_BUSY:PUSHACCBUSY_LOOP:CLRESETBRWCLRRSSETBEMOVA,P0;读取状态JBp0.7,BUSY_LOOPPOPACCLCALLDELRETDEL:MOVR6,#5L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46HEND中断加定时器-C语言版优点:完全是状态解码,极少的占用系统软件资源(CP

12、U),随时都可以解码,而不管系统此时运行到何处。缺点:占用系统两个硬件资源,一个外部中断和一个定时器。/*六哥红外解码程序*/#includeSTC15Fxxxx.H/*/用户配置区:#definexi_tong_pl晶振频率设定如你的系统晶振频率是12MHz,则写#definejan_zhiP1/解码输出二进制端口,解码成功则从该端口输出键值的二进制sbitzhi_s=P55;/解码成功标志,解码成功一次该端口取反一次/外部中断#definezd_rkdzinterrupt0/中断入口设置#definezd_cffsIT0/中断触发方式设置#definezd_dkEX0/中断打开设置/#de

13、finestc_dsqszAUXR&=0x7F;/定时器时钟12T模式,不需要可在AUXR.前加/*/*本程序使用外部中断加定时器来实现红外解码,占用系统软件资*源极少,硬件方面占用了一个外部中断,定时器中断还可以进行*一些简单的运用,软件部分可以做很多的动作,就看你发挥了!*/#defineshi_jian定时器设置,请勿更改unsignedcharhwyhmh,hwyhml,hwjz,hwsj,hwjmws;/全局变量bithwjmok,yxjm;/全局变量,红外解码OK,允许解码voidmain(void)EA=1;/总中断打开zd_cffs=1;/外部中断_边沿触发方式zd_dk=1;

14、/外部中断_打开ET0=1;/定时器中断打开stc_dsqszTMOD&=0xF0; /设置定时器模式TMOD|=0x01; /设置定时器模式while(1)if(hwjmok)hwjmok=0;jan_zhi=hwjz;zhi_s=zhi_s;/*-定时器0中断子程序-*/voidT0ZDCX(void)interrupt1using3yxjm=0;/未收到重复码清除解码允许标志hwjz=0;TR0=0;/关闭定时器/*中断方式红外接收程序*/voidZDhwjsCX(void)zd_rkdzusing3unsignedinta=TH0*256+TL0;TL0=0;TH0=0;TR0=1;/

15、开启T0if(ashi_jian_*13000&ashi_jian_*11000&ashi_jian_*2000&a=1;hwsj|=0x80;elseif(ashi_jian_*1000&a=1;elsehwjmws=32;yxjm=0;/清除允许解码标志TR0=0;/关闭T0/switch(hwjmws)case24:hwyhmh=hwsj;hwsj=0;break;case16:hwyhml=hwsj;hwsj=0;break;case8:hwjz=hwsj;hwsj=0;break;case0:if(hwjz=hwsj)hwjmok=1;TL0=shi_jian_*12000%256;

16、TH0=shi_jian_*12000/256;break;default:;else;中断加定时器-汇编版;*;*六哥红外解码程序*;*/;*;*本程序使用外部中断加定时器来实现红外解码,占用系统软件资*;*源极少,硬件方面占用了一个外部中断,定时器中断还可以进行*;*一些简单的运用,软件部分可以做很多的动作,就看你发挥了!*;*/hwyhmhdata7fhhwyhmldata7ehhwjzdata7dhhwsjdata7chDSQ_ZDCSdata7bhZDCSDATA7AHhwjmokbit20h.0yxjmbit20h.1hwjmweibit20h.2hwjmkgBIT20H.3HWJ

17、STBITP3.3ORG0000HAJMPMAINORG0013HLJMPWBZD1ORG000BHLJMPDSQ_0ORG0050HMAIN:SETBEASETBIT1SETBEX1SETBET0MOVTMOD,#01HCLRhwjmkgCLRyxjmCLRhwjmokHHHH:JBhwjmok,jm_cg;JBC:为1跳转并把该位清零,为0则顺序执行;此部分可写其他程序,不会影响接收LJMPHHHHjm_cg:;这里写解码成功后的动作CLRhwjmokMOVP1,hwjzLJMPHHHH;=WBZD1:INCZDCSMOVA,ZDCSJNByxjm,ZD0_5;CLRTR0MOVTH0,#

18、0FAH;设置定时1400usMOVTL0,#70H;SETBTR0;开定时器XCHA,hwsjMOVC,hwjmweiCLRhwjmweiRRCAXCHA,hwsjCJNEA,#10,ZD0_0;取出用户码高位MOVhwyhmh,hwsjAJMPZD0_4ZD0_0:CJNEA,#18,ZD0_1;取出用户码低位MOVhwyhml,hwsjAJMPZD0_4ZD0_1:CJNEA,#26,ZD0_2;取出键值MOVhwjz,hwsjAJMPZD0_4ZD0_2:CJNEA,#34,ZD0_4;取出键值反码MOVA,hwsjCPLACJNEA,hwjz,ZD0_3;键值判断SETBhwjmok

19、;解码正确,置位标志位ZD0_3:;解码不成功CLRTR0;关闭定时器CLRhwjmkg;关闭解码开关CLRyxjm;清除允许解码标志MOVZDCS,#0;中断次数清零MOVDSQ_ZDCS,#0;定时器中断次数清零ZD0_4:RETI;中断返回ZD0_5:;开始接收引导码CJNEA,#1,ZD0_3;MOVTH0,#0F2H;设置定时3.5msMOVTL0,#54H;SETBTR0;开定时器SETBhwjmkg;开红外解码开关AJMPZD0_4DSQ_0:JNBhwjmkg,T0FH;JNByxjm,DSQ_0_0;SETBhwjmweiCLRTR0T0FH:RETI;=引导码判断程序=DS

20、Q_0_0:MOVTH0,#0F2H;设置定时3.5msMOVTL0,#54H;INCDSQ_ZDCS;对T0中断计数MOVA,DSQ_ZDCSCJNEA,#1,DSQ_0_1JBHWJST,JMCW;判低电平,9ms引导码AJMPT0FHDSQ_0_1:CJNEA,#2,DSQ_0_2JBHWJST,JMCW;判低电平,9ms引导码AJMPT0FHDSQ_0_2:JNBHWJST,JMCW;判高电平,4.5ms引导码SETByxjm;引导码接收成功,允许解码CLRhwjmwei;CLRTR0AJMPT0FHJMCW:;引导码接收错误,CLRTR0;关闭定时器CLRhwjmkg;关闭解码开关CLRyxjm;清除允许解码标志MOVZDCS,#0;中断次数清零MOVDSQ_ZDCS,#0;定时器中断次数清零AJMPT0FHEND定时器捕获中断法-c语言版

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1