您的当前位置:首页正文

基于单片机的全自动洗衣机设计

2023-01-18 来源:好走旅游网


1.2全自动洗衣机的设计方案

本系统实现了对洗衣机整个洗衣过程的控制,包括用户参数输入、洗衣、漂洗、排水和脱水等阶段。控制系统主要由电源电路、数字控制电路和机械控制电路三大模块构成。电源采用三端集成固定稳压器7805提供+5V电源,数字控制电路负责控制洗衣机的工作过程,主要由AT89S51单片机、三位共阴数码管、按键、蜂鸣器、LED指示灯组成;机械控制电路实现传感器检测、电机驱动、进水、排水等功能,主要由水位检测器、电动机、传动系统部件、进水排水电磁阀组成。 1.2.1按键

洗衣机面板上有6个按钮K1、K2、K3、K4、K5和K6 K1为启动/暂停键:按奇数次视为启动,偶数次视为暂停。

K2用于洗衣程序选择:按一下选择洗涤,按两下选择漂洗,按三下选择脱水。

K3用于洗衣方式选择:按一下选择标准洗方式,按两下选择快速洗方式,按三下选择轻柔洗方式。

K4用于水位选择:按一下进水至低水位,按两下进水至中水位,按三下进水至高水位。 K5用于时间选择:按一下洗衣时间短,按两下洗衣时间适中,按三下洗衣时间长。 1.2.2洗衣机自检

洗衣机上电后,先进行自检,包括检查安全开关,排水阀状态,进水阀工作过程,电机的运转等,若发现异常现象则蜂鸣器响,报警灯亮。 1.2.3洗衣程序

⑴洗涤过程

通电后,若不选择洗衣周期,则洗衣机从洗涤过程开始。进入洗涤过程,首先进水阀接通,开始向洗衣机供水,当到达要求水位时,进水阀断电关闭,停止进水;电机M接通,带动波轮旋转,形成洗衣水流。电机M是一个正反转电机,可以形成往返水流,有利于洗涤衣物。

⑵漂洗过程

与洗涤过程操作相同,只是时间短一些。 ⑶脱水过程

洗涤或漂洗过程结束后,电机M停止转动,排水阀M接通,开始排水。排水阀动作的同时,电机M也接通,使电机可以带动内桶转动。当水位低到一定值,再经过一段时间后,电机开始正转,带动内桶高速旋转,甩干衣物。 1.2.4显示

洗涤、漂洗及脱水时间都通过倒计时的方式显示在3个LED上,依次为分位,秒十位和秒个位,此外,还有发现异常现象时错误信息的显示。 1.2.5参数处理

要对洗衣机进行控制,首先要用各种传感器不断地检测相关的状态,以作为控制的依据。其中,污浊度传感器,温度传感器和负载传感器是模拟信号,需要经过A/D转换变成数字信号,而水位传

感器本身就是数字信号,单片机接受到这些传感器的信号以后,经过一系列处理作出反应,从而控制洗衣机的工作。

2 硬件电路介绍

针对上文的功能,硬件电路应包括七个部分:微处理器控制电路、显示电路、采样电路、电机控制电路、进水阀控制电路、排水阀控制电路和按键报警电路。通过这几个部分电路的协调工作,洗衣机能模拟人脑进行操作。 2.1CPU选型 ⑴PIC系列

PIC单片机系列是美国微芯公司(Microchip)的产品,它的CPU采用RISC结构,分别有33、35、58条指令,属精简指令集。采用Harvard双总线结构,运行速度快,它能使程序存储器的访问和数据存储器的访问并行处理,这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令,这样总的看来每条指令只需一个周期,这也是高效率运行的原因之一。此外,它还具有低工作电压、低功耗、驱动能力强等特点。PIC系列单片机共分三个级别,即基本级、中级、高级。

PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器,当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。

该系列单片机的专用寄存器(SFR)并不像51系列那样都集中在一个固定的地址区间内(80~FFH),而是分散在四个地址区间内。只有5个专用寄存器,得反复地选择对应的存储体,这多少给编程带来了一些麻烦。 ⑵AVR系列

AVR单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通常时钟频率用4~8MHz,故最短指令执行时间为250~125ns。该系列的型号较多,但可用下面三种为代表:AT90S2313(简装型)、AT90S8515、AT90S8535(带A/D转换)。

通用寄存器一共32个(R0~R31),前16个寄存器(R0~R15)都不能直接与立即数打交道,因而通用性有所下降。

AVR系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在AVR中,没有像51系列的数据指针DPTR,而是由X(由R26、R27组成)、Y(由R28、R29组成)、Z(由R30、R31组成)三个16位的寄存器来完成数据指针的功能(相当于有三组DPTR),而且还能作后增量或先减量等的运行。 ⑶51系列

51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不仅能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算的实属少见。51系列在片内RAM区间还特别开辟了一个双重功能的地址区间,十六个字节,单元地址20H~2FH,它既可作字节处理,也可作位处理(作位处理时,合128个位,相应位地址为00H~7FH),使用极为灵活。这一功能无疑给使用者提供了极大的方便,因为一个较复杂的程序在运行过程中会遇到很多分支,因而需建立很多标志位,在运行过程中,需要对有关的标志位进行置位、清零或检测,以确定程序的运行方向。而实施这一处理(包括前面所有的位功能),只需用一条位操作指令即可。

有的单片机并不能直接对RAM单元中的位进行操作,如AVR系列单片机中,若想对RAM中的某位置位时,必须通过状态寄存器SREG的T位进行中转。

51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。八位除以八位的除法指令,商为八位,精度嫌不够,用得不多。而八位乘八位的乘法指令,其积为十六位,精度还是能满足要求的,用的较多。作乘法时,只需一条指令就行了,即 MULAB(两个乘数分别在累加器A和寄存器B中。积的低位字节在累加器A中,高位字节在寄存器B中)。很多的八位单片机都不具备乘法功能,作乘法时还得编上一段子程序调用,十分不便。

51系列的I/O脚的设置和使用非常简单,当该脚作输入脚使用时,只须将该脚设置为高电平(复位时,各I/O口均置高电平)。当该脚作输出脚使用时,则为高电平或低电平均可。低电平时,吸入电流可达20mA,具有一定的驱动能力;而为高电平时,输出电流仅数十μA甚至更小(电流实际上是由脚的上拉电流形成的),基本上没有驱动能力。其原因是高电平时該脚也同时作输入脚使用,而输入脚必须具有高的输入阻抗,因而上拉的电流必须很小才行。作输出脚使用,欲进行高电平驱动时,得利用外电路来实现,I/O脚不通,电流经R驱动LED发光;低电平时,I/O脚导通,电流由该脚入地,LED灭(I/O脚导通时对地的电压降小于1V,LED的域值1.5~1.8V)。

综上所述,我们本次设计采用51系列,而51系列的典型产品是8051。8051是一种40引脚双列直播式芯片。它含有4KB可反复烧录及擦除内存和128字节的RAM,有32条可编程控制的I/O线,5个中断发源,指令与MCS-51系列完全兼容。选用它作为核心控制新片,可使电路极大地简化,而且程序的编写及固化也相当方便、灵活。选用它设计制作全自动洗衣机控制电路,该电路的组成相对简单,工作原理清晰,易于理解。

89C51引脚图如图2-1所示。

图2-189C51引脚图

2.289C51的存储器与寄存器

89C51单片机存储器才用的是哈佛(Harvard)即程序存储器空间和数据存储器空间是各自独立的,两种存储器各自有自己的寻址方式和寻址空间。

这种结构对于单片机“面向控制”的实际应用极为方便、有利。89C51单片机程序存储器和数据存储器的扩展能力分别可达64KB,寻址和操作简单方便。

89C51的存储器空间可划分为5类:程序存储器、内部数据存储器、特殊功能寄存器、为地址空间和外部数据寄存器。 2.3A/D转换器

A/D转换器种类很多,按及人口方案来分,可分为并行接口和串行接口两类。串行接口又分为三线式接口和两线式接口两种。由于89C51串行口有限,而本此设计也用到了很多串口,而且我们需要一个多通道的转换器,而MAX192正是满足这种要求,其转换精度也高,所以本次设计我们采用MAX192。

MAX192是一种低功耗、单电源、8通道、串行的10位A/D转换器。由于该芯片在片外已有采样跟踪保持电路,内部时钟电路和内部参考电压源,所以在应用时,所需外围原件极少,与单片机连接也只占用4-5条口线,因此,用MAX192构成的数据采集系统具有硬件结构简单、体积小和功耗低的优点。MAX192是美国美信公司设计的一个10位A/D转换器,它的信号输入有两种方式:8通道单端输入或4通道差分输入,具有极高转换速度。其4线串行接口与SPI、QSPI、MicroWire

等串行总线兼容,具有内部时钟方式和外部时钟方式,内带4.096V的基准电压,也可用外部基准电压。

⑴MAX192的引脚图如图2-1所示。

图2-1MAX192的引脚图

⑵MAX192的控制字

①MAX192控制字占一个字节,其格式见表2-1。

表2-1 控制字节的定义 Bit7(MSB) START

注 1.START:转换开始位。逻辑“1”有效。

2.SEL0-2:通道选择位。选择所需转换信号所连接的通道(见表3和表4)。

3.UNI/BIP:单/双极性信号转换模式选择位。1=单极性信号;0=双极性信号。对于单极性信号,模拟输入中0V~VREF的电压被转换;对于双极性信号,-VREF/2~+VREF/2的新号被转换。 4.SGL/DIF:输入信号形式选择位。“1”为单端信号输入,“0”为差分信号输入。 5. PD0~PD1:时钟模式及省电模式选择位。

②MAX192单端方式(SGL/DIF=1)通道选择如表2-3所示。 ③MAX192查分方式(SGL/DIF=0)通道选择如表2-4所示。 ④MAX192的时钟和掉电选择如表2-5所示。 ⑶MAX192的工作原理

MAX192器件采用逐次逼近转换技术及输入采样/保持电路把模拟信号转换成10位的数字信号输出,模拟信号有单端输入和差分输入两种输入方式,输入电压范围分单极性(0-40.96V)和双极性(-4.096/2-4.096/2V)两种,每做完一次A/D转换,需从串行数据输入端输入以“1”开始的8位控制字对器件初始化,内部控制逻辑控制A/D转换。

当MAX192的CS端有效时,在时钟SCLK的每一个上升沿把一个最高位为“1”的控制字节的各位送入输入移位寄存器,控制器收到控制字节后,选择控制字节中给定的模拟通道,并在SCLK的下降沿启动转换。在启动转换后,MAX192可以使用外部串行时钟或内部时钟来完成逐次逼近转换。在两种时钟方式中,数据的移入/输出都由外部时钟来完成。

Bit6 SEL2

Bit5 SEL1

Bit4 SEL0

Bit3 UIN/BIP

Bit2 SGL/DIF

Bit1 PD1

Bit0 PD0

转换结束后的数据是由DOUT端读出的。应该注意,数据的输出是高位在先,低位在后,有效位为10位。在单极性输入方式下,输出的是标准二进制码,对于差分方式下的双极性输入,其输出是莫二补码。

需要注意的是,在单极性输入方式下,转换完成后的10位数据在移位寄存器中存放时,在数据的首部添了一个“0”,在尾部添加了5个“0”,这样,要得到最终的正确结果,需要把这16位数(包括10位有效数据)右移5位。在编写采样程序时,送完一字节控制字,何时读转换结果 ,有两种判断方法:一是看SSTRB信号是否变高,二是延时多少us(最大位10us)。

表2-3 单端方式(SGL/DIF=1)通道选择

SEL2 SEL1 SEL0 0 1 0 1 0 1 0 1

表2-4 查分方式(SGL/DIF=0)通道选择

SEL2 SEL1 SEL0 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

CH0 + -

CH1 - +

CH2 + -

CH3 - +

CH4 + -

CH5 - +

CH6 + -

CH7 - +

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

CH0 +

CH1 +

CH2 +

CH3 +

CH4 +

CH5 +

CH6 +

CH7 +

AGND - - - - - - - -

表2-5 时钟和掉电选择

PD0 1 1 0 0

2.4传感器

本次设计中用到4个传感器,分别为:TS污浊度传感器、温度传感器、负载传感器和水位传感器。其中污浊度、温度和负载传感器输出的都是模拟信号,需要通过A/D转换才能作为单片机的

PD1 1 0 1 0

器件模式 外部时钟方式 内部时钟方式

速掉电模式(Fast Power-Down Mode) 全掉点模式 ( Full Power-Down Mode)

控制信号,而水位传感器本身输出的就是数字信号,所以不需要通过A/D转换,直接可用做单片机的控制信号。

⑴TS污浊度传感器内部原理图如图2-2所示。

浑浊度检测传感器的主要原理是光电耦合器,而普通的光电耦合器不能有效的检测洗衣机水的浑浊度。光电耦合器的光源必须是红外光才能准确的检测浑浊度。TS浊度传感器是GE公司开发的一种专门用于家电产品的低成本传感器,主要用于洗衣机、洗碗机等产品的水污浊程度的测量。

图2-2浊度传感器内部原理图

⑵温度传感器

温度传感器有四种主要类型:热电偶、热敏电阻、电阻温度检测器(RTD)和IC温度传感器下)。IC温度传感器又包括模拟输出和数字输出两种类型。

热电偶应用很广泛,因为它们非常坚固而且不太贵。热电偶有多种类型,它们覆盖非常宽的温度范围,从-200℃到2000℃。它们的特点是:低灵敏度、低稳定性、中等精度、响应速度慢、高温下容易老化和有漂移,以及非线性。另外,热电偶需要外部参考端。

我们常用温度传感器有DS18B20、AD590等,它们都是集成温度传感器。DS18B20输出是数字信号可以直接和单片机相连,而且硬件连接电路少,但需要对其进行复杂的软件编程。

AD590是美国模拟器件公司生产的单片集成两端感温电流源。它的主要特性如下: •流过器件的电流(mA)等于器件所处环境的热力学温度(开尔文)度数。 •AD590的测温范围为-55℃~+150℃。

•AD590的电源电压范围为4V~30V。电源电压可在4V~6V范围变化,电流变化1mA,相当于温度变化1K。AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。

•输出电阻为710MW。

•精度高。AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。

本设计我们选用AD590作为温度传感器。AD590比DS18B20精度更高、线性度误差小,且不需要温度报警和复杂的程序编程,非常适合用于洗衣机的温度检测传感器

⑶负载传感器

根据模糊控制要求,负载检测时通过检测电动机的反电动势来实现的,而电动机的反电动势比

单片机所用电压大的多,不能直接采样,必须经过隔离。采用线性光电耦合器既能隔离高电压和干扰,又能得到满意的检测信号。

⑷水位传感器原理图如图2-5所示。

谐振式水位传感器,采用了新型的传感原理 ,把水位的高低 ,通过水位传感器直接变成水位与频率的对应关系。衣物的洗净度、水流强度、洗涤时间等参数的检测 ,对模糊控制洗衣机在节水、节能、减少洗涤时间方面起决定性的作用。

图2-5水位传感器原理图

2.5显示器

显示器有LED和LCD两种。

LCD(Liquid crystal Display)是液晶显示器英文名称的缩写,液晶显示器是一种被动式的显示器,即液晶本身并不发光,而是利用液晶经过处理后能改变光线通过方向的特征,达到白底黑字或黑底白字显示的目的。

LED(Light Emiting Diode)是发光二极管英文名称的缩写。LED显示器是由发光二极管构成的,所以在显示器前面冠以“LED”。本次设计只是显示时间,所以采用LED就可以达到目的了。

⑴LED显示器的结构LED

常用的LED为8段或7段。每一个段对应一个发光二极管。这种显示器有共阳极和共阴极2种。共阴极LED显示器的发光二极管的阴极连在一起,通常此公共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管接低电平时,发光二极管被点亮,相应的段被显示。

为了使LED显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为LED显示器提供代码,因为这些代码可使LED相应的段发光,从而显示不同字型,因此该代码称之为段码(或称为字型码)。

⑵LED显示器工作原理

LED显示器有静态显示和动态显示2种方式。

LED显示器工作于静态显示方式时,各位的共阴极(共阳极)连接在一起并接地(或+5V);每位的段码线(a-dp)分别与一个8位的锁存器输出相连。之所以称之为静态显示,是因为各个LED的显示字符一经确定,相应锁存器锁存的段码输出将维持不变,直到送入另一个的段码为止。正因

为如此,静态显示器的亮度都较高,但静态现实的缺点是占用口线太多,如果显示器的位数太多,则需要加锁存器,因此一般情况下采用动态显示。

在多位LED显示时,为简化硬件电路,通常将所有位的段码线相应段并联在一起,由1个8位I/O口控制,形成段码线的多路复用,而各位的共阴极或共阳极分别由相应的I/O线控制,形成各位的分时选通。

本次设计中我们采用的是3位共阴极数码管,其中段码线占用1个8位I/O口,而位选占用3位I/O口。由于各位的段码线并联,8位I/O口输出的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位位选都处于选通状态的话,3位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用动态显示,即在某一时刻,只让一位的位选线处于选通状态,而其他各位的位选处于关闭状态,同时,段码线上输出相应位要显示的字符段码。这样,在同一时刻,3位LED中只有选通的那位显示字符,而其他2位则是熄灭的。同样,在下一时刻,只让下一位的位选处于选通状态,而其他各位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位都是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位 同时亮的假象,达到同时显示的效果。

LED不同位显示的时间间隔应根据实际情况而定。发光二极管从导通到发光有一定的延时,导通时间太短,则发光太弱,人眼无法看清,但也不能太长,因为要受限于临界闪烁频率,而且时间越长,占用CPU时间也越多,本次设计我们采用1ms延时。

3 软件设计

本次设计是基于模糊控制理论上的全自动洗衣机,用户只需要将衣物放进洗衣机,按下启动键,洗衣机就能自动完成洗涤--漂洗--脱水等一系列操作,当然本次设计中还考虑到半自动时的情况,用户可以根据自己的需求自由选择洗衣机将要进行什么工作,这一点是通过按键来实现的。 3.1全自动洗衣机中的模糊控制 3.1.1模糊控制器

洗衣机控制器是洗衣机的大脑,洗衣机的洗涤、漂洗、脱水等动作均由控制器加以控制,目前的全自动洗衣机采用控制器有模糊控制器和普通控制器两种,二者之间既有共同之处,又存在着差别。

洗衣机模糊控制器与普通控制器的相同点就在于二者均采用微电脑技术,各自根据洗衣机的控制原理编制出程序,对洗衣机实施控制。

洗衣机模糊控制器与普通控制器的主要区别在于二者控制思想不同。普通程序控制器虽然使洗衣机在功能较普通洗衣机增强许多,但就其控制思想而言,仍谈不上“先进”

它只是根据时间原则去设定洗衣机的洗涤、漂洗和脱水的运行时间,然后连续运行,完全不考虑其他因素。例如:洗衣服的多少、面料的软硬、衣服的肮脏程度等,均未加以考虑。而模糊控制器则

是根据衣量的多少确定洗涤水量;根据面料软硬和肮脏程度确定洗涤时间等,这些都是控制规则,这些规则是人工经验的积累。一般的说,模糊控制器是利用人工智能方式,建立一组控制规则,编织成程序由微电脑执行。这样,就形成了人工智能控制模式。因此,在控制思想上大大优于普通程序控制器的控制思想。 3.1.2模糊控制实现方法

㈠基本结构和控制过程

模糊控制是利用负载、衣质、浊度、水温等检测所得到信息,进行分段评估计算使其模糊化,再根据模糊规则进行推理,最后根据所激活的规则进行解模糊判决,以决定最适当和明确的水位、洗涤时间、洗涤方式以及脱水时间等。模糊控制洗衣机控制结构如图3-1所示。

图3-1模糊控制洗衣机控制结构

㈡模糊规则

⑴洗涤量和水量的确定:

①如果检测到衣物量很多,则洗涤量多,水位高; ① 如果检测到衣物量较多,则洗涤量较多,水位适中; ② 如果检测到衣物量很少,则洗涤量少,水位低。 ⑵脱水时间的确定:

① 如果检测到衣物很多,则脱水时间长; ② 如果检测到衣物较多,则脱水时间适中; ③ 如果检测到衣物很少,则脱水时间短。 ⑶洗涤时间的确定:

① 如果检测到衣物很多,布质以棉布偏多且水温低,则洗衣时间长; ② 如果检测到衣物较多,布质以化纤偏多且水温偏高,则洗衣时间适中; ③ 如果检测到衣物较少,布质以棉布偏多且水温偏高,则洗衣时间适中; ④ 如果检测到衣物很少,布质以化纤偏多且水温高,则洗衣时间短。 ⑷漂洗时间的确定:

① 如果检测到洗涤水很脏,则漂洗时间长; ② 如果检测到洗涤水较脏,则漂洗时间适中; ③ 如果检测到洗涤水不脏,则漂洗时间短。 3.2软件流程图及代码 3.2.1寄存器

本次编程中用到的寄存器如表3-1所示。

表3-1寄存器

寄存器 R4,R5 R6,R7 20H 21H 22H 23H 24H 27H 2AH 30H,31H 32H,33H 34H,35H 36H,37H 38H 3AH 3BH 3CH 3D 40H 41H 42H 44H 45H 46H 47H 48H 50H 51H 52H 53H 54H

3.2.2流程图及其代码

注释

比较标准值R4高位,R5低位 A/D转换结果R6高位,R7低位

衣量多位 衣量少位 衣量适中位 化纤多位 棉多位 1s中断标志位 1s中断次数 洗涤时间 漂洗时间 脱水时间 排水时间 漂洗次数 电机正转时间 电机反转时间 电机转速 洗涤量投放时间 显示分缓存器 显示秒十缓存器 显示秒个缓存器

零水位 低水位 中水位 高水位 水位检测值 启动/暂停键按键次数 程序键按键次数 选择键按键次数 水量键按键次数 时间键按键次数

本次设计是分模块进行编写的,以下就是各模块的流程图及其代码。 1.主程序流程图如图3-2所示。

开始设置堆栈指针调洗衣机初始化程序允许定时器中断自检调显示子程序调键盘扫描子程序

图3-2主程序流程图

程序代码: MAIN: MOV SP,#60

LCALL ChiShi ;调初始化程序 SETB EA ;CPU允许中断 MOV TMOD,#10H ;设置定时器1方式 MOV 28H,#0AH ;装入定时中断次数 LOOP: LCALL XianShi ;调显示子程序 LCALL JanPan ;调键盘扫描子程序 SJMP LOOP

2.显示子程序流程图如图3-3所示

入口程序代码:

XianShi: MOV R0,40H ;置缓冲器指针初值 MOV R2,#01H ;置位选初值 MOV A,R2

LD0: MOV DPTR,#7F03H ;位选送8155C口 MOV @DPTR,A 显示内容送缓冲区设显示缓冲区指针40H->R0 DEC DPTR 扫描模式置初值->R2 DEC DPTR

MOV A,@R0

R2->8155C口 ADD A,#0DH MOVC A,@A+PC

取显示数据段码DIR1: MOVX @DPTR,A 送8155A口 ACALL DL1ms INC R0 延时1ms MOV A,R2

JB ACC.2,LD1 RL A 显示缓冲器R0加1 MOV A,R2 显示到最后 AJMP LD0 一位吗?YLD0: RET

NDSEG: DB 3FH,06H,5BH,4FH,66H,6DH R3左移1位 DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,73H,3EH DB 31H,6EH,1CH,23H,40H,03H 返回 DB 18H,00

DL1ms: MOV R7,02H

图3-3显示子程序流程图

DL: MOV R6,#0FFH 3.键盘扫描子程序流程图如图3-4DL6: DJNZ R6,DL6 DJNZ R7,DL 所示

LD1: RET

;加偏移量 ;段码送8155A口

;调1ms延时 ;三位都显示完了吗 ;没完,显示位右移

入口有键按下吗?NY是干扰吗?N是启动/暂停键吗?Y次数加1,是奇数次按下吗?YN转运行程序N暂停Y是程序键吗?N是选择键吗?N是水量键吗?N是时间键吗?N返回Y次数加1,转程序设置Y次数加1,转方式设置Y次数加1,转水量设置Y次数加1,转时间设置

图3-4键盘扫描子程序流程图

程序代码:

Jianpan: JB P1.0,K2 ;判断是K1键按下吗,不是则转K2 LCALL DL10ms ;调10ms延时消抖

JB P1.0,K2 ;再次读P1.0状态,若仍为0,则K1键确实按下 LCALL PK1 ;调 PK1处理

K2: JB P1.1,K3 ;判断是K2键按下吗,不是则转K3 LCALL DL10ms K3: JB P1.2,K4 LCALL DL10ms JB P1.2,K4 LCALL,PK3 K4: JB P1.3,K5 LCALL DL10ms JB P1.3,K5 LCALL PK4 K5: JB P1.4,RETURN LCALL DL10ms JB P1.4,RETURN LCALL PK5 RETURN: RET

PK1: INC 50H MOV A,50H MOV B,#2 DIV AB MOV A,B

JZ A,zaiting LCALL YunZhuan Zanting: INC 50H MOV A,50H MOV B,#2 DIV AB

JB P1.1,K3 LACLL PK2 ;调10ms延时消抖

;再次读P1.0状态,若仍为0,则K2键确实按下;调 PK2处理

;判断是K3键按下吗,不是则转K4 ;调10ms延时消抖

;再次读P1.2状态,若仍为0,则K3键确实按下 ;调PK3处理

;判断是K4键按下吗,不是则转K5 ;调10ms延时消抖

;再次读P1.3状态,若仍为0,则K4键确实按下 ;调PK4处理

;判断是K5键按下吗,不是则转K6 ;调10ms延时消抖

;在此读P1.4状态,若仍为0,则K4键确实按下 ;调PK5处理 ;按键次数加1 ;判断是奇数次按下吗 ;若为偶数次按下,则转暂停状态 ;若为奇数次按下,则进入运转程序 ;按键次数加1 ;判断是奇数次按下吗

MOV A,B

JZ A,ZanTing ;若为偶数次按下,则暂停 LCALL YunZhuan ;若为奇数次按下,则进入运转程序 RETURN: RET

4.程序设置子程序流程图如图3-5所示。

入口是第一次按下吗?Y调洗涤子程序N是第二次按下吗?Y调漂洗子程序N是第三次按下吗?Y调脱水子程序N返回

图3-5程序设置子程序流程图

程序代码:

PK2: INC 51H ;按键次数加1 MOV A,51H

CJNZ A,#1,L2 ;是第一次按下吗,不是转L2 LCALL XiDi ;是第一次按下,则调用洗涤子程序 L2: CJNZ A,#2,L3 ;是第二次按下吗,不是转L3 LCALL PiaoXi ;是第二次按下,则调用漂洗子程序 L3: CJNZ A,#3,RETURN ;是第三次按下吗,不是则返回 LXALL TuoShui ;是第三次按下,则调用脱水子程序 RETURN: RET

5.洗衣方式选择子程序流程图如图3-6所示。

入口是第一次按下吗?N是第二次按下吗?N是第三次按下吗?N返回Y选择标准洗涤Y选择快速洗涤Y选择轻柔洗涤

图3-6洗衣方式选择子程序流程图

程序代码:

PK3: INC 52H ;按键次数加1 MOV A,52H ; MOV DPTR,#7F02H

CJNE A,#1,L4 ;是第一次按下吗,,不是转L4

MOV A,#0EFH ;是第一次按下,则标准洗涤指示灯亮 MOVX @DPTR,A MOV A,52H

L4: CJNE A,#2,L5 ;是第二次按下吗,不是转L5 MOV A,#0DFH ;是第二次按下,则快速洗涤指示灯亮 MOVX @DPTR,A MOV A,52H

L5: CJNE A,#3,RETURN ;是第三次按下吗,不是则返回

MOV A,#0BFH ;是第三次按下,则轻柔洗涤指示灯亮 MOVX @DPTR,A

RETURN: RET

6.水量设置子程序流程图如图3-7所示

入口是第一次按下吗Y注水至低水位N是第二次按下吗Y注水至中水位N是第三次按下吗?Y注水至高水位N返回

图3-7水量设置子程序流程图

程序代码:

PK4: INC 53H ;按键次数加1 MOV A,53H

CJNE A,#1,L6 ;是第一次按下吗,不是转L6 MOV 45H, #08H ;是第一次按下,则进水至低水位 L6: CJNE A,#2,L7 ;是第二次按下吗,不是转L7 MOV A,46H,#09H ;是第二次按下,则进水至中水位 L7: CJNE A,#3,RETUREN ;是第三次按下吗,不是则返回 MOV A,47H,#10H ;是第三次按下,则进水至高水位 RETURN: RET

7.时间设置子程序流程图如图3-8所示

入口是第一次按下吗?Y选择短时间5minN是第二次按下吗?Y选择适中时间10minN是第三次按下吗Y选择长时间15minN返回

程序代码:

PK5: INC 54H ;按键次数加1 MOV A,54H

CJNE A,#1,L8 ;是第一次按下吗,不是转L8 MOV 48H,#01H ;是第一次按下,则时间选择5min MOV 49H,#2CH

L8: CJNE A,#2,L9 ;是第二次按下吗,不是转L9 MOV 48H,#02H ;是第二次按下,则时间选择10min MOV 49H,#58H

L9: CJNE A,#3,RETURN ;是第三次按下吗,不是则返回 MOV 48H,#38H ;是第三次按下,则时间选择15min MOV 49H,#40H RETURN: RET

8.A/D转换流程图如图3-9所示。

图3-8时间设置子程序流程图

9.自检子程序流程图如图3-10所示。

入口通道选择启动转换N转换结束了吗?Y读取结果都转换完了吗NY调平均值计算返回

图3-9A/D转换流程图

入口指示灯亮读安全开关状态为低电平吗?N报警Y读排水阀状态为低电平吗?N报警Y开进水阀N到低水位了吗?Y启动电机N到高水位了吗?Y开排水阀N水位复位了吗?Y停止电机关排水阀返回

图3-10自检子程序流程图

程序代码:

ZiJian: MOV DPTR,#7F02H ;自检指示灯亮 MOV A,#0FBH MOVX @DPTR,A

JB P1.6,BaoJing1 ;读安全开关状态,异常则报警 JB P2.3,BaoJing2 ;读排水阀状态,异常则报警 MOV 45H,#08H MOV 47H,#09H MOV 44H, #00H CLR P2.4 LCALL ShuiJian MOV A,45H

L10: CJNE A,48H,L10 CLR P2.0 LACLL ShuiJian MOV A,47H

L11: CJNE A,48H,L11 CLR P2.3 LCALL ShuiJian MOV A,44H

L12: CJNE A,48H,L12 SETB P2.4 SETB P2.0 SETB P2.3 MOV A,#OFFH MOVX @DPTR,A

BaooJing1: MOV 40H,#0eH MOV 41H,#0 MOV 42H,#1

CLR P1.7 JB P1.5,BaoJing1 SETB P1.7

BaoJing2: MOV 40H,#0eH MOV 41H,#0

;置低水位值 ;置高水位值 ;置零水位值 ;开进水阀 ;调水位检测 ;到底水位了吗,到了启动电机 ;到高水位了吗,到了开排水阀 ;是零水位吗,是则检测完毕 ;显示异常代码 ;蜂鸣器响,报警灯亮 ;判断是否有人为干扰 ;显示异常代码

MOV 42H,#2

CLR P1.7 ;蜂鸣器响,报警灯亮 JB P1.5,BaoJing2 ;判断是否有人为干扰 SETB P1.7 RET

9.运转程序流程图如图3-11所示。

程序代码:YunZhuan: LCALL PanDuan JZ LD1 LCALL JianPan LD1: LCALL JianCe LCALL XiDi LCALL PaiShui RET

PanDuan: ORL A,51H 入口判断是否N为全自动进入半自动洗涤Y调检测子程序调洗涤子程序调漂洗子程序返回图3-11运转程序流程图

;调判断子程序 ;为1为全自动 ;各按键次数相与,为1为全自动

ORL A,52H ORL A,53H ORL A,54H

RET

10.检测子程序流程图如图3-12所示。

程序代码:

JianCe: MOV 39H,#3 LCALL DianJi1 LCALL ShuiLiang LCALL JinShui

MOV LCALL DianJi1 LCALL YiLiang LCALL ShuiJian LCALL JinShui

MOV LCALL DianJi1 LCALL ZhiYi LCALL WenDu LCALL ShiJian RET

DianJi1: CLR P2.0 SETB TR1 LOOP1: JNB 27H,LOOP1 CLR 27H DEC 39H

CJNE 39H,#O,LOOP1 CLR TR0 SETB P2.0 RET

39H,#30 39H,#15 ;电机运转时间3S 30S 15S ;开电机 ;开定时器 ;电机运转时间;电机运转时间

入口电机运转3S调洗涤量(水量检测)进水至检测水位读水位值->4AH电机运转30S调衣量检测调水位检测读水位值->4BH进水至检测水位电机运转15S调衣质检测调温度检测确定洗衣时间返回 图3-12检测子程序流程图

11.洗涤量、水量检测子程序流程图如图3-13所示。

入口调A/D转换转换结果与标准最大值比较大于最大值吗?Y进水至高水位,洗涤量投放时间长N转换结果与标准最小值比较小于最小值吗?Y进水至低水位,洗涤量投放时间短N进水至中水位,洗涤量投放时间适中返回

图3-13洗涤量、水量检测子程序流程图

程序代码:

ShuiLiang: LCALL ZhuanHuan0

MOV R4,#00H ;标准最大值 MOV R5,#0A0H

MOV A,R6 ;与标准最大值比较 CJNE A,#00H,LD2 MOV A,R7 CLR C

SUBB A,R5 JNC LD2

MOV R4,#00H ;标准最小值 MOV R5,#05H

MOV A,R6 ;与标准最小值比较 CJNE A,#00H,LD3 MOV A,R7 CLR C SUBB A,R5 JC LD3

MOV 46H, ;进水至中水位 MOV 3CH,#10 ;洗涤量投放时间适中 AJMP RETURN

LD2: MOV 47H, ;进水至高水位 MOV 3CH,#15 ;洗涤量投放时间长 AJMP RETURN

LD3: MOV 45H, ;进水至低水位 MOV 3CH,#5 ;洗涤量投放时间短 RETURN: RET

12.衣量检测子程序流程图如图3-14所示

入口调A/D转换转换结果与标准最大值比较大于最大值吗Y脱水时间长,将20H位置1N转换结果与标准最小值比较小于最小值吗?Y脱水时间短,将21H位置1N脱水时间适中,将22H位置1返回

图3-14衣量检测子程序流程图

程序代码:

YiLiang: LCALL ZhuanHuan0

MOV R4,#00H ;标准最大值 MOV R5,#0A0H

MOV A,R6 ;与标准最大值比较 CJNE A,#00H,LD4 MOV A,R7 CLR C SUBB A,R5 JNC LD4

MOV R4,#0H ;标准最小值 MOV R5,#05H

MOV A,R6 ;与标准最小值比较 CJNE A,#00H,LD5 MOV A,R7 CLR C SUBB A,R5 JC LD5 SETB 22H

MOV 34H,#01H ;脱水时间适中 MOV 35H,#2CH

MOV 80H,#4 ;脱水倒计时暂存 MOV 81H,#5 MOV 82H,#9

AJMP: RETURN LD4: SETB 20H

MOV 34H,#02H ;脱水时间长 MOV 35H,#58H MOV 80H,#9 MOV 81H,#5 MOV 82H,#9 AJMP: RETURN

LD5: SETB 21H

MOV 34H,#00H ;脱水时间短

MOV 35H,#0B4H MOV 80H,#2 MOV 81H,#5 MOV 82H,#9

RETURN: RET

13.衣质检测子程序流程图如图3-15所示

入口两次水位值相减结果与标准最大值比较大于最大值吗?Y将24H位置1N将23H位置1返回N

图3-15衣质检测子程序流程图

程序代码:

YiZhi: MOV A,4AH ;读第一次水位值 CLR C

SUBB A,4BH ;读第二次水位值 MOV R5,#O5H CLR C

SUBB A,R5 ;两次值相减比较 JNC LD6 SETB 23H AJMP RETURN LD6: SETB 24H

RETURN: RET

14.温度检测子程序流程图如图3-16所示

入口调A/D转换转换结果与标准最大值比较大于最大值吗?Y将25H位置1N转换结果与标准最小值比较小于最小值吗?Y将26H位置1N将27H位置1返回

图3-16温度检测子程序流程图

程序代码:

WeuDu: LCALL ZhuanHuan1

MOV R4,#00H ;标准最大值 MOV R5,#F0H

MOV A,R6 ;与标准最大值比较 CJNE A,#00H,LD7 MOV A,R7 CLR C SUBB A,R5 JNC LD7

MOV R4,#00H ;标准最小值

MOV R5,#0EH

MOV A,R6 ;与标准最小值比较 CJNE A,#00H,LD8 MOV A,R7 CLR C SUBB A,R5 JC LD8

SETB 27H ;温度适中位置1 AJMP RETURN

LD7: SETB 25H ;温度高位置1 AJMP RETURN

LD8: SETB 26H ;温度低位置1 RETURN: RET

15.时间确定子程序流程图如图3-17所示

入口衣量多位和棉多位和温度低位相与为1吗?N衣量少位和棉少位和温度高位相与为1吗?N洗涤时间长Y洗涤时间长Y洗涤时间长返回图3-17时间确定子程序流程图

程序代码:

ShiJian: MOV A,20H ;各位相与确定洗涤时间 ANL A,23H ANL A,26H JZ LD9

MOV A,21H ANL A,24H ANL A,25H JZ LD10

MOV 30H,#02H ;洗涤时间适中 MOV 31H,#58H

MOV 83H,#9 ;洗涤倒计时暂存 MOV 84H,#5

MOV 85H,#9 AJMP RETURN

LD9: MOV 30H,#38H ;洗涤时间长 MOV 31H,#40H MOV 83H,#0EH MOV 84H,#5 MOV 85H,#9 AJMP RETURN

LD10: MOV 30H,#01H ;洗涤时间短 MOV 31H,#2CH MOV 83H,#4 MOV 84H,#5 MOV 85H,#9

RETURN: RET

16.进水子程序流程图如图3-18所示

入口程序代码: JinShui: CLR P2.4 ;开进水阀 LOOP4: LCALL ShuiJian ;调水位检测 开进水阀 MOV A,48H CJNE A,45H,LD11 ;检测值与标调水位检测 AJMP L10 LD11: CJNE A,46H,LD12 N AJMP L10 水位到了吗?LD12: CJNE A,47H,LOOP4 YL10: SETB P2.4 关排水阀 RET 返回 图3-18进水子程序流程图

17.水位检测子程序流程图如图3-19所示

入口开计数器,开始计数读计数值->48H返回 图3-19水位检测子程序流程图

程序代码:

ShuiJian: MOV TMOD,#04H ;定时器T0设置为计数方式

准值比较 关闭进水阀 ;若水位到了,

MOV TH0,#00H ;计数初值 MOV TL0,#00H

SETB TR0 ;启动定时器 MOV 48H,TL0 ;记录检测值 RET

18.污浊度检测子程序流程图如图3-20所示

入口调A/D转换转换结果与标准值比较大于标准值吗?Y调漂洗程序N返回

图3-20污浊度检测子程序流程图

程序代码:

ZhuoDu: LCALL ZhuanHuan2 ;调A/D转换 MOV R4,#00H ;标准值 MOV R5,#08H

MOV A,R6 ;结果与标准值比较 CJNE A,#00H,LD12 MOV A,R7 CLR C SUBB A,R5 JNZ RETURN

LD12: LCALL PiaoXi ;大于标准值则调漂洗子程序 RETURN: RET

19.污浊度检测1子程序流程图如图3-21所示。

入口调A/D转换转换结果与标准最大值比较大于最大值吗?N转换结果与标准最小值比较小于最小值吗?N漂洗时间适中Y漂洗时间长Y漂洗时间短返回 图3-21污浊度检测1子程序流程图

程序代码:

ZhuoDu1: LCALL ZhuanHuan2 ;调A/D转换 MOV R4,#00H ;标准最大值 MOV R5,#90H

MOV A,R6 ;与标准最大值比较 CJNE A,#00H,LD13 MOV A,R7 CLR C SUBB A,R5

JZ LD13 ;大于标准最大值转 MOV R4,#00H ;标准最小值 MOV R5,#09H

MOV A,R6 ;与标准最小值比较 CJNE A,#00H,LD14

MOV A,R7 CLR C SUBB A,R5

JNZ LD14 ;小于标准最小值转 MOV 36H,#01H ;漂洗时间适中 MOV 37H,#0E0H

MOV 86H,#7 ;漂洗时间倒计时暂存 MOV 87H,#5 MOV 88H,#9 AJMP RETURN

LD13: MOV 36H,#02H ;漂洗时间长 MOV 37H,#0D0H MOV 86H,#0BH MOV 87H,#5 MOV 88H,#9

LD14: MOV 36H,#00H ;漂洗时间短 MOV 37H,#0FH MOV 86H,#3 MOV 87H,#5 MOV 88H,#9

RETURN: RET

20.电机运转子程序流程图如图3-22所示。

入口程序代码:

DiJi: MOV 3CH,#0A0H ;置转速初值 LOOP7: MOV 3AH,#60 ;置电机正转时间

置转速 CLR P2.0 ;启动电机正转

SETB TR0 ;开定时器

LOOP5: JNB 29H,LOOP5 ;1s到了吗

置电机正转时间启动电机N时间到了吗?Y停止电机LOOP6: JNB 29H,LOOP6

置电机反转时间启动电机N时间到了吗?

Y停止电机

图3-22电机运转子程序流程图

21.洗涤子程序流程图如图3-23所示。

CLR 29H DEC 3AH CJNZ 3AH,#00H,LOOP5 CLR TR0 SETB P2.0 MOV 3BH,#60 CLR P2.1 SETB TR0

CLR 29H

DEC 3BH

CJNZ 3BH,#00H,LOOP6 CLR TR0 SETB P2.1 AJMP RETURN

;到了,标志位清0 ;时间减1

;正转时间到了吗 ;到了,关定时器 ;正转停止 ;置电机反转时间 ;启动电机反转

入口洗涤灯亮判断是全自动吗?N确定洗涤时间Y调洗涤剂投放程序调洗涤1子程序调排水子程序调脱水子程序灭洗涤灯返回 图3-23洗涤子程序流程图

程序代码:

ZhuXi: MOV DPTR,#7F02H ;洗涤灯亮

MOV A,#0FEH MOVX @DPTR,A

LCALL PuanDuan ;判断是否全自动 JZ LD14 ;是全自动转 LCALL JianPan ;不是,转半自动

LD14: LCALL XiDi1 ;调洗涤1

LCALL PaiShui ;调漂洗 LCALL TuoShui ;调脱水

MOV DPTR,#7F02H ;洗涤结束,洗涤灯灭 MOV A,#0FEH MOVX @DPTR,A RET

PuanDuan: ORL A,51H

ORL A,52H ORL A,53H ORL A,54H RET

22.洗涤1子程序流程图如图3-24所示。 23.洗涤量投放子程序流程图如图3-25所示。

入口入口调电机运转程序开投放阀门显示洗涤倒计时时间开始计时N洗涤结束了吗?N时间到了吗?Y返回Y返回

图3-24洗涤1子程序流程图 图3-25洗涤量投放子程序流程图

洗涤1程序代码:

XiDi: LCALL DianJi ;调电机运转

SETB TR1 ;开定时器

MOV 40H,83H ;显示洗涤倒计时时间 MOV 41H,84H MOV 42H,85H

LOOP6: JNB 27H,LOOP6 ;1s到了吗

CLR 27H ;到了,清标志位 DEC 30H ;洗涤时间减1 CJNE 30H,#00H,LOOP6 DEC31H

CJNE 31H,#00H,LOOP6 ;洗涤时间结束了吗 CLR TR1 ;结束,关定时器

RET

洗涤量投放程序代码:

XiDiJi: CLR P2.2 ;开洗涤量投放阀门

SETB TR1 ;开定时器

LOOP7: JNB 27H,LOOP7

CLR 27H DEC 3DH

CJNE 3DH,#00H,LOOP ;投放时间到了吗 CLR TR1 ;到了,关定时器 SETB P2.2 ;关阀门 RET

24.漂洗子程序流程图如图3-26所示。

入口漂洗灯亮判断是全自动吗?N确定漂洗时间Y调一漂子程序调二漂子程序N漂洗两次都完了吗?Y灭漂洗灯返回

图3-26漂洗子程序流程图

程序代码:

PiaoXi: MOV DPTR,#7F02H ;漂洗灯亮

MOV A,#0FDH MOVX @DPTR,A

LCALL PuanDuan ;判断是全自动吗 JZ LD4 ;是全自动转 LCALL JianPan

LD4: LCALL YiPiao ;调一漂

LCALL ErPiao ;调二漂

DJNZ 38H,LD4 ;两次漂洗都完了吗 MOV DPTR,#7F02H ;灭漂洗灯 MOV A,#0FEH MOVX @DPTR,A RET

25.一漂和二漂子程序流程图如图3-27所示

程序代码:

YiPiao: LCALL JinShui LCALL PiaoXi1 LCALL PaiShui LCALL TuoShui DEC 38H RET

ErPiao: LCALL JinShui

LCALL PiaoXiJi

入口调进水子程序调漂洗1子程序调排水子程序调脱水子程序返回

3-27一漂和二漂子程序流程图;调进水

;调漂洗1子程序 ;调排水 ;调脱水 ;漂洗次数减1 图

LCALL PaiShui LCALL TuoShui DEC 38H

RET

26.漂洗1子程序流程图如图3-28所示

程序代码PiaoXi1: LCALL DianJi SETB TR1 MOV 40H,86H MOV 41H,87H MOV 42H,88H

LOOP8: JNB 27H,LOOP8

入口调电机运转子程序显示漂洗倒计时时间N漂洗结束了吗?Y停止电机返回图3-28漂洗1子程序流程图

;调电机运转 ;开定时器

;显示漂洗倒计时时间 CLR 27H

DEC 32H ;漂洗时间减1 CJNE 32H,#00H,LOOP8

DEC 33H

CJNE 33H,#00H,LOOP8 ;漂洗时间到了吗 CLR TR1 ;到了关定时器 RET

27.脱水子程序流程图如图3-29所示。

入口脱水灯亮判断是全自动吗?N确定脱水时间Y开排水阀置脱水转速启动电机显示脱水倒计时时间N脱水结束了吗?Y停止电机灭脱水灯关排水阀返回

图3-29脱水子程序流程图

程序代码

TuoShui: MOV DPTR,#7F02H ;脱水灯亮

MOV A,#0F7H MOVX @DPTR,A

LCALL PuanDuan ;判断是全自动吗 JZ LD15 ;是全自动转 LCALL JianPan

LD15: MOV 3CH,#0B0H ;置脱水转速

CLR P2.3 ;开排水阀 CLR P2.0 ;启动电机 SETB TR1 ;开定时器

MOV 40H,80H ;显示脱水倒计时时间 MOV 41H,81H MOV 42H,82H

LOOP9: JNB 27H,LOOP9

CLR 27H DEC 34H

CJNE 34H,#00H,LOOP9 DEC 35H

CJNE 35H,#00H,LOOP9 ;脱水时间到了吗 CLR TR1 ;到了,关定时器 SETB P2.3 ;关排水阀 SETB P2.0 ;停止电机 MOV DPTR,#7F02H ;灭脱水灯 MOVA,#0FFH MOVX @DPTR,A

RET

28.排水子程序流程图如图3-29所示。

入口排水灯亮开排水阀启动电机是洗涤吗?Y调污浊度1子程序N是漂洗吗?Y调污浊度子程序N显示排水倒计时时间是零水位吗?Y停止电机NN关排水阀5min到了吗?Y蜂鸣器报警灭排水灯返回等待处理

图3-29排水子程序流程图

程序代码

PaiShui: CLR P2.0 ;启动电机

CLR P2.3 ;开排水阀和排水灯 MOV DPTR,#7F02H ;读8155PB口状态 MOVX A,@DPTR

ANL A,#0FFH ;判断是洗涤还是漂洗 CJNE A,#0FEH,LD16

LCALL ZhuoDu1 LD16: CJNE A,#0FDH,LD17

LCALL ZhuoDu LD17: SETB TR1 LCALL ShuiJian CJNE 48H,#00H,LD18 LD18: SETB P2.0 SETB P2.3 AJMP RETURN LOOP10: JNB 27H,LOOP10 CLR 27H DEC 36H

CJNE 36H,#00H,LOOP10 DEC 37H

CJNE 37H,#00H,LOOP10

LCALL BaoJing3 RETURN: RET

BaoJing3: MOV 40H,#0eH

MOV 41H,#0 MOV 42H,#3 CLR P1.7 JB P1.5,BaoJing3 SETB P1.7 RET

;是洗涤调污浊度1检测

;是漂洗调污浊度检测 ;开定时器 ;调水位检测 ;是0水位吗 ;是停止电机

;关排水阀,灭排水灯 ;返回

;不是0水位,判断5分钟到了吗;到了,报警

附 录

附 录A

⑴A/D转换程序如下: ①通道0:

ZhuanHuan0: SI EQU P0.3

SO EQU P0.2 SCK EQU P0.1 CS EQU P0.0 MOV 65H,#16 CLR SCK

CLR CS ;发送一个字节

XH0: MOV A,#08EH ;08EH-选择 CH0,单端/单极性,内部时钟模式,用内带基 准电压

LCALL BYTE_OUT SETB CS NOP NOP NOP NOP NOP NOP

CLR CS ;读回两个字节 LCALL BYTE_IN MOV R6,A LCALL BYTE_IN MOV R7,A SETB CS CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A

CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A MOV A,R6 ANL A,#03H MOV R6,A MOV 90H,R6 MOV 91H,R7 MOV A,91H

附 录

INC A INC A DJNZ 65H,XH LCALL PingJun

BYTE_OUT: MOV R0,#08H ;发送单个字节到芯片串口

BOUT1 : CLR SCK

RLC A MOV SI,C SETB SCK DJNZ R0,BOUT1 CLR SI RET

BYTE_IN: MOV R0,#O8H ;从芯片串口取出单个字节

BIN1: SETB SCK

CLR SCK MOV C,SO RLC A DJNZ R0,BIN1 CLR SCK RET

②通道1:

ZhuanHuan1: SI EQU P0.3

SO EQU P0.2 SCK EQU P0.1 CS EQU P0.0 MOV 65H,#16 CLR SCK

CLR CS ;发送一个字节

XH1: MOV A,#0CEH ;0CEH-选 择CH1,单端/单极性,内部时钟模式,用内带 基准电压

LCALL BYTE_OUT

SETB CS NOP NOP NOP NOP NOP NOP

CLR CS ;读回两个字节LCALL BYTE_IN MOV R6,A LCALL BYTE_IN MOV R7,A SETB CS CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A

附 录

CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A MOV A,R6 ANL A,#03H MOV R6,A MOV 90H,R6 MOV 91H,R7 MOV A,91H INC A INC A DJNZ 65H,XH LCALL PingJun

BYTE_OUT: MOV R0,#08H ;发送单个字节到芯片串口

BOUT1 : CLR SCK

RLC A MOV SI,C SETB SCK DJNZ R0,BOUT1 CLR SI RET

BYTE_IN: MOV R0,#O8H ;从芯片串

口取出单个字节

BIN1: SETB SCK

CLR SCK MOV C,SO RLC A DJNZ R0,BIN1 CLR SCK RET

③通道2:

ZhuanHuan2: SI EQU P0.3

SO EQU P0.2 SCK EQU P0.1 CS EQU P0.0 MOV 65H,#16 CLR SCK

CLR CS ;发送一个字节

XH2: MOV A,#09EH ;09EH-选择 CH2,单端/单极性,内部时钟模式,用内带基 准电压

LCALL BYTE_OUT SETB CS NOP NOP NOP NOP NOP NOP

CLR CS ;读回两个字节 LCALL BYTE_IN MOV R6,A LCALL BYTE_IN MOV R7,A SETB CS CLR C

附 录

MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A CLR C MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A

MOV A,R6 ANL A,#03H MOV R6,A MOV 90H,R6 MOV 91H,R7 MOV A,91H INC A INC A DJNZ 65H,XH LCALL PingJun

BYTE_OUT: MOV R0,#08H ;发送单个字节到芯片串口

BOUT1 : CLR SCK

RLC A MOV SI,C SETB SCK DJNZ R0,BOUT1 CLR SI RET

BYTE_IN: MOV R0,#O8H ;从芯片串口取出单个字节

BIN1: SETB SCK

CLR SCK MOV C,SO RLC A DJNZ R0,BIN1 DJNZ 65H,XH1 CLR SCK RET

⑵求16个数的平均数:

16个数相加结果应该存在两个字节中,两个字节除法很麻烦,不过因为被除数是16,所以除法就简单了,就是把16个数字的和整体右移四位就可以了。

附 录

程序如下:

PingZhun: MOV DPTR,#90H

MOV R7,#0 MOV R6,#0 MOV R3,#16

LOOP2: MOV A,R7

ADD A,@DPTR MOV R7,A MOV A,R6 ADDC A,#0 MOV R6,A INC DPTR DJNZ R3,LOOP2

LOOP3: MOV R3,#4

MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A DJNZ R2,LOOP3 RET

⑶定时器1定时中断服务程序:

Timer1: MOV TH1,#3CH ;重装定时初值

MOV TL1,#0B0H

DJNE 28H,RETURN ;1s到了

MOV 28H,#0AH ;到了,重

装中断次数

SETB 27H ;标志位置1 DJNZ 42H,RETURN ;秒的个

位减1

DJNZ 41H,RETURN ;秒的十

位减1

DJNZ 40H,RETURN ;分钟减

1

RETURN: RETI ⑷10ms延时程序代码: DL10ms: MOV R7,#0AH DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET

因篇幅问题不能全部显示,请点此查看更多更全内容