基于单片机的空调遥控器设计

XX学院
届毕业设计说明书

基于单片机的空调遥控器

系 、 部: 电气与信息工程系
学生姓名:
指导教师: 职称
专 业: 电气自动化技术
班 级:
完成时间:

摘 要

随着社会的发展,电器在家庭中已经十分普及,与此同时,和电器相伴的空调遥控器的品种和产量不断提高。文章首先对遥控器的几个方案进行了论证,最终确定了一可行性方案,并对此方案进行了可行性分析之后提出了电器遥控器的硬件和软件设计方案。在硬件设计方案中,首先详细论述了遥控器的基本原理并用实例进行了说明。然后,对电器遥控器常用硬件设备原理和使用进行了讨论,并对设计中使用的单片机做了必要说明。在软件设计方案中,文章对软件流程做了详细的解释并阐述了单片机软件设计的一般方法。最后,文章对电器遥控器设计的硬、软件调试做了简单介绍。

关键字: 遥控器;电器遥控;单片机

ABSTRACT

With the development of the society, electrical appliances in your home has been very common, at the same time, and electric company of Skype’s varieties and production continues to increase. Article first on the remote control options for the demonstration, finalizing a feasibility proposal, and this scenario a feasibility analysis after the proposed electric remote control of hardware and software design. In hardware design, first discusses the fundamentals of the remote control and describes the instance. And then, on the electric remote control common hardware equipment and use is discussed, and on the use of single-chip design to do the necessary instructions. In software design, articles on software process done a detailed explanation and elaboration of the SCM software design of generic methods. Finally, the articon
electric remote control design of software debugging to do.

Keyword: remote control; electric remote control; single-chip

目 录

1 引言 1
2 方案比较 2
2.1 方案一:多功能红外遥控器 2
2.2 方案二:红外线电器遥控器 2
2.3 方案三:空调遥控器 3
2.4 方案比较 3
3 空调遥控器硬件设计 4
3.1 单片机选型 4
3.2 红外发射电路设计 6
3.2.1 红外遥控基本原理 6
3.2.2 红外发射电路 8
3.3 LCD驱动电路设计 9
3.3.1 LCD基本原理 9
3.3.2 LCD驱动电路 11
3.4 键盘扫描电路设计 11
3.4.1 键盘基本原理 11
3.4.2 键盘扫描电路 13
3.5 系统双时钟设计 14
3.6 空调遥控器硬件电路图 15
4 空调遥控器软件设计 16
4.1 软件功能模块设计 16
4.1.1 系统初始化程序设计 16
4.1.2 LCD初始化程序设计 16
4.1.3 键盘扫描程序设计 17
4.1.4 低高频转换程序设计 17
4.1.5 系统休眠程序设计 17
5 调试 19
5.1 硬件调试 19
5.2 软件调试 19
5.3 故障诊断及排除 19
参考文献 20
致 谢 21
附 录 22

1 引言

随着社会进步和科技的发展,现代电器中越来越向遥控化发展,实现人可以远距离的控制、无线控制。这大大的方便了人民的日常生活,有了遥控控制我们可以不用再在电器上进行操作了。我们可以通过遥控进行远距离操作,这样既把方便了我们进行移动操作也节省了时间。有了遥控器,在对电器进行调试、操作时不用再近距离的接近电器了,这在对某些高压机器或有毒现场进行操作时大大降低了危险,同时当我们不能触及到机器又想对其操作时,只要我们有遥控器我们就可以对其进行操作,这样也节省的时间同时在遇到紧急情况时能够第一时间控制机器。
而遥控用于家电方面也越来越多了。随着社会的发展,人们对电器遥控器的要求越来越高了,而随着科技的发展目前电器遥控器正在朝着体积小,重量轻,简单易用,功能强大等方面发展。在众多的电器遥控器中红外线遥控器应用最为广泛。
本文的经过多方案的比较最终确定了一种方案,并通过此方案对电器遥控器的工作原理、整个工作的流程、硬件各部分设计和软件各部分程序的编写都进行了比较详细的介绍。本文还对电器遥控器的设计过程中所用到的单片机也进行了分析,以便于能够更好的了解电器遥控器的原理和工作过程。最后本文还对电器遥控器的硬、软件调试也进行简单的介绍。

2 方案比较

2.1 方案一:多功能红外遥控器
该方案适用于编码式红外线遥控型家用电器,可遥控多台家用电器,具有一个学习/控制复用键、510个设备选择键,1020个功能控制键,由一个设备选择键与各个功能控制键共同实现对一个设备的控制。
原理:图2.1所示为多功能红外遥控器的结构框图。遥控器由红外接收及发射电路、信号调理电路。
中央控制器8031、程序及数据存储器、键盘及状态指示电路组成。

图2.1 多功能红外遥控器的结构框图
遥控器有两种状态:学习状态和控制状态。当遥控器处于学习状态时,使用者每按一个控制键,红外线接收电路就开始接收外来红外信号,同时将其转换成电信号,然后经过检波、整形、放大,再由CPU定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用。当遥控器处于控制状态时,使用者每按下一个控制键,CPU从指定的存储单元中读取一系列的二进制数据,串行输出(位和位之间的时间间隔等于采样时的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。
2.2 方案二:红外线电器遥控器
本方案是采用8051单片机芯片设计的完成的:通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图2.2所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
工作原理:
将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同并通过LED发射出去
当红外线返回时进去接收部分经过光/电放大、解调、解码最终使键盘恢复初始化状态以便进行其他操作。

图2.2 基于8051单片机的电器遥控
2.3 方案三:空调遥控器
空调遥控器系统可分为控制器(SH6613),液晶模块,键盘,测温电路和红外发射电路几个部分组成,原理框图如图2.3。

图2.3 空调遥控器设计框图
2.4 方案比较
通过三种方案的比较可以看出方案一虽然应用范围叫广,但其正因为应用范围广,所以不能像专用遥控器能完全控制用电器
方案二是以8051为基础设计的,电路简单但要实现更强的功能需要外接太多的电路所以较为麻烦。
方案三运用的是SH6614是单片机是精简指令集单片机具有速度快,功耗低,抗干扰能力强,结构简单易用,性价比高等特点,且是具有双晶振及液晶驱动功能的单片机,这样性能更稳定。所以本设计选用该方案。

3 空调遥控器硬件设计

本章主要阐述了空调遥控器硬件设计,包括单片机的选型、红外发射电路设计、LCD驱动电路设计、键盘扫描电路设计和系统双时钟设计,详细阐述了各部分的基本原理和设计过程。
空调遥控器硬件设计框图如图3.1:

图3.1 空调遥控器硬件设计框图
3.1 单片机选型
空调遥控器使用的单片机应该满足LCD驱动,键盘扫描,红外发射和系统低功耗设计。SH6614单片机是精简指令集单片机,所有指令具有相同指令周期,具有速度快,功耗低,抗干扰能力强,结构简单易用,性价比高等特点。且具有双晶振及液晶驱动功能的单片机, 经过编程PA1口可以发出38K载波供红外遥控发码时使用,I/O口PA和PB可作为键盘接口,因此完全满足空调遥控器设计。它的基本功能如下:
程序存储器(ROM): 4096×16
数据存储器(RAM): 512×4
输入输出口:8个
液晶驱动:30×8或34×4
其中Segment 1-30可以设置成输出口
中断源:4个
定时器:2个8位
内置双通道可编程声音发生器(PSG)
高低频两组振荡器
SH6614的功能框图和引脚图如图3.2和3.3。

图3.2 SH6614功能框图

表3.1 SH6614单片机各引脚定义
引脚 功能
OSCO,OSCI 低频晶振32.768KHz
OSCXO,OSCXI 高频晶振4MHz
RESET 重启动
SEG1~SEG12 LCD的SEGMENT脚
COM1~COM8 LCD的COM脚
VCC 电源脚
GND 电源地脚
PA1 红外输出脚
PB0~PB3 键盘读入脚
PA0、PA1、PA3 键盘输出脚

3.2 红外发射电路设计
3.2.1 红外遥控基本原理
(1) 概述
人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线,红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
常用的红外遥控系统一般分发射和接收两个部分。发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通发光二极管相同,只是颜色不同。接收部分的红外接收管是一种光敏二极管。在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。红外接收二极管一般有圆形和方形两种。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。
多路控制的红外发射部分一般有许多按键,代表不同的控制功能。当发射端按下某一按键时,相应地在接收端有不同的输出状态。接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。“脉冲”输出是当按发射端按键时,接收端对应输出端输出一个“有效脉冲”,宽度一般在100ms左右。“电平”输出是指发射端按下键时,接收端对应输出端输出“有效电平”,发射端松开键时,接收端“有效电平”消失。此处的“有效脉冲”和“有效电平”,可能是高、也可能是低,取决于相应输出脚的静态状况,如静态时为低,则“高”为有效;如静态时为高,则“低”为有效。大多数情况下“高”为有效。“自锁”输出是指发射端每按一次某一个键,接收端对应输出端改变一次状态,即原来为高电平变为低电平,原来为低电平变为高电平。此种输出适合用作电源开关、静音控制等。有时亦称这种输出形式为“反相”。“互锁”输出是指多个输出互相清除,在同一时间内只有一个输出有效。电视机的选台就属此种情况,其它如调光、调速、音响的输入选择等。“数据”输出是指把一些发射键编上号码,利用接收端的几个输出形成一个二进制数,来代表不同的按键输入,这种输出形式一般用于与单片机或微机接口。 本文介绍的空调遥控器设计就是采用这种编码。
(2) 遥控指令编码规律
遥控器所发送的功能指令码一般采用多位二进制串行码,例如某彩色电视的红外遥控码,其编码规律为:头脉冲、系统码、资料码、资料反码和结束位。头脉冲用做一帧命令的起始位;系统码用于区别不同类的电器;资料码用于完成命令功能;资料反码是将资料码按位取反的码。每次进行发送都是先发送脉宽4510us、周期2*4510us的头脉冲,然后连续发送两次系统码、接着发送资料码及资料反码、最后发送结束位,波形图见图3.4。

图3.4 遥控指令编码图
(3) 数据脉冲编码
红外通讯数据采用脉冲编码,所谓脉冲编码,就是将每位数据信号用一个脉冲来表示。例如红外编码以脉宽561us、周期4561us代表“1”;以脉宽561us、周期2561us代表“0”。脉冲信号都调制在占空比为1/3,频率为38kHz的载波上再发送出去,调制后的信号“1”和“0”如图3-5所示。这样做有两点好处:第一,减少了有效的发射时间,有利于降低平均功耗,这对于采用干电池供电的发射器十分重要;第二,外部干扰信号多为缓变信号,有利于抗干扰。

图3.5 信号1和0
(4) 程序设计流程图
红外发射程序流程图如图3.6所示。

图3.6 程序流程图
3.2.2 红外发射电路
常用的红外发光二极管(如SE303·PH303),其外形和发光二极管LED相似,发出红外光(近红外线约0.93μm )。管压降约1.4V ,工作电流一般小于20mA。为了适应不同的工作电压,回路中常串有限流电阻。
发射红外线去控制相应的受控装置时,其控制的距离与发射功率成正比。为了增加红外线的控制距离,红外发光二极管工作于脉冲状态,因为脉动光(调制光)的有效传送距离与脉冲的峰值电流成正比,只需尽量提高峰值电流 ,就能增加红外光的发射距离。提高峰值电流的方法,是减小脉冲占空比,即压缩脉冲的宽度。减小冲占空比还可使小功率红外发光二极管的发射距离大大增加。要使红外发光二极管产生调制光,只需在驱动管上加上一定频率的脉冲电压。红外发射电路如图3.7所示。

图3.7 红外发射电路
3.3 LCD驱动电路设计
3.3.1 LCD基本原理
LCD(Liquid Crystal Digit)具有耗电低,驱动电压低,结构空间小而有效显示面积大、体薄物轻等优点,在各类电子产品中得到广泛应用。
LCD的基本结构及工作原理:
液晶显示器的结构如图3.8所示:

在上、下两层电极之间封入向列型液晶材料,液晶分子平行排列,上、下扭曲90º,在无外部电压状态下,外部入射光通过上偏振片后形成偏振光,该偏振光通过平行排列的液晶材料后备旋转90º,再通过与上偏振片垂直的下偏振片,被反射板反射回来,呈透明状态;当上、下电极加上一定的电压后,电极部分的液晶分子转成垂直排列,失去旋光性,从上偏振片入射的偏振光不被旋转,光无法通过下偏振片返回,因而呈黑色。根据需要将电极做成各种文字、数字、图形,就可以获得各种状态显示。显示内容由引脚端和公共端共同决定,在应用时,只要给相应引脚端写入信号,即可显示,LCD内部自带刷新电路,不必重复写入。本文的空调遥控器设计中采用的是由厂家定制的一款LCD,LCD的面板和引脚定义如图3.9和表3.2。

                            ①     ②    C

③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩
图3.9 LCD面板图
表3.2 LCD引脚定义
SEG LCD COM4 COM3 COM2 COM1
SEG11L SEG1 Auto Warm Dry Cool
SEG12L SEG2 Auto Lwind Mwind Hwind
SEG1L SEG3 1.d 1.c 1.b 1.a
SEG2L SEG4 2.d 2.c 2.b 2.a
SEG3L SEG5 3.d 3.c 3.b 3.a
SEG4L SEG6 4.d 4.c 4.b 4.a
SEG5L SEG7 5.d 5.c 5.b 5.a
SEG6L SEG8 6.d 6.c 6.b 6.a
SEG7L SEG9 7d 7.c 7.b 7.a
SEG8L SEG10 8d 8.c 8.b 8.a
SEG9L SEG11 9.d 9.c 9.b 9.a
SEG10L SEG12 10.d 10.c 10.b 10.a
SEG LCD COM8 COM7 COM6 COM5
SEG11H SEG13 Pic-w ºC Code
SEG12H SEG14 Timeo : : Timec
SEG1H SEG15 1.g 1.f 1.e
SEG2H SEG16 2.g 2.f 2.e
SEG3H SEG17 3.g 3.f 3.e
SEG4H SEG18 4.g 4.f 4.e
SEG5H SEG19 5.g 5.f 5.e
SEG6H SEG20 6.g 6.f 6.e
SEG7H SEG21 7.g 7.f 7.e
SEG8H SEG22 8.g 8.f 8.e
SEG9H SEG23 9.g 9.f 9.e
SEG10H SEG24 10.g 10.f 10.e

表3.2对LCD的引脚定义进行了说明。设计中把SH6614设定为8个公共端,30个LCD引脚输出。如表中所示,SEG1和COM1-COM4共同定义了“模式”笔画,在程序中将其定义为SEG11L;SEG2和COM1-COM4共同定义了“风速”笔画,在程序中将起定义为SEG12L;其它可以以此类推。数码显示①-⑩用作温度和定时时间的显示,分别由SEG3-SEG12与COM1-COM8来定义。
3.3.2 LCD驱动电路
SH6614单片机的LCD输出口可采用30×8或34×4两种方式,这里定义$15Bit0=0,则采用的是30×8,即:8个公共端,30个LCD输出引脚。这里24-36引脚的LCD输出端,即SEG1-SEG12,LCD驱动电路如图3.10所示。

图3.10 LCD驱动电路
3.4 键盘扫描电路设计
3.4.1 键盘基本原理
键盘系统一般分为非编码式键盘和编码式键盘,这里只讨论非编码式键盘。
(1) 键盘电路结构
由若干个按键组成的键盘,其电路结构可分为独立键结构和矩阵键盘结构。
独立按键结构每个键单独占用一根I/O口线,每根I/O口线上的安键工作状态不会影响其他I/O口线上的状态。
矩阵键盘结构按键排列为行列式矩阵结构,也称行列式键盘结构。如4行4列共16个键,只占用8根I/O口线,故键数目较多时可节省I/O口线,但这种结构的软件较繁。本文的空调遥控器设计就是采用3×4矩阵式键盘。
(2) 键盘工作方式
在无按键操作时,通常CPU在执行其他任务,只在有按键操作时才根据闭合键执行相应的键处理任务。
键盘的工作方式可分为编程控制方式和中断控制方式。
CPU在一个工作周期内,利用完成其他任务的空余时间,调用键盘扫描子程序。经程序查询,若无键操作,则返回;若有键操作,则进而判断是哪个键,并执行相应的键处理程序。这种方式为编程扫描方式。
有时在正常工作中,并不会经常进行键操作,因而编程控制方式使CPU经常处于空查询状态。在CPU工作任务十分繁重的情况下,为提高CPU的效率,可采用中断控制方式。只要有按键按下,便向CPU相应中断后,在中断服务程序中进行键盘扫描、查键值与键处理等工作。
(3) 设计要点
非编码键盘系统基本任务如下:
A监测有无键按下;
B判断是哪个键按下;
C完成键处理任务。
为快速可靠的实现按处理任务,还应从电路或软件角度妥善解决如下问题。
a消除键抖动影响
键触点的闭合或断开瞬间,由于机械触点的弹性作用,会产生短暂的抖动现象,其抖动时间长短与其机械特性有关,一般约为5-10ms,抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,而引起误处理。
消除键抖动影响的颖键方法是每个键增加一个R-S触发器,这种方法只适用于键数目较少的情况。若键数目较多,通常采用软件延时的方法:当监测到有键按下时,调用一个延时(一般5-20)子程序,然后在此监测到该键电平仍为闭合状态,才确认该键已按下,并进行相应处理工作。这种消除键抖动影响的软件措施是切实可行的。
b采取串键保护措施
串键是指同时有一个以上的键按下。串键会引起为机的错误相应。
通常用软件提供串键保护。当判断是一个以上的键被按下,则返回重新进行监测。只有当监测到只有一个键被按下时,才去查键号、执行相应键处理工作。
为了防止误操作的不良影响,应从软件设计的角度着手设置保护。对于某些设定参数的键,如果参数存在上、下限值要求,可采取软件限幅措施。对于某些参数若存在非法数值,可由软件判断,必要时予以拒绝接收。
(4) 键盘扫描技术
键盘扫描技术可分为行扫描法、线反转法、状态矩阵法,这里仅简单介绍下面将要用到的行扫描法。
行扫描法是在确认有键闭合之后,逐行(或逐列)置低电平,并读入列(或行)状态,如果出现非全1状态,那么0状态的行、列交叉点就是被按下键。例如,4行4列键盘,首先只使第一行为“0”电平,其余各行为“1”电平,然后读入列状态,在进行键盘去抖动处理后再次读入列状态,比较两次读入结果,如果相同则可确认按下有效键,并到键盘状态表中查找与已经储存信息相吻合的键值,然后进入相应的键盘处理程序。
3.4.2 键盘扫描电路
(1) 键盘扫描
电路如图3.11所示。

图3.11 键盘扫描电路
图中用PA0、PA2、PA3和PB0、PB1、PB2、PB3组成3×4矩阵键盘。其中K1-K10为定义的按键,它们分别为:开机、关机、模式、温度、风速、温度+、温度-、定时开、定时关、小时、分钟,按下按键则进入相应操作,具体含义和操作步骤可以参看空调遥控器按键功能设计,K11和K12在系统中没有定义,可以在以后修改设计增加功能时使用,在制作线路板时做出但不必做按键。
(2) 空调遥控器按键功能设计
1 ON键
在关机状态下,按一下此键,发射指示点亮,LCD有显示,遥控器进入开机状态,同时把当前设定的运行模式、温度值、风速、定时等信息按编码规范的要求,发射信息。
2 OFF键
在开机状态下,按一下此键,发射指示点亮一次,LCD熄灭,同时发射关机信息。若已设定了定时开机、定时关机,遥控器进入关机状态之前,先取消以上两种设定状态,然后发射关机信息。
3 MODE键
在开机状态下,每按一次此键,液晶屏的模式区显示相应的模式,发射指示点亮一次,同时把当前设定的运行模式、温度值、风速、定时等信息以红外编码方式发射出去。
运行模式按如下顺序循环切换:自动、制冷、抽湿、制热
4 “+”/“-”键
在开机状态下,每按一次调整“+”键,设定温度递增一度,并发射相应的红外信息。当温度增至32ºC,即使继续按此键,设定温度亦不再增加,但有信号发射。
在开机状态下,每按一次调整“-”键,设定温度递减一度,并发射相应的红外信息。当温度增至17ºC,即使继续按此键,设定温度亦不再减少,但有信号发射。

图3.12 循环切换
5 定时开、定时关键
按定时开,进入定时开设定,定时开符号显示,然后按小时、分钟键调整时间,定时关与此相同。
6 小时、分钟键
按相应键,进入响应时间调整,只在定时开/定时关时有效。小时键每次增加1小时,1-12小时循环;分钟键每次改变30分钟。
3.5 系统双时钟设计
SH6614单片机内部集成了双时钟,这就为空调遥控器的节能设计提供了方便,在没有编码发射时系统采用32.768K晶振,维持系统的运行,在长期(超过5s)没有按键和发码操作则系统暂停工作,进一步节省能源;当有效按键按下有编码发射时,系统时钟切换到455K,利用单片机中的PSG产生38K载波,发射红外编码。系统时钟电路如图3.13所示。

3.6 空调遥控器硬件电路图
综合前面各硬件电路功能模块的设计,图3.14给出了空调要起硬件设计电路图。

图3.14 空调遥控器硬件电路图
空调遥控器的硬件设计,严格按照任务书的要求,进行了单片机的选型,并以单片机为基础进行了红外发射电路、键盘扫描电路和LCD驱动电路的设计,还针对空调遥控器通常为干电池供电的特点,在硬件电路中采用了双时钟,既满足了发码时的要求,又满足了无编码发射时的低功耗设计,同时为软件的低功耗设计奠定了基础。

4 空调遥控器软件设计

本章给出了软件设计的总流程图和各主要功能模块的流程图,并进行了详细的说明,对主要部分还给出了源程序,并对SH6614单片机软件开发进行了必要说明。
4.1 软件功能模块设计
4.1.1 系统初始化程序设计
系统初始化程序框图如图4.1。
初始化系统寄存器:这是上电之后进入的第一个程序模块,同时也是RESET进入的程序模块。在这个程序模块中,系统首先对系统寄存器进行了初始设置,包括:开中断,中断服务寄存器清零,TM0和BTM初始设置,定义PORTA为输入口、PORTB为输出口,定义PA1为38K载波红外发射口并对PSG进行红外发射初始化。

图4.1 系统初始化程序框图
初始化用户寄存器:大部分用户寄存器初始值为00H,但也有少部分寄存器要设置初始值。例如模式和风速寄存器初始值设位自动,温度显示寄存器设为24ºC等。
4.1.2 LCD初始化程序设计
LCD初始化程序包括清LCD和满屏显示2s程序。这里之所以把两个模块放在一起,是因为尽管在总的看来这是两个模块,但实际上这两个模块公用了大段程序,只是从不同的入口进入,而从相同的出口返回。主要源程序及流程图如下:

图4-2 清LCD和满屏显示程序框图
延时子程序采用的是软件延时,并在入口处设置延长时间,每次只要设置PARM,就可以延长不同倍数的子程序时间。
4.1.3 键盘扫描程序设计
在这个程序中,PB0-PB3送出扫描码,PA0,PA2,PA3负责接收,可以从扫描码及接收码来判断哪一个键被按下,并将其值存储,然后转向键盘处理程序。键盘扫描程序如图4.3。

图4.3 键盘扫描程序框图
4.1.4 低高频转换程序设计
低频转换到高频,在程序中应该先将高频打开,经过短暂时间后再切换,否则可能单片机不能得到马上相应而出错,高频转换到低频由相同原则。
4.1.5 系统休眠程序设计
调用键盘扫描程序后,如果没有有效按键,则启动定时器进行5s内是否有按键按下的判断。如果在定时中断之前有键按下,则重新进行键盘扫描;如果没有键按下,则进入HALT模式,使系统进入省电模式,当有按键按下则系统退出HALT模式重新进行键盘扫描。

4.2 软件主流程图设计

图4.4 软件主流程图

5 调试

5.1 硬件调试
在硬件调试时可以运用单片机仿真器对课题的原理图以检查电路的设计是不是合理且性能良好。假如在仿真器上没有发现异常的话则可以进行下一步调试即根据原理图做出实物再对实物进行通电实验,看看遥控器是否正常工作,假如出现异常则证明电路的焊接方面还存在问题,要对其进行进一步检查和调试直到正常工作。
5.2 软件调试
软件编程完成之后要进行调试。可将每个子程序写如单片机实验系统中进行调试当每段子程序都没有错误时再将完整的程序输入进去进行调试看看是否有问题。
5.3 故障诊断及排除
在联调时常见的故障是遥控距离较短,不满足要求,一般可通过增大红外管发射电流,或将几个红外发射管串联发射等增强红外发射光的方法来解决;也可以使几个红外接受管并联接受,以提高接受灵敏度。还可以将红外发射管和红外接受管均放入黑盒屏蔽,仅在发射和接受处开个小窗口,这样可消除杂散红外光的干扰,使有用信号增强。
引起遥控距离较短的原因还有可能是,发射的载波频率与接受机带通滤波器的中心频率不一致。可试着微调发射载波的频率,观察遥控距离的变化,使系统达到最佳工作状态。

参考文献

[1]何立民.MCS-51单片机应用系统设计[M].北京: 北京航空航天大学出版社.1999.
[2]NEC公司.PHILIPS公司专用遥控芯片资料.
[3]SH6614单片机说明书[EB/OL].
http://www.dycmcu.cn/downloads/sinowealth/mcu/4bit/4bit_lcd/sh6614/CM6614SAB-110.pdf
[4]遥控器资料大全[EB/OL]. http://www.1kong7.com/
[5]梁延贵. 遥控电路可控硅触发电路语音电路分册[M] 北京: 科学技术文献出版社,2002.
[6] 李华. MCS-51系列单片机实用接口技术[M]. 北京: 航天航空大学出版社,1999. [7] 邱关源.电路[M]. 第三版.高等教育出版社.1989.

致 谢

本文主要阐述了基于单片机SH6614在空调遥控器中的应用,我对单片机在生活中的应用产生了浓厚的兴趣,同时,受我主修专业的影响,我已经习惯于关注电气自动化带来的一系列机遇与挑战。 本篇论文虽然凝聚着自己的汗水,但却不是个人智慧的产品,没有导师的指引和赠予,没有父母和朋友的帮助和支持,我在大学的学术成长肯定会大打折扣。当我打完毕业论文的最后一个字符,涌上心头的不是长途跋涉后抵达终点的欣喜,而是源自心底的诚挚谢意。我首先要感谢我的导师尹艳清,对我的构思以及论文的内容不厌其烦的进行多次指导和悉心指点,使我在完成论文的同时也深受启发和教育。 再次由衷感谢答辩组的各位老师对学生的指导和教诲,我也在努力的积蓄着力量,尽自己的微薄之力回报母校的培育之情,争取使自己的人生对社会产生些许积极的价值!

附 录

软件源程序
;********************************************************
;* Qingdao University of Science&Technology *
;* File Name: bylw.asm *
;* Description: remote controller of Air Conditioning *
;* Version: V1.0 *
;* Author: sboyer *
;* MCU: SH6614 *
;* LCD: SEG1-SEG12 *
;* CLOCK: 32.768KHz,455KHz *
;********************************************************

;**************************************
; SYSTEM REGISTER DEFINE
;**************************************
LIST P=6614
ROMSIZE=4096
IE EQU 00H ;interupt enable flags
IRQ EQU 01H ;interupt request flags
TM0 EQU 02H ;Timer0 Mode register
BTM EQU 03H ;Base Timer Mode register
TL0 EQU 04H ;Timer0 load/counter register low digit
TH0 EQU 05H ;Timer0 load/counter register high digit
PORTA EQU 08H ;PortA
PORTB EQU 09H ;PortB
SPA EQU 0BH ;Set PORTA to be output or
;input port,1=output,0=input
SPB EQU 0CH ;Set PORTB to be output or
; input port,1=output,0=input
TBR EQU 0EH ;Table Branch Register
INX EQU 0FH ;Index register
DPL EQU 10H ;Data pointer for INX low nibble
DPM EQU 11H ;Data pointer for INX middle nibble
DPH EQU 12H ;Data pointer for INX high nibble
SETPORTS EQU 13H ;Bit0:Heavy load mode,Bit1,2:PA.1&PA.2
;as PSG output or I/O PORT,Bit3:Port pull
;high enable control
OSCX EQU 14H ;Bit0:Turn on OSCX oscillator,Bit1:CPU clocks
;select(1:OSCX/0:OSC),Bit3:OSCX
;type selection
SETLCD EQU 15H ;Bit0:Select LCD DUTY,Bit1:LCD off,
;Bit2,3:LCD frequency control
SEGOUT EQU 16H ;Bit2:Set LCD segment as output,Bit3:LCD
;power degrade
PSG1L EQU 17H ;PSG channel1 low nibble
PSG1H EQU 18H ;PSG channel1 high nibble,Bit3:
;channel1 octave shift control
PSG21A EQU 19H ;PSG channel2 nibble1 or alarm output
PSG22 EQU 1AH ;PSG channel2 nibble2
PSG23 EQU 1BH ;PSG channel2 nibble3
PSG24 EQU 1CH ;PSG channel2 nibble4,Bit3:channel2
;octave shift control
PSGCTR1 EQU 1DH ;Bit0,Bit1:channel1,2 enable,
;Bit2,Bit3:volume control
PSGCTR2 EQU 1EH ;Bit0,1:PSG1,PSG2 mode control,
;Bit2,3:PSG1,PSG2 clock source selection

;********************************
;LCD REGISTER DEFINE
;********************************
SEG1L EQU 00H
SEG2L EQU 01H
SEG3L EQU 02H
SEG4L EQU 03H
SEG5L EQU 04H
SEG6L EQU 05H
SEG7L EQU 06H
SEG8L EQU 07H
SEG9L EQU 08H
SEG10L EQU 09H
SEG11L EQU 0AH
SEG12L EQU 0BH
SEG1H EQU 28H
SEG2H EQU 29H
SEG3H EQU 2AH
SEG4H EQU 2BH
SEG5H EQU 2CH
SEG6H EQU 2DH
SEG7H EQU 2EH
SEG8H EQU 2FH
SEG9H EQU 30H
SEG10H EQU 31H
SEG11H EQU 32H
SEG12H EQU 33H

;********************************
;USER REGISTER DEFINE
;********************************
TEMPT EQU 20H ;variable register
CT0 EQU 21H ;variable 0 register
CT1 EQU 22H ;variable 1 register
CT2 EQU 23H ;variable 2 register
PARM EQU 24H ;parmeter register
KEY1 EQU 25H ;key variable register
KEY_F EQU 26H ;key flag register
KEY_NUM EQU 27H ;key number register
S_CODE EQU 28H ;scan code register
B_AC EQU 29H ;ac buffer register
B_TBR EQU 2AH ;tbr buffer register
PORTB_B EQU 2BH ;portb buffer register
KEY2 EQU 2CH ;key variable register
KEYREG EQU 2DH ;key register for display and deal with
MODE EQU 2EH ;mode information register
CON_OPEN EQU 2FH ;available when open
WIND EQU 30H ;wind information register
OCTIME EQU 31H ;open and close time register
DATA_1 EQU 32H ;data used for temperature high nibble
DATA_2 EQU 33H ;data used for temperature low nibble
DATA_3 EQU 34H ;data used for set time to open hour high nibble
DATA_4 EQU 35H ;data used for set time to open hour low nibble
DATA_5 EQU 36H ;data used for set time to open minute high nibble
DATA_6 EQU 37H ;data used for set time to open minute low nibble
DATA_7 EQU 38H ;data used for set time to open hour high nibble
DATA_8 EQU 39H ;data used for set time to open hour low nibble
DATA_9 EQU 3AH ;data used for set time to open minute high nibble
DATA_10 EQU 3BH ;data used for set time to open minute low nibble
TIMEOP EQU 3CH ;set time open register
TIMECL EQU 3DH ;set time close register
OP_CL EQU 3EH ;open or close register
CODEAH EQU 3FH ;code register
CODEAL EQU 40H ;
CODEBH EQU 41H
CODEBL EQU 42H
CODECH EQU 43H
CODECL EQU 44H
CODEDH EQU 45H
CODEDL EQU 46H
CODEEH EQU 47H
CODEEL EQU 48H
CODE EQU 49H
;********************************
ORG 00H
JMP RESET
NOP
JMP TIMER0
NOP
JMP INTB
;********************************
RESET:
CALL INITIAL_SYSTEM_REGISTER ;system initial
CALL INITIAL_USER_REGISTER ;user register initial
CALL CLOSE_ALL_LCD
CALL DISPLAY_ALL_LCD
CALL DELAY_2S
;JMP $
CALL DISPLAY_LCD
CALL_KEYSCAN:
CALL KEYSCAN ;call keyscan program
LDA KEY_F,00H ;if key flag=1,that key is hit
BAZ DELAY_5S
LDA KEY_NUM
STA KEYREG
CALL LOW_HIGH ;low frequency to high frequency

;jump to key display and deal with
SBI	KEYREG,00H
BAZ	KEY0_OPEN
SBI	KEYREG,01H
BAZ	KEY1_CLOSE
SBI	KEYREG,02H
BAZ	KEY2_MODE
SBI	KEYREG,03H
BAZ	KEY3_WIND
SBI	KEYREG,04H
BAZ	KEY4_ADD
SBI	KEYREG,05H
BAZ	KEY5_MIN
SBI	KEYREG,06H
BAZ	KEY6_TIMEOP
SBI	KEYREG,07H
BAZ	KEY7_TIMECL
SBI	KEYREG,08H
BAZ	KEY8_HOUR
SBI	KEYREG,09H
BAZ	KEY9_MINU

CALLDISP:
CALL DISPLAY_LCD
LDI SEG11H,0EH ;light the code segment

CALL	CODESEND
LDI	SEG11H,0CH					;unlight the code segment

INITIAL_SYSTEM_REGISTER
;initial interrupt
LDI IE,00H ;close all interupt
LDI IRQ,00H ;clear IRQ
;initial timer0
LDI TM0,00H
LDI TL0,00H
LDI TH0,00H
;initial basetimer
LDI BTM,00H
;initial port
LDI PORTA,00H
LDI PORTB,00H
LDI SPA,02H ;set portA input,pa1 output
LDI SPB,0FH ;set portB output
;initial pointer
LDI TBR,00H
LDI INX,00H
LDI DPL,00H
LDI DPM,00H
LDI DPH,00H
;initial clock
LDI OSCX,00H ;set OSC as CPU clock,OSCX set as
;ceramic oscillatorinitial LCD
LDI SETLCD,02H ;turn off LCD,LCDCLK=OSC/64,1/8duty,1/4bias
LDI SEGOUT,0CH ;set LCD as segment output,LPD=1
;initial PSG
LDI SETPORTS,0BH ;set portA1 PSG output,heavy load mode,
;port pull-up control
LDI PSG1L,0EH ;set psg as remote control,38k
LDI PSG1H,07H
LDI PSG21A,00H
LDI PSG22,00H
LDI PSG23,00H
LDI PSG24,00H
LDI PSGCTR1,0CH
LDI PSGCTR2,09H
RTNI

;initial user register
INITIAL_USER_REGISTER:
LDI MODE,08H ;mode=auto
LDI CON_OPEN,0CH ;wind flag and celsius flag
LDI WIND,08H ;wind=auto
LDI OCTIME,00H
LDI DATA_1,02H ;temperature high nibble=2
LDI DATA_2,04H ;temperature low nibble=4
LDI DATA_3,00H
LDI DATA_4,00H
LDI DATA_5,00H
LDI DATA_6,00H
LDI DATA_7,00H
LDI DATA_8,00H
LDI DATA_9,00H
LDI DATA_10,00H
LDI TIMEOP,00H
LDI TIMECL,00H
LDI OP_CL,00H
LDI CODEAH,0FH
LDI CODEAL,00H
LDI CODEBH,00H
LDI CODEBL,08H
LDI CODECH,00H
LDI CODECL,08H
LDI CODEDH,0FH
LDI CODEDL,00H
LDI CODEEH,0FH
LDI CODEEL,00H
RTNI

CLOSE_ALL_LCD:
LDI TEMPT,00H ;close all
JMP SETLCD1
DISPLAY_ALL_LCD:
LDI TEMPT,0FH ;display all
SETLCD1: LDI SETLCD,00H
LDA TEMPT
STA SEG1L
STA SEG2L
STA SEG3L
STA SEG4L
STA SEG5L
STA SEG6L
STA SEG7L
STA SEG8L
STA SEG9L
STA SEG10L
STA SEG11L
STA SEG12L
STA SEG1H
STA SEG2H
STA SEG3H
STA SEG4H
STA SEG5H
STA SEG6H
STA SEG7H
STA SEG8H
STA SEG9H
STA SEG10H
STA SEG11H
STA SEG12H
RTNI

DELAY_2S:
LDI IE,04H ;open timer0 int
LDI IRQ,00H
LDI TM0,00H
LDI TL0,08H
LDI TH0,0FH
RTNI

TIMER0:
LDI IE,00H
LDI IRQ,00H
RTNI

DISPLAY_LCD
LDA MODE
STA SEG11L
LDA CON_OPEN
STA SEG11H
LDA WIND
STA SEG12L
LDA OCTIME
STA SEG12H
;temperature
LDI TBR,0EH
LDA DATA_1
CALL 200H
STA SEG1L
LDA TBR
STA SEG1H
LDI TBR,0EH
LDA DATA_2
CALL 200H
STA SEG2L
LDA TBR
STA SEG2H
;time open
LDI TEMPT,1100B
ADD OCTIME,00H
BAZ RETURN
LDI TBR,0EH
LDA DATA_3
CALL 200H
STA SEG3L
LDA TBR
STA SEG3H
LDI TBR,0EH
LDA DATA_4
CALL 200H
STA SEG4L
LDA TBR
STA SEG4H
LDI TBR,0EH
LDA DATA_5
CALL 200H
STA SEG5L
LDA TBR
STA SEG5H
LDI TBR,0EH
LDA DATA_6
CALL 200H
STA SEG6L
LDA TBR
STA SEG6H
;time close
ADD OCTIME,0011B
BAZ RETURN
LDI TBR,0EH
LDA DATA_7
CALL 200H
STA SEG7L
LDA TBR
STA SEG7H
LDI TBR,0EH
LDA DATA_8
CALL 200H
STA SEG8L
LDA TBR
STA SEG8H
LDI TBR,0EH
LDA DATA_9
CALL 200H
STA SEG9L
LDA TBR
STA SEG9H
LDI TBR,0EH
LDA DATA_10
CALL 200H
STA SEG10L
LDA TBR
STA SEG10H
RETURN: RTNI
;***********************
;scanning keyboard
;***********************
KEYSCAN:
LDI PORTA,0FH ;set porta high
LDI PORTB,0FH ;set portb high
LDI S_CODE,01H ;set scan code(first code)
SCAN: LDA S_CODE,00H
STA PORTB_B,00H
EORIM PORTB_B,0FH ;scan code^0fh
STA PORTB,00H ;sent scan code to portb
LDA PORTA,00H ;read key from porta
STA KEY1,00H ;check whether key is hit?
SBI KEY1,0FH
BAZ NT_CODE ;key is not hit
LDI PARM,3 ;call delay to debounce
CALL DELAY
LDA PORTA,00H ;read key from porta again
STA KEY2,00H ;check whether key is hit?
SBI KEY2,0FH
BAZ NT_CODE ;key is not hit
LDA KEY1,00H ;check whether two key is the same?
SUB KEY2,00H
BAZ PAB1 ;key is really hit
NT_CODE:
LDA S_CODE,00H ;scan code left 1 bit
ADDM S_CODE,00H
BAZ R_SAN32 ;if scan code=0,that scan is over
JMP SCAN ;scan again

PAB1:
LDI B_TBR,0FH
LDI B_AC,00H
PAB2:
LDA B_TBR,00H
STA TBR,00H ;set TJMP address high nibble
LDA B_AC,00H ;get TJMPaddress low nibble
CALL 0200H ;to get table data
SUB KEY2,00H ;check whether table data is the same
BAZ PAB3 ;to scan code
JMP ADDAC1

PAB3: LDA TBR,00H ;check whether scan code is this key
SUB PORTB_B,00
BAZ PAB4
JMP ADDAC1
PAB4: LDA B_AC,00 ;to save key number
STA KEY_NUM,00H
LDI KEY_F,01H ;set key flay=1
JMP R_SAN31
ADDAC1: ADIM B_AC,01H ;B_AC+1(data address+1)
JMP PAB2
R_SAN32:
LDI KEY_NUM,00H ;clear key number register
LDI KEY_F,00H ;clear key number buffer
R_SAN31:
RTNI ;return to main program

;delay 12*parm ms

DELAY: SBIM PARM,01H ;judge whether parmeter is>0
BC $+2
RTNI ;return to main program
LDI CT2,0AH
LDI CT1,0FH
LDI CT0,0FH
SBIM CT0,01H
BC $-1
SBIM CT1,01H
BC $-4
SBIM CT2,01H
BC $-7
JMP DELAY

;table data
ORG	0200H
TJMP
;LED
ORG	2E0H
RTNW	0011B,1111B	;0
RTNW	0000B,0011B	;1
RTNW	0110B,1101B	;2
RTNW	0110B,0111B	;3
RTNW	0101B,0011B	;4
RTNW	0111B,0110B	;5
RTNW	0111B,1110B	;6
RTNW	0010B,0011B	;7
RTNW	0111B,1111B	;8
RTNW	0111B,0011B	;9
;KEY
ORG	02F0H
RTNW	1110B,1110B	;0-open
;RTNW	1110B,1101B	;;1
RTNW	1110B,1011B	;1-close
RTNW	1110B,0111B	;2-mode
RTNW	1101B,1110B	;3-wind
;RTNW	1101B,1101B	;;5
RTNW	1101B,1011B	;4-+
RTNW	1101B,0111B	;5--
;RTNW	1011B,1110B	;;8
RTNW	1011B,1101B	;6-time open
RTNW	1011B,1011B	;7-time close
RTNW	1011B,0111B	;8-hour
RTNW	0111B,1110B	;9-minute
;RTNW	0111B,1101B	;;D
;RTNW	0111B,1011B	;A
;RTNW	0111B,0111B	;B

;*********************************
;low frequency to high frequency
;*********************************
LOW_HIGH:
LDI OSCX,01H ;turn on oscx
LDI PARM,01H
CALL DELAY
LDI OSCX,03H ;low to high frequency
RTNI

;**********************************
;key display and deal with
;**********************************
KEY0_OPEN:
LDI SETLCD,02H ;turn on lcd
LDI OP_CL,00H
LDA OP_CL
STA CODEBH
JMP CALLDISP

KEY1_CLOSE:
LDI SETLCD,00H
LDI OP_CL,0FH
LDA OP_CL
STA CODEBH
JMP CALLDISP

KEY2_MODE:
LDA MODE
ADDM MODE
BAZ MODE_SET1
LDA MODE
STA CODEBL
JMP CALLDISP
MODE_SET1:LDI TEMPT,01H
ADDM MODE,00H
LDA MODE
STA CODEBL
JMP CALLDISP

KEY3_WIND:
LDA WIND
ADDM WIND
BAZ WIND_SET1
LDA WIND
STA CODECL
JMP CALLDISP
WIND_SET1:
LDI TEMPT,01H
ADDM WIND,00H
LDA WIND
STA CODECL
JMP CALLDISP

KEY4_ADD:
SBI CODECH,0FH ;already max,jump out
BAZ KEY4_ADD_1

ADIM	CODECH,01H
ADIM	DATA_2,01H
DAA	DATA_2
LDI	TEMPT,00H
ADCM	DATA_1

KEY4_ADD_1: JMP CALLDISP

KEY5_MIN:
LDA CODECH ;already min,jump out
BAZ MIN_RTN

SBIM	CODECH,01H
SBIM	DATA_2,01H
DAS	DATA_2
BC	MIN_RTN
SBIM	DATA_1,01H

MIN_RTN: JMP CALLDISP

KEY6_TIMEOP:
LDI DATA_5,03H ;initial time open min=0.5h
ADIM TIMEOP,01H ;BA0=1,open;BA0=0,close
BA0 KEY6_TIMEOP_1
JMP CALLDISP
KEY6_TIMEOP_1
ANDIM OCTIME,1100B
JMP CALLDISP

KEY7_TIMECL
LDI DATA_9,03H
ADIM TIMECL,01H ;BA0=1,open;BA0=0,close
BA0 KEY7_TIMECL_1
JMP CALLDISP
KEY7_TIMECL_1
ANDIM OCTIME,0011B
JMP CALLDISP

KEY8_HOUR:
LDA TIMEOP
BA0 TOPHOUR ;when time open is on
LDA TIMECL
BA0 TCLHOUR ;when time close is on
JMP CALLDISP
TOPHOUR:
SBI CODEDH,0CH
BAZ TOPHOUR0
ADIM CODEDH,01H
JMP TOPHOUR01
TOPHOUR0:
LDI CODEDH,00H
TOPHOUR01:SBI DATA_4,02H
BAZ TOPHOUR1
JMP TOPHOUR2
TOPHOUR1:
SBI DATA_3,01H
BAZ TOPHOUR4
TOPHOUR2:
ADIM DATA_4,01H
DAA DATA_4
BC TOPHOUR3
JMP CALLDISP
TOPHOUR3:
LDI TEMPT,00H
ADCM DATA_3,00H
JMP TOPHOUR5
TOPHOUR4:
LDI DATA_4,00H
LDI DATA_3,00H
TOPHOUR5:
JMP CALLDISP

TCLHOUR:
SBI CODEEH,0CH
BAZ TCLHOUR0
ADIM CODEDH,01H
JMP TCLHOUR01
TCLHOUR0:
LDI CODEDH,00H
TCLHOUR01:SBI DATA_8,02H
BAZ TCLHOUR1
JMP TCLHOUR2
TCLHOUR1:
SBI DATA_7,01H
BAZ TCLHOUR4
TCLHOUR2:
ADIM DATA_8,01H
DAA DATA_8
BC TCLHOUR3
JMP CALLDISP
TCLHOUR3:

LDI	TEMPT,00H
ADCM	DATA_7,00H
JMP	TCLHOUR5

TCLHOUR4:
LDI DATA_8,00H
LDI DATA_7,00H
TCLHOUR5:
JMP CALLDISP

KEY9_MINU:
LDA TIMEOP
BA0 TOPMIN
LDA TIMECL
BA0 TCLMIN
JMP CALLDISP
TOPMIN:
SBI DATA_5,03H
BAZ TOPMIN1
LDI DATA_5,00H
LDI CODEDL,00H
TOPMIN1:
LDI DATA_5,03H
LDI CODEDL,0FH
TCLMIN:
SBI DATA_9,03H
BAZ TOPMIN1
LDI DATA_9,00H
LDI CODEEL,00H
TCLMIN1:
LDI DATA_9,03H
LDI CODEEL,0FH
JMP CALLDISP

;**********************************
;code send
;**********************************
CODESEND:
CALL CODEASEND ;send codea
CALL CODEBSEND ;send codeb
CALL CODECSEND ;send codec
CALL CODEDSEND ;send coded
CALL CODEESEND ;send codee
CALL CODEASEND
CALL CODEBSEND
CALL CODECSEND
CALL CODEDSEND
CALL CODEESEND
RTNI

CODEASEND:
LDI PSGCTR1,0DH
LDI TM0,03H
LDI TL0,0CH
LDI TH0,0EH
ANDIM IRQ,0000B ;celar IRQ of TIMER0
ANDIM IE,0100B ;open TIMER0
JMP $
NOP

LDI	PSGCTR1,0CH
LDI	TM0,03H
LDI	TL0,0CH
LDI	TH0,0EH
ANDIM	IRQ,0000B	
ANDIM	IE,0100B
JMP	$
NOP

LDI	PSGCTR1,0CH
LDI	TM0,03H
LDI	TL0,0CH
LDI	TH0,0EH
ANDIM	IRQ,0000B	
ANDIM	IE,0100B
JMP	$
NOP

LDI	PSGCTR1,0DH
LDI	TM0,03H
LDI	TL0,0CH
LDI	TH0,0EH
ANDIM	IRQ,0000B	
ANDIM	IE,0100B	
JMP	$
NOP
RTNI

CODEBSEND:
LDA CODEBH
STA CODE
CALL CODESEND_BCDE
LDA CODEBL
STA CODE
CALL CODESEND_BCDE
RTNI

CODECSEND:
LDA CODECH
STA CODE
CALL CODESEND_BCDE
LDA CODECL
STA CODE
CALL CODESEND_BCDE
RTNI

CODEDSEND:
LDA CODEDH
STA CODE
CALL CODESEND_BCDE
LDA CODEDL
STA CODE
CALL CODESEND_BCDE
RTNI

CODEESEND:
LDA CODEEH
STA CODE
CALL CODESEND_BCDE
LDA CODEEL
STA CODE
CALL CODESEND_BCDE
RTNI

CODESEND_BCDE:
LDA CODE
BA3 CALLB3
CALL SEND0
JMP $+2
CALLB3:
CALL SEND1

BA2	CALLB2
CALL	SEND0
JMP	$+2

CALLB2:
CALL SEND1

BA1	CALLB1
CALL	SEND0
JMP	$+2

CALLB1:
CALL SEND1

BA0	CALLB0
CALL	SEND0
JMP	$+2

CALLB0:
CALL SEND1

RTNI

SEND0:
LDI PSGCTR1,0DH
LDI TM0,03H
LDI TL0,0EH
LDI TH0,0FH
ANDIM IRQ,0000B
ANDIM IE,0100B
JMP $
NOP
LDI PSGCTR1,0CH
LDI TM0,03H
LDI TL0,0EH
LDI TH0,0FH
ANDIM IRQ,0000B
ANDIM IE,0100B
JMP $
NOP
RTNI
SEND1:
LDI PSGCTR1,0DH
LDI TM0,03H
LDI TL0,0EH
LDI TH0,0FH
ANDIM IRQ,0000B
ANDIM IE,0100B
JMP $
NOP
LDI PSGCTR1,0CH
LDI TM0,03H
LDI TL0,0AH
LDI TH0,0FH
ANDIM IRQ,0000B
ANDIM IE,0100B
JMP $
NOP
RTNI
;**********************************
;high frequency to low frequency
;**********************************
HIGH_LOW:
LDI OSCX,01H
LDI PARM,01H
CALL DELAY
LDI OSCX,00H
RTNI

DELAY_5S
LDI IE,05H
LDI IRQ,00H
LDI TM0,00H
LDI TL0,0EH
LDI TH0,0CH
JMP $
NOP
NOP
HALT
NOP
INTB: RTNI
LDI IE,00H
LDI IRQ,00H
JMP CALL_KEYSCAN

END
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培林将军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值