程序实现
NEC编码程序用MCS-51系列单片机汇编语言编写而成,PHILIPS编码可以此类推。
NEC、 TOSHIBA、SAMSONG公司的编码格式有其共通之处:遥控全码都由“引导码+系统码+系统码(或系统码取反)+数据码+数据码取反”组成;数据 “0”和“1”的定义相同;不同的只是引导码高低电平的持续时间不同,系统码位数有长有短,第一个简码和全码最后一位之间的延时不同,简码的引导脉冲不同等;所以可以把相同的部分做成通用子程序,包括产生数据“0”和“1”的子程序“ONE”和“ZERO”,9ms、4.5ms、2.25ms、22ms、 45ms等时间控制子程序。
8×8的键矩阵处理,采用外中断的方式,有键按下时,就向CPU发出中断请求,然后按照“先列后排”一个个扫描,从而找出被按下的键,当然这里面还包括了去抖动、多键同时按时只处理一键的处理部分。
机芯的不同状态由单片机P3口的P3.5、P3.4、P3.1、P3.0四位的输入数值来区分判断,比如“0000”表示工作于东芝TC90××系列状态,“0001”则表示要求工作于NEC公司的PD61××系列状态。
判断了是哪一只键按下以及处于机芯的哪种状态以后,程序就严格按照相应的遥控编码方式来进行遥控码的发射,也就是说将一定时段、一定数值的电平脉冲调制在38KHz载波上,逐一发射出去。
流程图如图5所示
图5 程序流程图
部分程序段:
这里给出的是产生NEC遥控码的主要部分,而像键扫描等较常见的程序段就不再提供.
主程序初始化部分:
ORG 100H
main: mov psw,#0 ;
mov sp,#30h ;设置堆栈
mov tmod,#02h ;方式2定时
mov th0,#0f3h ;38KHZ方波时间数
mov p2,#0 ;
mov p0,#0ffh
setb ex0 ;允许外中断0
setb pt0 ;外中断0(有键按下)优先
clr it0 ;电平触发方式
clr mdl ;设有无按键的标志
setb p3.2 ;
setb p3.4
setb p3.5
setb p3.1
setb p3.0 ;置P3.0~P3.5为输入状态
clr c ;清进位标志位
clr p1.4 ;清遥控输出端
clr a ;清累加器A
mov KEYHAO,#0H ; 清按键号存储器
xrl a,#11000000b ;0000(p3.5 p3.4 p3.1 p3.0)
jz TV1
mov a,r7
xrl a,#11000001b ;0001
jz TV2
mov a,r7
xrl a,#11000010b ;0010
jz VCD
mov a,r7
……
SET ETO
SET EA ;开中断
pp:jnb mdl,pp ;循环等待按键
clr mdl ;
CLR KEYHAO
sjmp pp……
'0’子程序和'1’子程序部分:ZERO: CLR A
SETB TR0 ;启动定时器0#
CJNZ A,#39,$ ;0.5625ms高电平
CLR TR0 ;停定时器0#
ACALL DE05625 ;沿时0.5625ms
CLR A
RET
ONE: CLR A
SETB TR0 ;启动定时器0#
CJNE A,#39,$ ;0.5625ms高电平
CLR TR0 ;停定时器0#
ACALL DE16875 ;沿时1.6875ms
RET
结语
本文介绍了AT89C52单片机代替专用遥控芯片设计通用型电视遥控器,该方案具有结构简单、成本低等优点,用本文介绍的方法进行单片机遥控信号模拟,可以作出一款自己家的通用遥控器。
参考文献
1 《MCS-51系列单片机应用系统设计》.何立民.北京航空航天大学出版社
2 《长虹最新系列机芯彩色电视机》.电子科技大学出版社
3 NEC公司.PHILIPS公司专用遥控芯片资料