微原课设家用电热淋浴器的设计.docx
《微原课设家用电热淋浴器的设计.docx》由会员分享,可在线阅读,更多相关《微原课设家用电热淋浴器的设计.docx(25页珍藏版)》请在冰豆网上搜索。
微原课设家用电热淋浴器的设计
摘要
随着社会和科学技术的日益发展,家用电热淋浴器也受到了广大家庭用户的信睐。
本次课程设计设计的项目就是模拟电热水器控制器的设计,本项目的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接。
因此,硬件电路的设计及实现相对简单。
控制系统的硬件用8086系统构成:
CPU8086,8254定时器/计数器芯片,8255并行接口芯片,键盘单元,4位7段数码管单元,A/D转换单元,电子发声器等单元。
关键字:
8254定时器/计数器8255并行接口A/D转换电子发声器等
1概述
到2003年,我国城市家庭热水器产品的普及率已达到71.5%。
中国家电市场调查研究课题组经过近4年的连续性调查发现,中国城市家庭热水器产品的普及率基本稳定在70%左右,城市家庭较高的普及率说明热水器市场总体上已进入成熟阶段。
然而家用电热淋浴器控制器的设计也是相当重要的,是值得引起关注的。
1.1设计内容
要求打开电源后,先设定水温,水温分为八档(30℃~100℃,每10℃为一档);按下启动键后,开始测量水温并显示,控制电热管加热。
1.2设计要求
1)控制系统硬件用8086系统构成:
CPU8086,定时器/计数器芯片,并行接口芯片,中断控制器,键盘单元,4位7段数码管单元,模数单元,蜂鸣器等单元。
2)设计控制系统应用软件。
3)系统功能:
智能启动电热管加热和停止加热、上下限水位报警等功能。
4)设定两个按键,其中一个用来增加温度,另一个用来降低温度。
5)超过上限水位和低于下限水位发出不同的报警音。
1.3设备需求
PC微机一台、TD-PIT+实验系统一套
2概要设计
本设计通过运用8254、8255和ADC0809等芯片来模拟设计一个家用电热淋浴器控制器。
通过此模拟电热器,可以在打开电源后,先设定水温,水温分为4档(小于30℃、30℃~60℃、60℃~100℃、大于100为一档)并且这个四个档分别对应四个不同的LED灯;按下启动键后,开始测量水温并显示在相应的显示单元上,启动电热管加热和降温功能,当温度不在设置范围内时,将会启动报警装置,对其进行报警。
2.1硬件设计
1)水温设定系统
主要是通过键盘上的16个按键,选定其中三个键,分别作为加温、减温和确定。
首先将X1~X4初始化为07H,这样键盘上就只有一行可以实现按键的输出,然后通过Y1~Y4判断哪一列有键按下,最后通过程序处理判断是否按下了此键。
2)分档加热控制系统
通过0809芯片的调节旋转按钮来达到加热的控制。
首先将温度分为四个档(0~30,30~T0,T0~100,100~255),其中T0为用户自己设置的水温,设置了相应的指示灯来提示档数。
还设置了水温不在30~100范围内时,发出声音报警的功能。
3)声音警报系统
当水温过低时系统会有一种提示灯和一种声音提示,当水温过高时系统也会有另一种提示灯和另一种声音来提示
4)LED显示灯的控制
使用LED显示灯可以更直接地控制水温,当水温大于100时,一个红灯亮,当水温在100~T0时,两个红灯亮,当水温在T0~30时,两个绿灯亮,当水温低于30时,一个绿灯亮。
2.2总体流程图
如图2-1。
图2-1总体流程图
2.3硬件连线图
如图2-2
图2-2总的硬件接线图
3详细设计
本项目的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
硬件电路由A/D转换模块、电子发声模块和键盘扫描及数码管显示模块组成。
3.1A/D转换设计
ADC0809包括一个8拉的逐次逼近型的ACD部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。
用它可直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。
ADC0809的主要技术指标有分辨率、转换时间、电源灵敏度、时钟频率等。
其芯片引脚图如图3-2,硬件接线图如图3-3。
图3-2ADC0809引脚图图3-3A/D硬件接线图
其核心代码如下:
MOVDX,AD0809;启动A/D转换
OUTDX,AL
MOVDX,AD0809;读出转换结果
INAL,DX
MOVAH,0H
MOVAD_N,AX
CALLCMP_M;确定安全范围
CALLLED;LED显示十进制
MOVAH,1;判断是否有按键按下
INT16H
JZLOOP1;无按键则跳回继续循环,有则退出
QUIT:
MOVAX,4C00H;结束程序退出
INT21H
3.2电子发声设计
根据实验提供的音乐频率表和时间表,编写程序控制8254,8254内部结构和引脚图如图3-4所示。
使其输出连接到扬声器上能发出相应的乐曲。
利用8254的方式3——“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率方波。
频率表和时间表是一一对应的,频率表的最后一项为0,作为重复的标志。
根据频率表中的频率算出参应的计数初值,然后依次写入8254的计数器。
将时间表中的相对时间值带入延时程序来得到音符演奏时间。
其硬件接线图如图3-5所示。
图3-48254内部结构图和引脚图
图3-5电子发声硬件接线图
其核心代码如下:
;扬声器报警发声---------------------------------------------
BAOJINGPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;定时器0、方式3
OUTDX,AL
MOVDX,0FH
MOVDX,0FH;输入时钟为1.0416667MHz,1.0416667M=0FE502H
MOVAX,0E502H
MOVBX,FREQ
DIVBX;取出频率值计算计数初值,0F4240H/输出频率
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,TIME
CALLDELAY
MOVDX,MY8254_MODE;退出时设置8254为方式2,OUT0置0
MOVAL,10H
OUTDX,AL
POPDX
POPCX
POPBX
POPAX
RET
BAOJINGENDP
3.3键盘扫描及数码管显示设计
实验系统中的键盘及数码管显示单元提供了4行×4列共16个按键,4个7段数码管了接成扫描电路方式。
共用段位控制信号A~Dp,各自独立的公共端主列选择信号X1~X4,行扫描信号为Y1~Y4。
电路原理如图3-6所示。
图3-6键盘及数码管显示单元电路结构图
X1~X4控制4位数码管的公共端,并连接到按键的一端,作为列选,确定是哪一列的按键按下。
Y1~Y4连接到按键的另一端,作为行选,用于检测哪一行的按键按下。
结合行选和列选即可得出是哪一个按键按下。
在软件设计上要注意消除按键抖动的处理以及数码管显示的刷新。
其中需要用到8255,8255的内部结构和引脚图如图3-7所示,其相应硬件连线图如图3-8所示。
图3-78255内部结构和引脚图
图3-88255与键盘及数码管硬件连线图
其核心代码如下:
;LED显示
LEDPROCNEAR
MOVAL,0EH
MOVDX,MY8255_A;初始化A口指定显示管百位显示
OUTDX,AL
;MOVAX,INIT_N
MOVAX,INIT_N
MOVBL,64H
DIVBL
MOVBH,AH;保存余数
MOVSI,OFFSETN_LED_CODE
MOVAH,0H
ADDSI,AX
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;写B口输出百位
CALLDALLY1
MOVAL,0DH
MOVDX,MY8255_A
OUTDX,AL
MOVAL,BH;回复余数
MOVAH,0H
MOVBL,0AH
DIVBL
MOVBH,AH;保存余数
MOVSI,OFFSETN_LED_CODE
MOVAH,0H
ADDSI,AX;计算偏移量
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;写B口输出十位
CALLDALLY1
MOVAL,0BH
MOVDX,MY8255_A
OUTDX,AL
MOVSI,OFFSETN_LED_CODE
MOVAL,BH
MOVAH,0H
ADDSI,AX
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;输出个位
CALLDALLY1
RET
LEDENDP
SCANPROCNEAR;扫描是否有按键闭合子程序
MOVAL,07H
MOVDX,MY8255_A;将4列全选通,X1~X4置0
OUTDX,AL
MOVDX,MY8255_C
INAL,DX;读Y1~Y4
NOTAL
ANDAL,0FH;取出Y1~Y4的反值
RET
SCANENDP
CLEARPROCNEAR;清除数码管显示子程序
MOVDX,MY8255_B;段位置0即可清除数码管显示
MOVAL,00H
OUTDX,AL
RET
CLEARENDP
4系统测试
按照系统连线图连接电路,运行程序。
在实际的设计中,由于没有多余的8254芯片,则利用单次脉冲单元模拟。
8254的计数程序中编译了循环语句,主程序则根据循环的语句进行系统的执行。
在计数到0时执行中断程序,并使电子发声单元发声。
在按下与程序中对应的时间表次数时,电子发声单元开始发声,程序中有电子发声单元的延时子程序。
所以,在电子发声单元发声一段时间后停止发声,程序继续运行主程序。
在测试的过程中,遇到一些问题。
在最开始的测试中,由于粗心导致8254中没有一个频率输入,从而导致电子发声单元无法发声。
则开始分别测试各个芯片的电路是否连接正确。
我们把连接电子发声单元的线路连接到发光二极管上,测试8254中的连线是否正确。
但是,发光二极管发光正常。
然后在询问老师后了解到。
电子发声单元要有一定频率才能发声,最后我们发现此系统并无频率输入,从而导致电子发声单元无法发声。
在连接输入频率后再进行测试,系统能正常发声。
但是,程序在运行到最后循环的时候又遇到一个比较棘手的问题。
就是整个系统无法循环。
在编译连接程序的过程中我们只注意程序是否又错误,并没有注意编译器中提示的警告。
所以,程序的循环问题没有执行。
我们重新检查程序中的循环问题,进过翻阅相关书籍和请老师帮组的情况下,顺利的解决了循环问题。
最后,把所有的问题解决后,再次执行程序。
系统能够正常的执行作息时间的功能。
总结
此次为期两周的微机原理与接口技术的课程设计可以说是获益匪浅。
通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:
仔细谨慎,精益求精。
本次设计主要用到了5254单元、8255单元、A/D转换单元以及键盘及数码管显示单元和电子发声单元。
在系统调试过程中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。
通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。
通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。
而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。
把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。
参考文献
[1]赵树升,赵雪梅.现代微机原理及接口技术[M],北京:
清华大学出版社,2008年8月
[2]戴梅萼.微型计算机技术及应用——从16位到32位(第2版)[M],北京:
清华大学出版社,2003年2月
[3]王成耀等.汇编语言程序设计.北京:
机械工业出版社,2004
附件
源程序代码如下:
;****************根据查看端口资源修改下列符号值*******************
IOY0EQU0DA00H;片选IOY0对应的端口始地址
IOY1EQU0DA40H;片选IOY1对应的端口始地址
IOY2EQU0DA80H;片选IOY2对应的端口始地址
;*****************************************************************
MY8255_AEQUIOY1+00H*4;8255的A口地址
MY8255_BEQUIOY1+01H*4;8255的B口地址
MY8255_CEQUIOY1+02H*4;8255的C口地址
MY8255_MODEEQUIOY1+03H*4;8255的控制寄存器地址
AD0809EQUIOY0+00H;AD0809的端口地址
MY8254_COUNT0EQUIOY2+00H*4;8254计数器0端口地址
MY8254_COUNT1EQUIOY2+01H*4;8254计数器1端口地址
MY8254_COUNT2EQUIOY2+02H*4;8254计数器2端口地址
MY8254_MODEEQUIOY2+03H*4;8254控制寄存器端口地址
;数据段
DATASEGMENT;DATA
INIT_NDW40H
AD_NDW0
N_LED_CODEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
FREQDW0001;频率表
TIMEDB01
KEY_BUFFDB0
DATAENDS
;STACK
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
;代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA;取数据段的段地址
MOVDS,AX
MOVDX,MY8255_MODE;初始化8255工作方式
MOVAL,81H;方式0,A口、B口输出,C口低4位输入,高4位输出
OUTDX,AL
KEY_BEGIN:
MOVAX,INIT_N
MOVAD_N,AX
CALLLED;数码管显示
SCAN_INIT:
CALLCCSCAN;扫描按键;如果有按键AL中不为0
JNZISKEY;有键按下则跳置ISKEY
JMPKEY_BEGIN;跳转到开始,再循环检测按键
ISKEY:
;CALLDELAY
MOVCH,0F7H
;MOVCL,00H;设置当前检测的是第几列
MOVAL,CH;选取一列,将X1~X4中一个置0
MOVDX,MY8255_A
OUTDX,AL
MOVDX,MY8255_C;读Y1~Y4,用于判断是哪一行按键闭合
INAL,DX
TESTAL,01H;是否为第1行
JZIS_UP;判断是否按了加键,是的话的跳转不是的话继续判断
TESTAL,02H;是否为第2行
JZIS_DOWN;判断是否按了减键,是的话的跳转不是的话继续判断
TESTAL,06H
JZSCAN_INIT
TESTAL,08H;是否为第4行
JZLOOP1;判断是否按了确定键,是的话的跳转不是的话继续判断
IS_UP:
CALLCLEAR;清空数码管
MOVAX,AD_N
ADDAX,01H
MOVINIT_N,AX
MOVAD_N,AX
CALLLED
JMPSCAN_INIT
IS_DOWN:
CALLCLEAR
MOVAX,AD_N
SUBAX,01H
MOVINIT_N,AX
MOVAD_NUM,AX
CALLLED
JMPSCAN_INIT
LOOP1:
MOVDX,AD0809;启动A/D转换
OUTDX,AL
MOVDX,AD0809;读出转换结果
INAL,DX
MOVAH,0H
;MOVBX,INIT_N
MOVAD_N,AX
;CALLLED
CALLCMP_M;确定安全范围
CALLLED;LED显示十进制
MOVAH,1;判断是否有按键按下
INT16H
JZLOOP1
;无按键则跳回继续循环,有则退出
QUIT:
MOVAX,4C00H;结束程序退出
INT21H
;报警子程序
;初始化8254
;安全范围比较子程序
;30度~100度之间为安全值
;8255的PC口高4位灯闪烁
;四灯全亮为安全值
CMP_M:
;ANDAX,00FFH
CMPAX,1EH
JGLEVEL30;大于30度
MOVBX,371
MOVFREQ,BX
MOVBL,4
MOVTIME,BL
CALLBAOJING;报警
MOVDX,MY8255_C
MOVAL,10H
OUTDX,AL
RET
LEVEL30:
MOVBX,INIT_N
CMPAX,BX
JGLEVEL_W;大于LEVEL_W度
PUSHAX
MOVDX,MY8255_C
MOVAL,30H
OUTDX,AL
POPAX
RET
LEVEL_W:
CMPAX,64H
JGLEVEL100
PUSHAX
MOVDX,MY8255_C
MOVAL,0C0H
OUTDX,AL
POPAX
RET
LEVEL100:
PUSHAX
MOVBX,1665
MOVFREQ,BX
MOVBL,4
MOVTIME,BL
CALLBAOJING;报警
MOVDX,MY8255_C
MOVAL,80H
OUTDX,AL
POPAX
RET
;LED显示
LEDPROCNEAR
MOVAL,0EH
MOVDX,MY8255_A;初始化A口指定显示管百位显示
OUTDX,AL
;MOVAX,INIT_N
MOVAX,INIT_N
MOVBL,64H
DIVBL
MOVBH,AH;保存余数
MOVSI,OFFSETN_LED_CODE
MOVAH,0H
ADDSI,AX
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;写B口输出百位
CALLDALLY1
MOVAL,0DH
MOVDX,MY8255_A
OUTDX,AL
MOVAL,BH;回复余数
MOVAH,0H
MOVBL,0AH
DIVBL
MOVBH,AH;保存余数
MOVSI,OFFSETN_LED_CODE
MOVAH,0H
ADDSI,AX;计算偏移量
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;写B口输出十位
CALLDALLY1
MOVAL,0BH
MOVDX,MY8255_A
OUTDX,AL
MOVSI,OFFSETNUM_LED_CODE
MOVAL,BH
MOVAH,0H
ADDSI,AX
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL;输出个位
CALLDALLY1
RET
LEDENDP
;延时子程序1
DELAYPROC
PUSHAX
PUSHCX
MOVCX,0ffFFH
D11:
MOVAX,0ffFH
D12:
DECAX
JNZD12
LOOPD11
POPCX
POPAX
RET
DELAYENDP
;延时子程序2
DALLY1PROCNEAR
PUSHAX
PUSHCX
MOVCX,0fffFH
D21:
MOVAX,0FFH
D22:
DECAX
JNZD22
LOOPD21
POPCX
POPAX
RET
DALLY1ENDP
;延时子程序3
DALLY2PROC
PUSHCX
MOVCX,00FFH
D31:
MOVAX,00FFH
D32:
DECAX
JNZD32
LOOPD31
POPCX
RET
DALLY2ENDP
;扬声器发声---------------------------------------------------------
BAOJINGPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;定时器0、方式3
OUTDX,AL
MOVDX,0FH
MO