1 / 17
文档名称:

红外遥控器设计-用单片机制作通用性电视遥控器.docx

格式:docx   大小:149KB   页数:17页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

红外遥控器设计-用单片机制作通用性电视遥控器.docx

上传人:1660287**** 2022/5/6 文件大小:149 KB

下载得到文件列表

红外遥控器设计-用单片机制作通用性电视遥控器.docx

文档介绍

文档介绍:夭律城建衣修课程设计任务书
2013 —2014学年第1学期控制与机械工程学院 电气工程及其自动化专业 2 班级
课程设计名称: 单片机原理及应用A设计题目: 用单片机制作通用型电视通控器
完成期限:自 2014年1月— 日至 201接收线接通,于是接受线被拉成低电平。
8条接受线逻辑相与之后的统一信号作为AT89C52的一个外部中断输入,这样有键按下时就将引起中 断。中断服务程序对所按的键进行鉴别。如果是多个键同时按下则不做任何反应,若是单键按下,则将信 息转换成响应的输出。
通常,当无键按下且无其他任务时,微控制器处于空闲状态。当矩阵有键按下,则产生中断,从而结 束空闲状态。中断服务程序首先调用一段延时程序(10ms~~20ms左右),等待键的抖动消失,然后才对所 按的键进行处理。
首先接收线的现状态被存入内部的寄存器中,若是单一键按下,则接收线除一位外其余各位均为1, 此后向接受线写0,扫描线写1,并随之读扫描线,若是单一键按下,则扫描线除一位外其余各位均为1, 根据两组线中零的位置即可确定按下的是哪一个键,若矩阵中同时有多个键按下,则每组线中0的个数不 止一个。
SCAN扫描程序可以确定每组线中那一个为零,是否有多个零等。再调用此程序前,应将所读组线的数 据存入一个可按位寻址的片内RAM单元。自这段程序返回时,ZER0 CNT单元中包含有LINE单元中0的个 数。若只有一位为0,则0的位置保存在ZER0_BIT单元中。
按键所引起的中断有如下的中断服务程序:

遥控器之间的本质区别就在于编码的不同。不同的编码,其发射和接受的原理不同。常用的编码格式 有脉冲编码和脉宽编码。这里采用脉冲个数进行编码。
采用脉冲个数进行编码,不同的脉冲个数代表不同的码,最小为两个脉冲,依次递加,为了接受可靠, 第一位码宽为3ms,其余为1ms,遥控码数据桢之间的间隔大于10ms,当某个操作键按下时单片机先读出键 值,然后再根据键值设定遥控码的脉冲个数,再调制成38KHZ的方波发射出去
返回
yy
图10遥控码发射流程图编码的格式比较多,其相对应的发射格式也比较多,但其原理都是一样的。在这里画出脉冲个数编码的发 射流程图。在用脉冲个数进行中,不同的脉冲个数代表不同的码。最小为两个脉冲,依次递加,为了接受 可靠,第一位码宽为3ms,其余为1ms。直至按键所对应的脉冲个数发射完毕为止。
^include <reg51. h>
#include<intrins. h>
^define uchar unsigned char
^define uint unsigned int
/******************** *弓 | 脚定 义 ********************/
^define out P2
^define outk Pl
/********************* 函 数申明 ******************** /
void delayms(uint);
uchar scan(void);
/***************** 共阳 数码管编码表 ****************/
uchar seg[] = (0xc(), 0xf9, 0xa4, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x9(), 0x88, 0x83, 0xc6, Oxal, 0x86, 0x8e};
********************* - r ^^********************** /
void main(void)uchar key; wh iIe(1)
key=scan();if(key!=16)out=seg[key];}
)/********************* 延时 函 数 ********************/ void delayms(uint j)
for(; j>0; j—);
)/********************* 键盘处理 ********************/ uchar scan(void)
uchar k=16, m, n, in;
outk=0xf0; //扫描所有行
if((outk&0xf0)!=0xf0)for(m=0;m<4;m++)
outk=^ (0x01 «m);for(n=0;n<4;n++)
in=outk; in=in»(4+n); if((in&0x01)=0)dclayms(lO);
i f((i n&OxO1)==0){k=n+m*4;break;} )}
if(k!=16)(break;}}
}
return (k)