空调模拟控制器

《微机原理与接口技术》课程设计

设计基于《微机原理与接口技术》知识,用汇编语言编写程序,实现在PC机上模拟空调控制操作。设计要求:

1、用菜单输出功能选项

2、通过键盘输入进行各项控制操作

3、功能要求模拟一般空调的所有功能

扩展要求:

1、实现图形界面

2、实现硬件定时


    

空调模拟控制器设计

摘要: 本空调模拟控制器主要利用汇编语言,结合所学的《微机原理与接口技术》的知识,在PC上模拟空调控制。该控制器包含了一般空调的所有基本功能,通过汇编语言编程设计,最终实现以界面显示的形式展示功能菜单,用户可根据菜单提示,选择相应的操作,而控制器根据用户输入的选择执行对应功能。该设计程序中主要应用到汇编语言中断、子程序调用相关知识;8086指令系统中相关指令应用,以及相关DOS功能调用和宏汇编知识。本课题设计在程序编写和调试过程中使用的工具为EMU8086,利用该工具的源码编辑器,汇编工具以及DEBUG模拟器等,最终完成代码编写实现相关功能。

关键字:模拟控制器;汇编;中断;DOS功能;EMU8086

 

1     设计任务分析与方案选择

1.1        设计任务分析

本课程设计要求设计空调模拟控制器,该控制器是在PC机上模拟对空调的操作,因此该模拟控制器不涉及硬件电路部分的设计。课题要求菜单输出功能选项因此该模拟控制器应该输出功能菜单供用户选择,用户根据菜单提示对空调模拟控制器进行操作。另一方面,课题要求该空调模拟控制器应该包含一般空调的所有功能,因此结合实际,该控制器应当包含设置温度,制冷制热,上下扫风等功能。用户根据菜单提示,通过键盘输入以上功能选项进行控制模拟,而该控制器对用户选择的功能应当做出相应的响应提示。

1.2        设计方案

1.1.1       功能菜单设计

该空调模拟控制器包含一般空调的所有功能,其功能按钮包括开机、关机按键,菜单按键,返回按键,制冷制热按键,温度调节按键,扫风按键和睡眠按键共8个按键。而在菜单功能中,包含了设置温度,制冷制热,扫风,睡眠,返回和关机功能。其中,设置温度功能中,实现在给定的初始温度25℃的基础上,可以对温度设置进行提高和降低;在扫风功能中,可以选择上扫风和下扫风;在制冷制热功能中可以实现制冷或制热的选择。

(分析任务)显示中断,输入输出中断,菜单功能设计

1.1.2       工作流程设计

该空调模拟控制器界面展示有主要的功能按键操作提示,用户根据最初的界面提示,首先进行的是按下开机键使空调开机,开机后选择菜单按键。用户按下菜单功能按键后会有相应的菜单提示,用户选择提示下的功能按键对空调进行相关的功能控制。具体的工作流程设计见下图:

空调模拟控制器_第1张图片图1 工作流程图

    

空调模拟控制器_第2张图片图2  温度设置工作流程图                    空调模拟控制器_第3张图片图3  制冷制热工作流程图

 

 

空调模拟控制器_第4张图片图4  扫风工作流程图                           空调模拟控制器_第5张图片图5  睡眠工作流程图

1.1.3       工作界面设计

空调模拟控制器的界面展示主要的功能按键,指导用户进行功能操作;根据用户选择的不同功能操作,空调的状态也通过界面显示的方式展现。因此设计的工作界面如图:

空调模拟控制器_第6张图片图6  界面设计图

2                  详细设计

2.1           功能实现理论分析

通过方案设计可知,完成设计大致分为输入输出及界面显示,主要功能模块,子功能模块三大部分。其中输入输出可通过DOS的INT 21H中断实现,界面绘制可通过DOS的INT 10H实现,子功能模块对应不同的子函数,根据工作流程进行子函数调用,把各个功能模块整合到一起。在实现这三大功能模块的过程中,由于代码量较大,很多子功能模块都需要用到输入功能和延时函数以及在实现界面和输入字符的过程中需要光标定位,因此借助宏汇编指令MACRO/ENDM定义这几个通用函数。

2.2           功能实现程序设计

2.2.1       菜单功能设计

功能模块有开机、关机、返回、菜单选择、制冷制热、扫风、温度设置、时长设置、睡眠几个功能,其中制冷制热又包括制冷和制热两个模块,扫风又包括上扫风和下扫风两个模块。在进行以上模块设计时,首先要满足开机条件才能进行其他功能操作,因此空调模拟控制器应先判断当下时刻是否已经处于开机状态。

对于开机模块,首先调用输入函数,判断用户输入的字符是否等于‘O’,若等于‘O’,说明用户进行了开机操作,程序跳转到OPEN子程序,用户可以进行下一步操作,若用户接着输入‘M’,则进入MENU模块,可在提示下选择不同的功能,若输入‘C’选择关机则进入关机模块,若输入其他字符则为无效字符,会提示重新输入 ;若是输入为其他值,则提醒输入错误,需重新输入,于是重新进入查询输入值的状态。

对于菜单显示模块,当跳转到MENU模块时提示可选择的所有功能模块,包括T—设置温度,A—制冷制热,W—扫风,S—睡眠,R—返回,C—关机,并在界面提示用户输入,用户输入不同的字母将进入对应的功能模块,执行相应的功能;若输入以上字符以外的字符,将提示输入错误重新输入。

对于温度设置模块,若在菜单中选择了温度设置,将跳转到设置温度的子程序中。在该模块中首先在界面显示用户此时正处于温度设置的位置,并显示默认的温度为25摄氏度;提示用户可以进行加温度和减温度两种操作,即当用户输入I时,温度增加1摄氏度;用户输入B时,温度减少1摄氏度;用户输入R时返回菜单;用户输入为其他值时提示输入错误重新输入。

对于制冷制热模块,若用户在菜单下选择了制冷制热,界面提示用户当下正处于制冷制热的位置,并提示用户可以选择H进行制热的操作或是选择L进入制冷的操作。若用户输入的是R返回,则返回到主菜单;若为其他,则提示输入错误并重新输入。当用户进入制冷或制热的操作后,界面会提示用户进行时间设置,该时间设置调用一个延时子程序模拟制冷制热的时长。另外,在制冷或制热的过程中调用对应的界面显示语句,在屏幕上向用户展示正在制冷或制热的状态。

对于扫风模块,几乎与制冷制热模块相同。用户进入扫风模式下,界面显示用户此时正处于扫风的位置,并提示用户可以可以选择U上扫风或者D下扫风。若用户输入R返回,则返回到主菜单;若输入为其他,则提示输入错误并重新输入。在用户进入到上扫风或者下扫风模式中时,首先也会进行时间设置,可设置扫风时长。扫风时界面显示对应图案,表示此时正在进行上扫风或下扫风。

对于睡眠模块,若用户在主菜单中选择S睡眠则进入睡眠模式。在该模式下为了便于返回住菜单,界面提示用户若选择R返回即可返回主菜单,若选择Y确认睡眠则进入下一步设置睡眠时间,然后即可进入睡眠状态。在睡眠状态下,界面显示相关图案表示现在正处于睡眠的状态。

对于R返回模块,也是各个小的功能模块都有用到的一个模块,该模块主要用于返回主菜单。当用户输入R返回时,界面提示Return并返回到主菜单的位置。

对于C关机模块,当用户在主菜单中选择C关机时,经过一段时间的时延关机完毕,界面提示用户Closed,程序返回到最初的扫描状态。此时用户还要继续操作的话就必须重新按O开机,再一次可以对空调模拟控制器进行操作。

2.2.2       输入输出设计

输入和输出利用DOS21H中断即可实现。根据前面的分析可知,在各个功能模块都要用到输入功能以实现用户对空调的控制;同时也要用到输出功能显示界面,指导用户使用。因此利用宏汇编MACRO/ENDM可定义好输入输出程序,以便在其他地方可以直接调用。对于输入程序,用到21H中断的08H号功能,其中通过键盘输入的字符存放在AL中。对于输出程序,用到21H中断的09H号功能,输出字符串的有效地址放在DX中。

2.2.3       界面显示设计

在界面显示时主要需要用到输入程序、定位光标位置和绘制窗口程序。由于在进行输入输出时也需要定位光标的位置,因此将定位光标位置功能也用MACRO/ENDM写一个程序段,便于在其他地方调用。在实现置光标位置时,利用10H中断的02H号中断,其中行位置存放在DH中,列位置存放在DL中。绘制窗口程序也设置为一个程序段,主要用到10H的06H功能对窗口进行初始化并定位绘制窗口的上下左右位置,其中空白区域缺省属性放于BH中,上位置放在CH中,左位置放在CL中,下位置放在DH中,右位置放在DL中。在调用这个程序块时,分别将空白区域缺省属性和上下左右的参数带入就可以实现区域绘制。在绘制窗口时还用到0FH和02H号功能,分别用于读取显示器模式和设置显示器模式,实现窗口显示出不同颜色等属性。另外,在窗口显示过程中,还需要自己以字符串的形式定义不同的图形图案,然后通过字符串输出与之前绘制的窗口背景共同构成整个界面。初次之外,许多提示性语句也多次用到,因此只需实现定义好字符串,需要输出该提示性语句时,用输出功能输出该字符串即可完成。

2.3           工作流程程序设计

完成各个功能模块的设计后按照工作流程将各个功能模块整合起来。整体程序框架包含数据段和代码段以及部分通用代码块儿。在数据段中,主要是以字符串的形式定义界面显示的图案,窗口图形和提示性语句。在代码块儿中包含输入输出,置光标和创建窗口程序。在代码段中首先调用创建窗口的代码块儿结合界面图形创建窗口,接着进行按键扫描。调用输入,光标定位代码块完成用户操作信号的读取。接着判断用户输入的字符并执行该字符对应的功能模块。

3                  模拟控制器调试与效果分析

完成代码编写后使用EMU8086进行功能测试与代码调试。调试效果及分析如下:

空调模拟控制器_第7张图片图7  运行结果1

运行结果1出错,因为8086不能识别问号,暂时用其余字符来占位。修改代码后运行效果如下:

 

空调模拟控制器_第8张图片图8  运行结果2

运行结果2如图,此时可以在模拟器屏幕输入O开机,然后对模拟器进行其他功能操作控制。在执行窗口可以看到各个寄存器的状态里面存放的数据,因此可以利用寄存器窗口和单步运行进行代码调试。

空调模拟控制器_第9张图片图9  运行结果3

 

运行结果3是主菜单界面,提示用户可以输入哪些操作符,并且在固定界面有对应的各个操作符的含义。例如输入设置温度指令和输入其他指令,效果如下图:  

空调模拟控制器_第10张图片图10  运行结果4                                    空调模拟控制器_第11张图片图11  运行结果5

下图是正在进行制冷的效果图。计时数据存于BL中,因此通过寄存器窗口可以看到在制冷过程中,BL中的数值在减小,直到减到30(30H对应数字0)时停止制冷。同理,其余功能中的定时与此类似。

 

    空调模拟控制器_第12张图片图12  运行结果6                                    空调模拟控制器_第13张图片图13  运行结果7

 

4                  问题解决

1.  如何实现定时计数:学习了时钟服务INT 1AH中断,利用00H号中断可进行读取当前时钟值,通过将需要定时的时钟值与当下的时钟值相对比实现时延和定时计数。

2.  如何绘制窗口:学习创建创建窗口的程序,关键代码是利用INT 10H的06H初始化屏幕,清窗口并分别进行窗口上下左右边界的定位。

3.  为了使空调模拟控制器工作过程更为简单清晰,不断调整工作过程,实现代码复用,简化程序。

参考文献.

[1] 陈寿宏, 周晓亮,梁光发 基于单片机的空调控制器的设计[J], 应用天地, 2012,31(1): 86-88

[2] 蒲江, 姚志强,唐金艺 用汇编语言创建图形界面[J], 电脑开发与应用, 2006,19(8): 49-51

[3] 黄玉清,刘双虎,杨胜波 微机原理与接口技术[M] 北京:电子工业出版社,2016

 

附件清单

        附件1 代码清单

你可能感兴趣的:(随笔杂记,汇编语言,设计,界面,微机原理)