单片解码红外遥控器lcd显示.docx
- 文档编号:11883927
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:14
- 大小:431.24KB
单片解码红外遥控器lcd显示.docx
《单片解码红外遥控器lcd显示.docx》由会员分享,可在线阅读,更多相关《单片解码红外遥控器lcd显示.docx(14页珍藏版)》请在冰豆网上搜索。
单片解码红外遥控器lcd显示
单片机原理课程设计与调试
课题名称:
遥控器红外解码数液晶显示
专业班级:
电子信息科学与技术
(2)班
学生学号:
1114040218
学生姓名:
刘家玲
设计时间:
2013年6月17日
遥控器红外解码数液晶显示
一.红外遥控器编码
遥控器编码分好几种,常见的32位编码码和42位编码码,目前我手中遥控器就是42位编码,如图1所示,当有按键时就会产一个9.12ms低电平和4.5ms高电平的起始码,紧接着是26位系统码,此系统码能区别不同的电器设备,防止不同机种遥控码互相干扰,接下来是8位数据码和8位数据反码,间隔23ms的高电平后,再发一个与启始码完全一样的结束码:
控制整个电路的运行。
其外围电路主要有两部分:
复位电路和晶体振荡器。
二、电路图
三、调试
4、解码
就对其进行解码,所谓解码就是能用单片机把以不同宽度的脉冲区别开来,一种比较好思路就是计算两次下降沿间隔时间,当单片机外部中断1口有下降沿时中断一次,并启动定时器,定时器定50us,当下次下降沿到来时我们计算定时器中断的次数,这样我们就能很好的区分不同宽度的脉冲了。
实际上,我们红外接收头收到的信号的是有毛刺的,放大后就如下图,所以在下降沿中断触发后,要做延时去抖处理:
五、完整解码程序
ORG0000H
AJMPMAIN;转入主程序
ORG0003H;外部中断P3.2脚INT0入口地址
AJMPINT
MAIN:
SETBEA;打开CPU总中断请求
SETBIT0;设定INT0的触发方式为脉冲负边沿触发
SETBEX0
LJMPSTARTUP1(C:
01FD)
LJMPEX0_ISR(C:
00A2)
INCirtime(0x22)
RETI
NOP
NOP
INTO:
LJMPtim0_isr(C:
0006)
MOVA,IRcord(0x33)//处理客户码十六进制高位
SWAPA
ANLA,#0x0F
MOVDPTR,#Tab(0x0145)
MOVCA,@A+DPTR
MOVTempData(0x23),A
MOVA,IRcord(0x33)
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x24,A
MOV0x25,#0x2D//处理客户码
MOVA,0x34
SWAPA
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x26,A
MOVA,0x34
MOVCA,@A+DPTR
MOV0x27,A
MOV0x28,#0x2D//处理数据码
MOVA,0x35
SWAPA
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x29,A
MOVA,0x35
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x2A,A
MOV0x2B,#0x2D//处理数据反码
MOVA,0x36
SWAPA
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x2C,A
MOVA,0x36
ANLA,#0x0F
MOVCA,@A+DPTR
MOV0x2D,A
MOVR3,#0x00
MOVR2,#0x00
TempData:
MOVR1,#TempData(0x23)
MOVR5,#0x01
MOVR7,#0x05
LCALLLCD_Write_String(C:
0155)//处理完成标志
CLRirpro_ok(0x20.1)//初始化外部中断
RET
LCALLEX0init(C:
0215)//初始化定时器
LCALLTIM0init(C:
01F0)//初始化液晶
LCALLLCD_Init(C:
0109)
MOVR7,#0x14//延时有助于稳定
MOVR6,#0x00
LCALLDelayMs(C:
0198)
LCALLLCD_Clear(C:
0209)//清屏
MOVR3,#0xFF
MOVR2,#0x01
MOVR1,#0x30
LCALL:
LCD_Write_String(C:
0155)
MOVR3,#0xFF
MOVR2,#0x01
MOVR1,#0x3F
MOVR5,#0x01
CLRA
MOVR7,A
LCALLLCD_Write_String(C:
0155)//如果接收好了进行红外处理
JNBirok(0x20.0),C:
009A//红外码处理
LCALLIrcordpro(C:
00D8)
CLRirok(0x20.0)//如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
JNBirpro_ok(0x20.1),C:
0092
LCALLIr_work(C:
000E)
SJMPC:
0092//外部中断0服务函数
PUSH:
PUSHACC(0xE0)//接收红外信号处理
PUSHPSW(0xD0)
MOVPSW(0xD0),#0x00
PUSH0x00
MOVA,irtime(0x22)
CLRC
SUBBA,#0x21
JCC:
00BB
Irtime:
MOVA,irtime(0x22)
SUBBA,#0x3F
JNCC:
00BB
MOV0x21,#0x00//存储每个电平的持续时间,用于以后判断是0还是1
ADDA,0x21
MOVR0,A
MOV@R0,irtime(0x22)
MOVirtime(0x22),#0x00
INC0x21
MOVA,0x21
CJNEA,#0x21,C:
00D1
SETBirok(0x20.0)
MOV0x21,#0x00
POP0x00
POPPSW(0xD0)
POPACC(0xE0)
RETI//红外码值处理函数
MOVR6,#0x01
CLRA
MOVR5,A
MOVR4,#0x01
MOVA,#irdata(0x37)
ADDA,R6
MOVR0,A
MOVA,@R//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
SETBC
SUBBA,#0x07
JCC:
00EB
ORL0x07,#P0(0x80)
MOVA,R4
CLRC
MOVR7,A
INCR6
INCR4
CJNER4,#0x09,C:
00DE
MOVA,#IRcord(0x33)
ADDA,R5
CJNER5,#0x04,C:
00DC//处理完毕标志位置1
SETBirpro_ok(0x20.1)/*显示模式设置*/
LCALLC:
0179
MOVR7,#0x05
MOVR6,#0x00
LCALLDelayMs(C:
0198)
LCALLC:
0179/*显示关闭*/
MOVR7,#0x08
LCD_Write_Com:
LCALLLCD_Write_Com(C:
0187)//显示清屏
MOVR7,#0x01
LCALLLCD_Write_Com(C:
0187)//显示光标移动设置
MOVR7,#0x06
LCALLLCD_Write_Com(C:
0187)
LCALLDelayMs(C:
0198)
MOVR7,#0x0C
LJMPLCD_Write_Com(C:
0187)
MOV@R1,#0x77
MOV@R1,#0x2E
JNB0x26.1,C:
017A
ADDCA,#0x35
ORLA,@R0
MOVR6,0x07
MOVA,R5
JNZC:
015F//表示第一行
ADDA,#P0(0x80)
SJMPC:
0162//表示第二行
MOVA,R6
ADDA,#0xC0
LCALLLCD_Write_Com(C:
0187)
LCALLC?
CLDPTR(C:
01B6)
MOVR7,A
JZC:
0178
LCD_Write_Data:
LCALLLCD_Write_Data(C:
01CF)
MOVA,#0x01
SJMPC:
0166
MOVR7,#0x38
LCALLLCD_Write_Com(C:
0187)
MOVR7,#0x05
MOVR6,#0x00
LCALLDelayMs(C:
0198)
MOVR7,#0x38
LCD_Check_Busy(C:
01E0)
LCD_Write_Com(C:
0187)
CLRRS(0x90.0)
CLRRW(0x90.1)
JNZDelayMs(C:
0198)
DECR6
SJMPDelayMs(C:
0198)
CJNER3,#0x01,C:
01BF
MOVDPL(0x82),R1
MOVDPH(0x83),R2
CJNER3,#0xFE,C:
01C8
MOVXA,@R1
MOVDPL(0x82),R1
MOVDPH(0x83),R2
MOVCA,@A+DPTR
BUSY:
LCALLLCD_Check_Busy(C:
01E0)//忙则等待
JCLCD_Write_Data(C:
01CF)
SETBRS(0x90.0)
CLRRW(0x90.1)
SETBEN(0x90.2)
MOVP0(0x80),R7
CLREN(0x90.2)
MOVP0(0x80),#0xFF
CLRRS(0x90.0)
SETBRW(0x90.1)
CLREN(0x90.2)
SETBEN(0x90.2)
MOVA,P0(0x80)
MOVTMOD(0x89),#0x02//定时器0初始化
CLRA//重载值
MOVTH0(0x8C),A//定时器0工作方式2,TH0是重装值,TL0是初值
MOVTL0(0x8A),A//初始化值
SETBET0(0xA8.1)//开中断
SETBTR0(0x88.4)//计时开始
MOVR0,#IDATALEN-1
MOVR0,#0x7F
MOV@R0,A
MOV@R0,A
DJNZR0,IDATALOOP
DJNZR0,IDATALOOP(C:
0200)
MOVSP(0x81),#0x57
LJMPmain(C:
0066)
MOVR7,#0x01
LCALLLCD_Write_Com(C:
0187)
MOVR7,#0x05
MOVR6,#0x00
LJMPDelayMs(C:
0198)
SETBIT0(0x88.0)//使能外部中断
SETBEX0(0xA8.0)//开总中断
SETBEA(0xA8.7)
RET
END
6、心得体会
通过单片机解码红外遥控lcd1602的显示,让我对红外模块有了新的认识。
这次设计运用到的知识很多方面,尤其是单片机,像AT89C51,引脚多,硬件内部线路接通,所以用起来很方便,还有lcd1602与单片机之间的连接,以及如入使用lcd。
要对其时序图有深入的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片 解码 红外 遥控器 lcd 显示
![提示](https://static.bdocx.com/images/bang_tan.gif)