全自动豆浆机控制程序的设计说明书(精)

更新时间:2024-06-24 03:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《微机原理及接口技术》 课程设计说明书

课题: 全自动豆浆机控制程序的设计 专业: 电子信息工程 班级: 电子

1102 姓名: 张杰 学号: 3220806485 指导老师: 2013 年 12 月 28 日

第一章设计任务与目标 (3 设计目的 (3 设计任务 (3 基本设计要求 (3

功能扩展 (3

设计环节与进程安排 (3

第二章总体方案设计与方案论证 (4 总体方案设计 (4 实时钟的调校方式 (5 键盘的扫描方式 (5 定时器方式 (6

开关量输入消抖模块的选择 (6 倒计时1S方法选择 (7

第三章总体软件设计说明及总工作流程 (8 总工作流程 (8 总体软件设计说明 (10

第四章系统资源分配及数据定义说明 (11 单元分配以及各个标志位注释 (11 第五章局部程序设计说明 (13 1.自检模块 (13 2.键盘扫描子模块 (14 3.按键消抖子模块 (14 4.蜂鸣器LED缓冲子模块 (15

5.1分钟内取消模块 (15 6.拆字子模块 (16 7.调用时钟设定子模块 (17 8.选择工作模式子模块 (18 9.水位告警子模块 (18 10.模拟水温子模块 (19 11.无效启动子模块 (20

12.实时钟子模块 (21 13.显示更新子模块 (21 14.启动子模块 (22 15.煮浆子模块 (22 16.保温子模块 (23

第六章系统功能与操作说明 (24 系统功能 (24 用户界面操作说明 (25

第七章存在问题与改进程序说明 (27 模拟水温模块 (27

水位告警模块 (28 第八章课程设计总结 (29 附录:程序代码清单

第一章设计任务与目标

设计课题:全自动豆浆机控制程序的设计

设计目的:通过两个礼拜在实验室亲自动手操作,熟悉和理解《微机原理及接口技术》上课老师所讲的内容,将所学知识亲自动手验证,借此熟悉和掌握书中知识,并加强自己动手

设计程序的能力。

设计任务:本次为期两个礼拜的课程设计任务是设计一个全自动豆浆机控制程序,通过LED灯,数码管模拟豆浆机的各个流程,主要要实现豆浆机的预加热,预打浆,三次加热打浆,

而后进行煮浆完成整个豆浆的流程,中间加入水位告警,防溢告警功能,并有实时钟功

能。

基本设计要求:

1、开机进行适当的有关接口部件及数码显示器、指示灯、讯响器等自检。 2、八位LED 七段数码管在常态下作为实时钟显示,其余状态下有工步号,倒计时,温

度显示。

3、键盘中能够对实时钟进行调校功能按键。

4、设有高低水位报警功能,在高水位状态下启动,LED灯闪3下,蜂鸣器同步响一秒,

在低水位状态下启动,LED灯闪1下,蜂鸣器同步响一秒。

5、具有能完成基本煮豆浆中的预加热-预打浆,然后加热-打浆总共3次的程序。

6、具有在启动后能够在一分钟以内取消煮浆的功能模块。 7、实现在3次打浆完成后进入240S倒计时的煮浆功能模块。

8、在煮浆功能模块中有对水位进行检测,超出溢电极则停止加热,待恢复水位持续5秒后才重新开启加热煮浆。

9、煮浆完成后进行以20%功率加热的保温模块。 功能扩展:

1、可扩展果汁功能模块。

2、设定电机关闭和重新开启之间必须间隔15秒。

3、实时钟模块可设置为4X4模块,伴有位闪,按键赋值功能。 4、改良告警提示音为音乐模块。

设计环节及进程安排

1、布置课题,明确任务、总体方案设计 1天 2、主体功能控制程序设计及调试 5天 3、程序综合联调及功能完善、改进、扩展 3天 4、答辩及编写设计说明书 3天

第二章总体方案设计与方案论证

本次课程设计的课题是设计全自动豆浆机模拟程序,需要运用微机原理与接口技术课本内容进行设计,设计的豆浆机不单单仅有煮豆浆功能。还带有水位报警,实时钟以及实时钟调校功能,模拟水温等功能。

总体设计方案

对于这次的课程设计,按照老师所讲,我们所采取的程序设计是按照模块化来进行程序的设计。将豆浆机的主工作流程作为一个模块,再加入其它功能的模块,比如实时钟调校模块,水位告警模块,模拟水温模块等,通过各个模块之间的循环调用,以此来完成整个全自动豆浆机的程序设计。

整个程序由自检模块,程序初始化,15个子模块组成的主流程循环调用,中断模块,延时子模块构成。

实时钟的调校方式

方案一:运用4X4键盘对应数字输入实时钟调整

通过对4X4键盘模块的程序设计,使键盘模块能够在实时钟调校功能中实现时分秒准确调时,并且有退格,取消,确定等按键调整实时钟调校,相对应的小时十位只能

输入0~2,小时个位只能按键输入0~4,分钟十位输入0~6,分钟个位输入0~9,能够较准确的对实时钟进行调校。

方案二.:通过调时键进入调时,四个按键对小时,分钟进行+1-1调校。 这个方案是更为简单的方案,只需要有个进入调时的按键和一个调时完成确定按键,以及4个加减时钟按键。通过对键号的扫描判断按键是否按下以此来实现对实时钟的调校功能。

这个方案最好的优点是简化了调校功能,使时钟能够以更简便的方式进行调校,为产品的外观设计提供了很大的方便。

通过上面的综合判断实时钟的调校我们选择方案二——按键加减调校。 键盘的扫描方式 方案一:扫描法

首先识别键盘有无键按下,驱动所有列线为‘0’,输入各行线电平如果有‘0’,就说明有键按下,如果行线电平全‘1’,则全部无键按下。其次是如有键被按下,识别具体的按键。依序驱动某一列为‘0’,其余列均为‘1’,输入各行线电平,如果某行线电平为‘0’,可确定此行列交叉点处的按键被按下;如果行线电平全为‘1’则本列无按键按下。这种方式太占用CPU的工作时间。

方案二:线反转法

首先列线输出为全‘0’,随后输入行线电平如有‘0’,则‘0’所在的行就是闭合的按键所在行;无‘0’则无键闭合。其次行线输出为全‘0’,随后输入列线电平如有‘0’,则‘0’所在的列就是闭合的按键所在列;无‘0’则无键闭合。

直通结合上述两步,可确定按键所在行和列。这种方式非常简单,并且很实用。 综合以上的分析,我们选择方案二——线反转法

计数方式

方案一:13位计数方式--方式0

定时器/计数器方式0 一共是有13位的计数方式。方式0是为兼容MCS-48而设,初值计算麻烦,在实际应用中,一般不用方式0。并且存在一个是时间误差,不能适用于精确定时。

方案二:16位计数方式--方式1

定时器/计数器方式1 一共是有16位的计数方式,由于它每个扫描周期都会有3~8个Tm(机器周期的时间误差,主要是用于要求不是很精确地定时,因为有随机性的误差产生。

方案三:8位计数自动重装工作方式--方式2

定时器/计数器方式2为自动恢复初值(初值会自动重装的8位定时器/计数器,当其计数溢出的时候,系统会自动重装初值,重新开始计数。这种工作方式可以省去用户软件中重装初值的指令执行时间,可以做到精确地定时时间。

综上所述,我们是要求能做到精确定时,所以选择方式2

按键输入消抖模块的选择

对于开关量输入的消抖处理一般有以下两种种处理方法。 方案一:软件延时消抖

即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~ 10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

方案二:滚动滤波消抖法

滚动滤波消抖法就是通过滚动滤波法的原理,我们将PB0~PB7电平输入,并进行五次滚存消抖,新态存2EH,旧态存2FH,这个方法能够较好的完成按键的消抖,排除按键抖动所产生的不良效果,完善了按键功能。所以我们对消抖模块选择滚存消抖。

倒计时1S方法选择

方案一:在非倒计时显示情况下,延时可采取调用主程序,重复相应次数,得到相应延时时间。如主程序每调用一次需10ms,调用100次,则得到1s的延时。在倒计时显示情况下,采取在中断设置1s到标志位,用到倒计时开启标志位即可。

方案二:每次延时即开启1s到标志位。

两个方案相比较,方案一比较简单、灵活,所以采取第一种方案来进行精准计时。

第三章 总体软件设计说明与总工作流程 总工作流程如图所示 主流程 自检模块 程序初始化 B

蜂鸣器LED 灯缓 冲子模块

调用按键消抖子模块 1分钟内取消子模块 显示更新子模块 工作模式选择模块 调用拆字子模块 时钟设定子模块 调用键盘扫描子模块 启动子模块

A

水位告警子模块模拟水温子模块煮浆子模块保温子模块 拨动开关子模块无效启动子模块 B

总体软件设计说明

本次的课程设计通过对15个子模块的循环调用来完成全自动豆浆机的模拟功能,并且采用定时器方式2精准计时。

拆字子程序:常态下(待机,保温送时分秒到显缓,其余则送工步号,倒计时到显缓。

显示更新子程序:根据显缓单元内容驱动八位数码管。

时钟设定子程序:通过扫描键号判断调时键是否按下借以对实时钟进行调校。 键盘扫描子程序:通过线反转法扫描按键键号,旧键号存65H,新键号存64H。 工作模式子程序:当无工作模式时,按下功能选择键,则显示豆浆模式,而后再按时,工作模式在果汁和豆浆两种模式中切换。

1分钟取消子程序:启动1分钟内,通过检查启动键是否再被按下,是则取消运行。

蜂鸣器LED灯缓冲子程序:根据缓冲单元内容驱动蜂鸣器和LED灯

按键消抖子程序:输入PB0~PB7电平,经5次滚存消抖后,旧态存2FH,新态存2EH。

保温子程序:以20%的功率进行加热保温。

水位告警子模块:通过检测高低水位,若有高水位或者低水位,则启动时会告警并退出。

煮浆子模块:以240S倒计时加热煮浆,若煮浆过程中检测到超水位,则停止加热,待水位恢复持续5秒后再重新开启加热。

无效启动子模块:检测功能未选择时启动键是否按下,是则告警并退出。 拨动开关子模块:输入SW0~SW7电平到缓冲单元,输出驱动L8~L15。 启动子模块:功能选择后判断启动键是否按下,是则进入预加热,预加热达到35度时,则进入预打浆。开启电机,关闭加热。待25秒打浆倒计时结束后,关闭电机,开启加热。

加热达到50度时进入打浆模式,开电机,关加热。以下再重复加热打浆2次后进入煮浆。

第四章系统资源分配及数据定义说明微处理器内部存储单元分配及数据定义 微处理器内部存储单元数据定义23H豆浆进程码 24H.0是否进行调时标志位 25H LED灯闪烁进程码 26H.0闪烁标志位

26H.1倒计时标志位 26H.2响标志位 26H.3开关蜂鸣器标志位 26H.4高低水位告警区分标志位 26H.5保温标志位 26H.6满1秒标志位

26H.7倒计时百位减到0标志位 27H工步号 28H驱动P1标志位 29H滚存消抖存储单元 2AH滚存消抖存储单元 2BH滚存消抖存储单元 2CH滚存消抖存储单元 2DH滚存消抖存储单元 2EH新态按键存储单元 2FH旧态按键存储单元 30H-37H显示缓存单元 38H200us计数单元 39H1/100s计数单元

3AH实时钟秒钟存储单元 3BH实时钟分钟存储单元

3CH实时钟小时存储单元 47H打浆,加热4次设置初值 53H闪闪闪延时200ms 59H倒计时十位,个位。

5AH倒计时百位(千位不显示 5BH保温16秒设置初值 5DH保温4秒设置初值 5FH满一秒计数

64H当前新扫描键号值存储单元 65H10ms前扫描到键号存储单元 67H保温讯响1分钟初值 69H1分钟内取消初值 6BH1分钟无效标志位

第五章局部程序设计说明

1.自检模块 功能简述

该模块主要功能为在开机时进行有关接口部件及数码显示器、指示灯、蜂鸣器等适当自检。程序设计思路及方案

当程序输入到单片机中运行后会首先进行对单片机上各个功能显示模块的自检,确保使用者所使用的单片机是可以正常使用。

原理说明及部分代码

下面通过一段程序了解自检模块的实现 MOV DPTR,#0FEFCH ;DPTR指向U3-A口

MOV A,#0FFH ;置八段均不亮的字段码(8255A初始化后输出寄存器全‘0' MOVX @DPTR,A ;输出,关数码显示器(段输出口初始驱动全为‘1'无效

MOV DPTR,#0FDFFH ;对8255A(U5接口芯片初始化

MOV A,#8BH ;设定为A口输出(驱L8~15,B口输入(按钮PB0~7,C口输入(开关SW0~7

MOVX @DPTR,A ;写入方式控制字 MOV DPTR,#0FDFCH ;DPTR指向U5-A口 MOV A,#0FFH ;置八位输出均为‘1'无效 MOVX @DPTR,A ;输出,令L8-15初始不亮 CLR P3.2 ;蜂鸣器响 LCALL D1S ;延时1S

SETB P3.2 ;关蜂鸣器

MOV P1,#00H ;P1口输出全‘0',所驱动的L0~L7指示灯全亮

从这段代码可知,再初始的状态下,系统置八位数码管全不亮,并且L8~L15也置为不亮,随后检测蜂鸣器是否能正常亮,再检测L0~L7能否全亮。通过程序的设计,完整的检验了单片机上各个模块的状态,让使用者能更好的分辨出单片机的正常程度。

2.键盘扫描子模块 功能简述

该模块主要功能为实现4*4的键盘扫描功能,扫描当前所按下4*4键盘的按键键号存入相应存储单元,并获得键值,以备后面的操作和功能实现。

程序设计思路及方案

该模块在主流程中调用键盘扫描子程序(LCALL,运用反转法扫描键盘,得到所按下按键的相应行列码。当用户未按下按键时,相应存储单元存入未按下信息,即为10H,当用户按下按键时,系统相应存储单元存入已按下信息,即00H-0FH。通过扫描,并与键码表比较行列码,相等说明扫描到所按下的按键,将键值赋值到61H储存单元,以便后面的使用。

原理说明及部分代码

61H为键值存储单元,给61H单元赋初值,通过扫描所按下按键的行列码与键码表比较,找到相等的即说明有键按下,且能精确得到相应键码,若找不到相等键码则说明为按下按键。

键号值从00H开始,最多进行16次的键码查表,DPTR指向键码表首地址,置当前键号于A 中,代码MOVC A,@A+DPTR查表读取键码表中当前键号对应位置的键码,与8位行列码比较,不同则转NK查下一个,相同表明找到当前按下的键号,代码INC 61H使键号值加1,代码DJNZ R5,KY 判断未查完键值表则继续,查完则无按键或出现异常行列码,结束并返回。

64H中存有新扫描到的键号,65H中存有相对于64H中存有的键号10ms前扫描到的键号,通过两个单位的存储比较,能够较好的判断出按键的按下与否。

3.按键消抖子模块 功能简述

该模块的主要功能是为按键输入消抖,防止出现按键抖动影响主流程。 程序设计思路及方案

将原新态存为前态,将前4次得到的电平值推送至2AH-2DH单元中,获得电平值并存为新态存放在2EH中,比较5次得到的电平值,若电平值不一致则新态不变,若电平值一致则存为新态。原理说明及部分代码。

代码MOV 2FH,2EH 将原新态存入旧的键号,即2EH为新态键值存储单元,2FH为旧态键值存储单元,代码

MOV 2DH,2CH ; MOV 2CH,2BH MOV 2BH,2AH

MOV 2AH,29H

将前4次得到的电平值推送至2AH-2DH单元中,获得电平值并存为新态,代码 MOV A,2DH CJNE A,2CH,XDR CJNE A,2BH,XDR CJNE A,2AH,XDR CJNE A,29H,XDR

比较近5次输入的电平值,一致的话存为新态,不一致则新态照旧。 4.蜂鸣器LED灯缓冲子模块 功能简述

该模块通过设定缓冲单元驱动蜂鸣器和LED灯。 程序设计思路及方案

通过设定缓冲单元来驱动蜂鸣器和LED灯,防止直接驱动蜂鸣器和LED灯这种情况下不容易修改需要驱动的方式。

原理说明及部分代码

下面一段程序可以了解整个模块功能 FMQ:JB 26H.3,LF0 CLR P3.2 SJMP LF1 LF0:SETB P3.2

LF1:MOV P1,28H Q0:RET

通过设定26H.3作为开启蜂鸣器的标志位,28H作为LED灯L0~L7,这样能够在设计过程中通过标志位来判断来使蜂鸣器能完成我们所需要设定的响的时间,而通过28H缓冲驱动LED灯L0~L7,我们就可以通关对28H的判断来了解灯的亮灭,也可以直接给28H中各个字节分别置0或1,来开启各个灯的亮灭。

5.1分钟内取消子模块 功能简述

该模块主要功能为实现当豆浆机开启工作一分钟之内都可以取消工作,使用户能再误开状态下能较好的停止豆浆机工作。

程序设计思路及方案

通过设定一个1分钟之内可以判断按键是否按下,按下就可以退出整个工作状态。

原理说明及部分代码

FQ1: DJNZ 69H,FQ2 ;1分钟倒计时 MOV 69H,#60 DJNZ 6AH,FQ2 MOV 6AH,#100

以上程序为1分钟主流程循环,通过在一分钟之内可以判断启动键是否再次按下,再次按下后就可以取消豆浆机运作。超过一分钟后就会跳出一分钟取消模块,就不能再按取消键结束豆浆机运作。

6.拆字子模块 功能简述

该模块主要功能是在待机保温时候拆送实时钟时分秒到显缓,其余状态下拆送工步号,倒计时到显缓驱动八位数码管。

程序设计思路及方案

通过判断进程码,在不同的模式下拆送不同的单元到显缓驱动八位数码显示器,以实现所需要的功能。

原理说明及部分代码 CZ: MOV A,23H CJNE A,#00H,CZT

SJMP CZ2 ;最开始不工作是显示电子表 CZT: CJNE A,#25H,CZ5 ;保温时候也显示电子表 CZ2:MOV R0,#3AH ;取秒,开始拆字实时种

MOV R1,#30H ;置显示缓冲单元首地址(对应于最右显示位

上面为拆字的部分程序,通过程序我们可以清楚的看到,拆字模块主要通过判断进程码,不同的进程码拆送不同的单元到显缓,上面一段程序为在待机进程00H,保温进程25H下拆送时分秒到显缓,而若非待机,保温。则程序跳转到CZ5,如下程序:

CZ5:MOV A,27H ; 步骤码 ANL A,#0FH ;保留低4位(个位 MOV 36H,A MOV A,27H

ANL A,#0F0H ;保留高4位(十位 SWAP A ;交换到低4位 MOV 37H,A

JB 26H.1,CZ0 ;为1不送倒计时(跳出 MOV A,59H ;倒计时

ANL A,#0FH ;保留低4位(个位 MOV 32H,A MOV A,59H

ANL A,#0F0H ;保留高4位(十位 SWAP A ;交换到低4位 MOV 33H,A MOV A,5AH

ANL A,#0FH ;保留低4位(个位 MOV 34H,A

为拆送倒计时,工步号到对应的显缓单元,以此来实现豆浆机运作过程中所需要的打浆倒计时和工步号显示。

7.时钟设定子模块 功能简述

该模块主要功能为提供用户对实时钟的调校功能。 程序设计思路与方案

当用户在使用时,如发现实时钟不准确,可简单的对实时钟进行调校功能,通过设定按键加减时分,轻松的完成实时钟的调校。主要设定六个按键,包括进入调时键K4,确定调时并退出调

时K5,小时加1键K0,小时减1键K1,分钟加1键K2,分钟减1键K2。 原理说明及部分代码

利用进程码进行设定,只有在待机,保温进程下才能对实时钟进行调校。 通过线反转法扫描键号来判断按键是否按下以实现对实时钟的调校功能。在进入调校后通过4个按键分别对小时和分钟进行加减,并将秒单位及前一级单位置0,较准确的完成实时钟的调校功能。

KTE:JNB 24H.0,L2

MOV A,65H CJNE A,#10H,L3 MOV A,64H CJNE A,#04H,L3

下面程序为线反转法扫描键号,若发现有按键按下,则新键号会存到64H中,以此实现对应的功能。65H存的10H为初始状态,即无00~0F键按下。

8.工作模式子模块 功能简述

该模块的功能主要为用户提供模式选择,正常的模式选择有豆浆机和果汁,由于本程序只设计豆浆机,但仍然提供了果汁的模式选择,较好了模拟了正常产品的功能选择。

程序设计思路及方案

当用户按下功能选择按键时,会将28H.0置0,驱动L0亮起,模拟豆浆模式,而后再按下功能选择键,则模式会在果汁和豆浆中切换。

原理说明及部分代码:

原理我们可以分析部分程序来进行,以下面部分程序为例: GZMS: MOV A,23H

CJNE A,#00H,GZ0 ;刚开始选择功能键才有效 JNB 2FH.1,GZ0

JB 2EH.1,GZ0 ;判断PB1功能选择键是否按下

以上的程序是通过判断在待机状态时的功能选择键是否按下,通过按键的按下再实行以下程序; INC 50H

MOV 28H,50H MOV A,50H CJNE A,#0FEH,GZ0 MOV 50H,#0FCH

通过对50H单元加1,而50H内容有初值0FDH,加1后变为FE即驱动L0亮起,即选择豆浆模式,而后L0与L1交替切换亮灭,即模拟豆浆和果汁模式切换。

9.水位告警子模块 功能简述

该模块主要功能为在启动时检测是否水位是否正常 程序设计思路及方案

为了模拟高低水位,我们设置为SW0模拟高水位,SW1模拟低水位,设立闪烁标志位,借此分辨不同水位不同的闪烁告警方式。

原理说明及部分代码

水位告警模块是为了让用户能再一个安全的水位状态下进行煮浆,即保证了煮出豆浆的优良度,亦能够较好的保护使用者的安全与豆浆机的使用寿命。

通过SW1模拟高水位,当SW0为“0”时,则为高水位,反之则未超水位。SW1为“0”时为低水位,反之水位正常。而通过加入闪烁标志位和高低水位告警标志位26H.4,在调用告警闪闪闪模块中,可区分高低水位的告警,即高水位告警为闪烁3次,同步蜂鸣器响;低水位告警为闪烁一次,同步蜂鸣器。

10.模拟水温子模块 功能简述

该模块主要功能为在通过AN1控制A/D转换数据拆送到数码管最右边两位模拟水温。.

程序设计思路与方案

为了更好的模拟水温拆送,在此模块中独立进行拆字程序,而非在拆字模块中进行拆送,通过对A/D数据的BCD转换,将0~256转换为0~99拆送显示温度,而AN1可调整模拟水温。

原理说明及部分代码

通过设定AN1调整,由以下程序完成: MOV DPTR,#0FBF9H ;A/D子程序。

MOVX A,@DPTR ;读取A/D转换结果的8位二进制数字值

即可以通过AN1调整模拟水温。而A/D转换结果存为缓冲单元,而后进行BCD转换,将其二进制数转换为0~99的BCD码拆送温度显示。超过99则送“EE”到温度显示显缓单元中。

11.无效启动子模块

功能简述

该模块主要功能为防止用户在未选择模式就按启动进入。 程序设计思路及方案

通过对功能模式灯的亮灭进行判断是否选择完模式,是则正常启动,若无选择模式进入,则告警并且退出。

原理说明及部分代码

首先检测功能模式灯是否亮起,若未亮起时检测到启动键按下,则会有告警程序,并且退出运行。告警程序如下:

WX2: JNB 2FH.0,WX0

JB 2EH.0,WX0 ; 启动键是否按下 CLR 26H.2 ; 响1s标志位0,持续响 CLR 26H.3 ; 响 WX3: DJNZ 5CH,WX0 MOV 5CH,#100 ; 响1s SETB 26H.3 ; 停响

SETB 26H.2 ; 响1s标志位1,不再响

在无选择模式下,启动键按下后,则会开启响标志位告警,并有1S主流程循环,告警完才关闭蜂鸣器。

12.实时钟子模块 功能简述

该模块主要功能为精确实时钟计时。 程序设计思路及方案

利用定时方式1产生中断进行精确实时钟计时。 原理说明及部分代码

当定时器1满足中断条件(即定时器计满256TM,发生中断,找到中断路口地址001BH,跳转到子程序IT1P。子程序的开头和结尾分别对累加器A和PSW进行入栈和出栈,保证完成中断回到主循环后,能保存累加器和PSW的数据。进入IT1P子程序表示完成200us计时,此时先对38H 单元加1,用以做200us计时单元。同时判断38H是否为36次,即是否计满36*256TM=10ms?当时间未到10ms,则跳出子程序,继续等待中断发生,再过256TM再进入程序,为38H单元加1。当计满10ms,对200us单元38H清零,并对百分秒单元39H加1,判断计满100次即1s的时间,将百分秒单元清零,对秒单元3A单元加1,之后按照时间规律,每60s对秒单元清零、分钟单元加1;每60min对分钟单元清零、小时单元加1……但处理秒、分和时的加1需要十进制加1(BCD码加1,使用ADD累加并用DA进行十进制调整,可以完成此功能。

13.显示更新子模块 功能简述

该模块主要功能为将显示缓存单元30H-37H的数据通过查表法找到相应的段码表将要显示的内容显示到数码管上。

程序设计思路及方案

通过单元指针逐个将显示缓存单元30H-37H的数据,查表法找到相应的段码表将要显示的内容显示到数码管上,再通过循环和判断执行相应程序。

原理说明及部分代码

置显缓首位,位码首位,查询相关的字段码,输出字段码,保存显示1ms,消除串显,指向下一个单元,在30H-37H单元循环。

14.启动子模块 功能简述

该模块为豆浆机运行的主要模块,模块中实现豆浆机的预加热,预打浆,3次加热打浆以此来完成豆浆打磨加热的主要过程。

程序设计思路及方案

通过判断豆浆模式选择完后正常启动进入,利用进程码实行整个过程。利用进程码来完成预加热-预打浆-加热-打浆-加热-打浆-加热-打浆。利用L2灯模拟加热是否开启,L3模拟电机。

原理说明及部分代码

正常启动后即赋进程为10H进程时,进行预加热,而后通过判断温度是否达到35度,达到后关闭加热(即灭L2,开启电机(即亮L3,进程码送11H,进行倒计时25秒的预打浆,通过满1秒标志位的设立,准确的进行倒计时。25秒倒计时结束后重新开启加热,关闭电机,待温度达到50度后,关闭加热,开启电机进行打浆,接下去重复加热打浆两次,待最后一次打浆完成后即完成整个打磨部分,直接送煮浆程序进程码。下面示例程序为对进程码的判断: Q1: CJNE @R1,#10H,Q2

CLR 28H.2 ;加热

即在不同的进程中完成不同的功能。 15.煮浆子模块 功能简述

该模块是在豆浆机打浆完成后进行的最后一步煮浆程序,为240秒的加热过程,并且有水位溢出判断功能

程序设计思路及方案

通过对满一秒标志位的判断进行较为准确的240秒加热倒计时,并且判断在加热过程中是否有超溢位,有则停止加热,待水位恢复正常持续5秒后才重新开启加热。

原理说明及部分代码

通过对进程码的判断,当进程为20H进程时,进行煮浆。开启加热。加热过程中通过判断水位情况,若出现高水位则会停止加热,待恢复水位持续5秒后才重新开启加热,以下列程序为例: LK1: DJNZ 5CH,LK2 ;5S内无益处才重新加热

MOV 5CH,#100

INC 4FH MOV A,4FH

CJNE A,#06H,LK2 ;5秒后无超水位

CLR 28H.2 ;开加热

即为判断恢复水位5秒后才重新开启加热。

若是为低水位状态下,即出现“干烧”,则煮浆模式停止,并退出运行。恢复到待机状态。

240秒煮浆完成后,即进入保温模块。 16.保温子模块 功能简述

该功能模块是对煮完的豆浆讯响1分钟后,以20%的功率进行加热保温。 程序设计思路及方案

设定响标志位来开启蜂鸣器讯响通知。而后进入保温,通过设定加热4秒,停热16秒,来实现20%的功率加热保温。

原理说明及部分代码 如下列程序:

BW1: SETB 28H.2 ;停加热 DJNZ 5BH,BW0 MOV 5BH,#16

DJNZ 5CH,BW0 ;延时16s MOV 5CH,#100 CLR 28H.2 ;开加热

CLR 26H.5

BW2: DJNZ 5DH,BW0 MOV 5DH,#4

DJNZ 5EH,BW0 ;延时4s MOV 5EH,#100 SETB 26H.5 SJMP BW1

通过调用主流程循环,以此来实现4秒的加热以及16秒的停热来进行加热保温。

第六章系统功能与操作说明 系统功能

全自动豆浆机能够自主的在启动后进行整个豆浆的打磨煮浆过程,全程自动化,无需使用者额外操作。

而本全自动豆浆机还包括有水位情况的报警,实时钟的模块,很好的满足用户的需求,以及保护使用者。

用户在使用时候,可以轻松操作,无需任何学习,只需要在选择模式后按下启动后即可,豆浆机将全程自动化完成,用户只需轻轻一点,稍等段时间即可以享受一杯美味的豆浆。

用户若有误启动,在启动的一分钟内可再按此启动键取消启动。 用户界面及操作说明 针对用户需求进行说明。 常规显示界面及其说明

常规显示状态下,8位数码管是显示“时钟 - 分钟 - 秒钟”,当用户按下进入启动后,最左边两位显示当前所进行的工步的工步号。左边第三位到第六位则显示豆浆过程中打浆倒计时,煮浆倒计时。最右边两位数码管则显示当前豆浆温度。

数码管显示界面,从左到右分别为第一位至第八位

常规显示状态,即显示当前时间 1. 进入运行界面如下:

工部号

倒计时

温度

2、

L0为豆浆模式指示灯,

L1为果汁模式指示灯,

L7为保温灯,L3加热灯,L4为电机灯,PB0为功能选择键,PB1为启动/取消键,如下图

豆浆模式果汁模式加热电机保温启动键功能选择键以上为各个功能模式灯与按键,用户可通过对比参照使用与观察。

时间调整模式

当用户按下调时功能键后,则会进入调时,然后用户根据所需要调整的时间进行按键加减操作,K0和K1为分别对小时单位进行加减1操作,而K2和K3则为对分钟单位进行加减1操作。用户可以简单轻松的对实时钟进行调校,在调校完成后,用户只需按下确定调时键K5,即可退出调时。

L0 L1 L3 L4 L7

PB0 PB1 01 240 55

调时各个按键功能如下图: 进入调时键 确定调时退出键 小时+1 小时-1 分钟+1 分钟-1 水位警告模式

当用户开启时,若发现功能灯闪烁三次并同步伴有蜂鸣器响,则为高水位。若功能灯闪烁一次,同步伴有蜂鸣器响,则为低水位。用户通过报警的不同自行改变水量重新进行煮豆浆。 保温模式

当煮浆完成时,会有一分钟提示音提示用户已完成,用户听到提示音就可提取美味豆浆。再按次启动键即可退出保温。

K1 K0 K3

K2 K4 K8 K12 K5 K9 K6 K7 K14 K10 K13 K11 K15

第七章存在问题与改进程序说明

在整个程序的设计中,仍然有着一些程序存在问题,这是在设计的时候没有考虑周全导致的,在经过了与老师的探讨和同学间的互相讨论下,对程序进行了完善。以下为几个存在问题的程序以及其改进后的程序。

1.模拟水温模块

在水温模拟模块中,设计时由于考虑不周全,单纯的认为只需要拆送0~99到显缓中就可以,于是设计出了错误的程序,如下:

CJNE A,#9AH,LA1

LA1:JNC LA2 ;超过99显示EE CLR C DA A MOV 58H,A

MOV B,A ;A/D转换结果拆送最右两位显示缓冲单元 ANL A,#0FH MOV 30H,A MOV A,B ANL A,#0F0H SWAP A MOV 31H,A

这个程序模块,是个虚假数据,拆送了一个虚假的0~99到显缓,并没有经过BCD转换,在温度送显缓调整过程中会有跳步现象,无法完整的模拟出温度变化,是我当初

设计时候没有考虑周全造成的。而后在老师的指导与同学的探讨下,有了水温拆送的正确拆送方法,自己加以改进程序。改进程序如下:

MOV A,58H MOV B,#10H DIV AB MOV 31H,A MOV 30H,B

即可以完整的模拟0~99的水温变化,而非虚假的数据转换。通过BCD转换拆送到显缓。较为

完整的模拟出了水温。 2.水位告警模块

在最初始的水位告警模块中,初始判断只判断了预加热状态下的水位告警,而没有考虑到接下去的预打浆模块,使整个豆浆机在模拟过程中,跳过了在预打浆进程下的水位检测告警。经老师指正修改后,添加了判断进程,使整个过程中都有着水位检测的功能,改进后的程序如下: SWGJ: JNB 26H.0,SW ;JNB,0跳转,

MOV A,23H

CJNE A,#10H,GJQ ;预热35度 SJMP GJ3

GJQ: CJNE A,#11H,GJE ;预打浆 SJMP GJ3

GJE: CJNE A,#12H,GJ1 SJMP GJ3

在修改过的程序中,在各个进程中都进行了水位的检测,补缺了之前程序漏过的预打浆,加热打浆三次进程下的水位告警,提高了整个设计的完整性。

第八章课程设计总结

本次为期两周的课程设计,让我收获颇多。

在两周的课程设计中,我们对自己所学的知识在实际中的应用有了很大的提高,通过自己去一步一步设计整个豆浆机的流程,再通过老师的指教,与同学之间的探讨,逐步完善自己的程序,使自己所设计的程序能够一步步实现设计要求,整个过程是在纠正自己的学习认知与对未知的探讨求知过程,一整个班级在为同一个目的奋斗的学习氛围很好的提升了学习的效率。

通过两周的课程设计,我了解到一个程序的初步到成形到完善,是在不断的修改中完成的。单单就这次设计的全自动豆浆机,从初步成形到最终成形,中间修修改改不下7次。于是演化到了最终命名的程序版本由完成版到最终完成版再到究极版。而程序到现在也不代表完善,还有着很大的提升空间,比如扩展模块中还有很多没做成功进去,果汁模块在我设计的程序中也没有。这中间仍然存在很大的提升空间。而实时钟的调时我追求简单便捷的设计,也证明了一个程序往往有着很多种不同的编辑方法,不同的模式有着不同模式的优点,并非说全自动豆浆机程序设计出来,每个人就都得一个样子。程序有着很大的自主性,在于你是否去钻研,去改进。

两周时间里。通过对程序的改进,测试,也加强了自身对所学知识在实际应用中的操作。也加强了自己对知识的理解,并稍微懂得灵活运用所学知识去设计程序。

而最后的答辩,说实话,是第一次进行与老师一对一答辩。感觉很新奇,但是心中仍然非常紧张。但是,这种一对一的答辩确能够让每个学生去熟悉自己所设计的程序,无论是否完全自我设计,重要的是了解整个程序如何设计,为何能这样设计。我想,这才是这次的课程设计中老师需要我们掌握的。就是了解书本知识在实际中的应用,自己能掌握程序设计的原理。

在两周的课程设计里面,我从自己的设计里面找到了很多不足之处,最严重错误的就是模拟水温模块。由于当初没听懂老师的要求,导致理解错误,在模拟水温时,没用好BCD转换,以为简单的一个 DA A 调整就可以进行BCD转换,导致拆送温度显示的模拟水温是一个假数据,数据屏蔽了2A~2F,3A~3F等数据,拆送的温度显示还是一个不连续的数,这是绝对错误的。在老师的提点下,通过询问同学,才发现出自己程序的问题,后来,再请教同学中,了解到了模拟水温拆送的正确方法,才改进了模拟水温模块,使水温模拟能够拆送一个连续的0~99的数。在程序设计中,往往很多自己认为正确的程序仍然得经过反复推敲,甚至和同学互相探讨,也许,会找到优化的方法,甚至自己程序设计错误的地方。

两周的课程设计在最后的答辩结束时正式落下帷幕,两周里面。自己收获了很多,包括在程序的设计,包括程序设计时需要严谨对待的态度,程序设计时细节的重要性,甚至有些应用光看书

《微机原理及接口技术》课程设计 根本所掌握不到的。 而最后的答辩又让自己第一次体验到面对面答辩, 为自己的课程设计有了一定 的收尾。 在两周的课程设计里面, 我对课本知识在实际的应用有了很大的进步, 也通过了答辩成功验收 了自己两个礼拜的成果。这次的课程设计是一个非常有效且有益的课程设计,让我收获很多。 30

本文来源:https://www.bwwdw.com/article/kzt3.html

Top