开水房半自动供水接口设计Word下载.docx

上传人:b****3 文档编号:16457074 上传时间:2022-11-23 格式:DOCX 页数:12 大小:295.59KB
下载 相关 举报
开水房半自动供水接口设计Word下载.docx_第1页
第1页 / 共12页
开水房半自动供水接口设计Word下载.docx_第2页
第2页 / 共12页
开水房半自动供水接口设计Word下载.docx_第3页
第3页 / 共12页
开水房半自动供水接口设计Word下载.docx_第4页
第4页 / 共12页
开水房半自动供水接口设计Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

开水房半自动供水接口设计Word下载.docx

《开水房半自动供水接口设计Word下载.docx》由会员分享,可在线阅读,更多相关《开水房半自动供水接口设计Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

开水房半自动供水接口设计Word下载.docx

本实验主要以8255A芯片为主,8255A采用基本I/O方式即0方式,输出锁存,输入有三态缓冲能力,为了驱动虚拟抽水机(步进电机)加入了74LS373驱动,其中PA口控制抽水机(步进电机)向锅炉抽水,PB口控制试验仪上的作为警报的灯,为了实现装置的实时监控,特意安排了三个硬件开关SW1、SW2、SW3,分别作为启动锅炉后,加水的同时可以控制停止加水,加热的同时控制停止加热,输出开水的同时可以停止输出,采用软件延时。

3、2软件设计部分

本次设计基于VC++开发平台运行的主界面如图1-1所示:

图1-1

图中有1号锅炉和2号备用锅炉,由于实验设备有限只演示一号锅炉,其中“启动”按钮主要是用来控制供水装置的通电情况及接口芯片的初始化工作,然后依次完成对锅炉“加水”“加热”“输出开水”等功能的设置,一方面通过底层接口控制模拟抽水机、加热开关、输出开水开关、报警显示灯,另一方面通过MFC界面将计算机已经实现的功能直观的反应到视图界面上,实现开水房供水的实时监控。

具体功能及主要代码演示如下。

单击一号锅炉下的“启动”按钮初始化系统后,提示一号锅炉启动!

会自动的完成8255A的初始化功能,运行界面如图1-2:

图1-2

“启动”按钮实现代码如下:

voidCMyDlg:

:

OnButton1()

{

AfxMessageBox("

一号锅炉启动!

"

);

outportd(Port_io_Base+3,0x81);

//初始化8255A命令口

outportd(Port_io_Base+2,0x00);

//初始化8255A的PC口

}

若此时再按下“加水”按钮,会在硬件实验仪器上发现LED中第一号灯亮起,表示装置正在往锅炉加水,同时启动步进电机(抽水机),在试验仪上可以看到步进电机在转,如果锅炉的水位低于锅炉容积的%15,则发出警报声,而且灯也会一闪一闪提示锅炉水位低于安全水位;

当水位超过锅炉的容积的%95时,一号灯灭,提示水满,同时水满警报响起。

如果期间紧急想停止往锅炉加水,按SW1硬件开关,再点停止加水按钮,“水柱”将停止不动,同时关闭74LS373,即完成停止步进电机(抽水机)的操作。

如图1-3所示:

图1-3

“加水”按钮实现代码如下:

OnButton5()

outportd(Port_io_Base+3,0x09);

//置PC4=1关闭74LS373

outportd(Port_io_Base+3,0x08);

//置PC4=0,打开74LS373

do{

outportd(Port_io_Base,xu[i]);

//送相序代码到PA口,步进电机的转动代表抽水机向锅炉注水

i++;

if(i==8)i=0;

Sleep(50);

//延时

m_pro1.SetPos(m_pro1.GetPos()+5);

//可以设置加速加水,减速加水

if(inportd(Port_io_Base+2)&

0x01!

=0)//检查sw1是否按下

{

m_pro1.SetPos(m_pro1.GetPos()+50);

sw1=true;

break;

}

Sleep(50);

outportd(Port_io_Base+1,xu1[1]);

//二极管xu1[1]灯亮,表示正在加水

if(m_pro1.GetPos()<

150)

{

for(j=0;

j<

=5;

j++)//缺水报警

{

outportd(Port_io_Base+3,0x0d);

//令PC6=1,发高频音

Sleep

(1);

outportd(Port_io_Base+3,0x0c);

//令PC6=0,关闭SPK

outportd(Port_io_Base+1,xu1[1]);

//二极管xu1[1]灯一亮一灭,表示缺水(少于锅炉水容量%15)

Sleep

(1);

outportd(Port_io_Base+1,xu1[1]&

(0x0FD));

//二极管xu1[1]灯一亮一灭,表示缺水(少于锅炉水容量%15)

}

}while(m_pro1.GetPos()<

950);

//置PC4=1,关闭74LS373

if(sw1)

{}

else

//二极管xu1[1]灯灭,表示水满(多于或等于锅炉水容量%95),停止向锅炉注水

outportd(Port_io_Base+3,0x0c);

//关闭SPK

for(j=0;

j++)//水满报警

}

水满已经满了,请停止向锅炉注水!

}

当点击加热按钮时,锅炉加热启动,试验仪上LED显示第二号灯亮,当加热一定时间后,“温度计”上显示水温超过100摄氏度时,提示水已经烧开,可以用了,同时试验仪上二号灯灭。

当然如果加热的同时不想再继续加热了,则可以按下硬件开关SW2,再点击停止加热就可以了。

如图1-4所示:

图1-4

“加热”按钮实现代码如下:

OnButton7()

if(m_pro3.GetPos()>

100)

outportd(Port_io_Base+1,xu1[0]&

(0x0FE));

//二极管xu1[0]灯灭表示加热完成

AfxMessageBox("

锅炉水已经开了!

outportd(Port_io_Base+1,xu1[0]);

//二极管xu1[0]灯亮表示正在加热

outportd(Port_io_Base+3,0x0c);

//关闭SPK

Sleep(100);

//加速加热,减速加热

m_pro3.SetPos(m_pro3.GetPos()+1);

//if(GetKeyState(VK_CONTROL)<

0)//control建

0x02!

=0)//检查sw2是否按下

sw2=true;

j++)//水开报警

break;

}while

(1);

if(sw2)

{}

else

(0xFE));

outportd(Port_io_Base+3,0x0c);

//关闭SPK

}

若此时点击输出开水按钮,第三号灯亮,以看到锅炉水位下降,表示有人在打开水,开水输出完之后,弹出提示,同时使温度计归零,第三号灯灭,期间,如果需要强制关闭输出,可以按下硬件开关SW3,再按关闭输出按钮。

如图1-5示:

图1-5

“输出开水”按钮实现代码如下:

OnButton9()

outportd(Port_io_Base+1,xu1[2]);

//二极管xu1[2]灯亮输出开水

do{outportd(Port_io_Base,xu[i]);

m_pro1.SetPos(m_pro1.GetPos()-5);

//输出开水

if(GetKeyState(VK_MENU)<

0x04!

=0)//检查sw3是否按下

{sw3=true;

}while(m_pro1.GetPos()>

0);

if(sw3){}{}

outportd(Port_io_Base+1,xu1[2]&

(0x0FB));

//二极管xu1[2]灯灭,开水已经输完

//CMyDlg:

OnButton8();

//令PC6=1,发高频音

//令PC6=0,关闭SPK

开水已经输完!

m_pro3.SetPos(0);

若按下退出按钮,则系统退出。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1