本发明涉及饮水机领域,具体设计一种系统、饮水机。
技术背景
现有的饮水机以机身和水桶构成,水桶用塑料制成可取,机身上具有聪明座,聪明座里有一个顶管,桶盖上具有塞子,水桶道插在机身上的时候,机身的聪明座的顶管将桶盖上的塞子顶开,形成入水通道,没水后取下用完的水桶换新的装满水的水桶;这是设计和使用思路,该思路存在适应性问题,如果水桶的水尚未用完但是机身需要换地方的时候,由于水桶与机身之间为不是稳固的连接,且水桶中水的重量造成头重脚轻,所以一般需要取下水桶,然后搬运机身,以防水桶跌落,打坏水桶,溅湿其他设备或伤到人员;搬运前取下水桶时由于水桶的桶盖的塞子已经顶开,导致水桶脱离机身的聪明座的时候大量涌水,这些涌水会导致机身打湿,容易漏电危及人身安全,也可能打湿取桶的人的衣服,如果是夏天还勉强可以接受,冬天则会可能导致取桶的人感冒,并进一步恶化伤害取桶的人的健康;具有改进空间。
技术实现要素:
1、一种智能饮水机,具有桶座、电路、热水阀、冷水阀、帕尔贴即电子制冷片、冷水容器、热水容器;桶座包括本体与磁力体,本体为空心桶状;本体一端完全开放,本体另一端具有底,本体的底上具有出水孔,磁力体与本体固定相连,磁力体的磁力在本体的轴向方向上具有分量。桶座的电磁装置为螺旋线圈,螺旋线圈与桶座共轴;电路包括电源、控制单元、出热水按钮、出冷水按钮、调温开关、显示屏、温度传感器;电路的电源能够输出直流电为电路的控制单元、电路的显示屏、电路的温度传感器、热水阀、冷水阀、帕尔贴提供运转所需的电能;冷水容器与冷水阀相通;热水容器与热水阀相通;电路的控制单元与电路的出热水按钮相连,控制单元可以通过出热水按钮接收使用者发出的出热水指令;控制单元接收到使用者发出的出热水指令后,控制热水阀放出热水;帕尔贴的冷端为冷水容器制冷,帕尔贴的热端为热水容器制热;控制单元可以控制帕尔贴的输出功率;温度传感器与控制单元相连,控制单元能够通过温度传感器的能够采集热水容器中的水温;控制单元以采集到的热水容器中的水温数据作为帕尔贴功率控制依据;电路的控制单元与电路的出冷水按钮相连,控制单元可以通过出冷水按钮接收使用者发出的出冷水指令;控制单元接收到使用者发出的出冷水指令后,控制冷水阀放出冷水;电路的控制单元能够控制桶座的螺旋线圈的磁力大小或磁力有无,以便于调控入水。
1.1、基于发明内容1,进一步的:控制单元具有单片机。
1.2、基于发明内容1,进一步的:冷水阀为电磁水阀。
1.3、基于发明内容1,进一步的:还具有水深传感器,用于采集冷水容器、热水容器里水的深度。
1.4、基于发明内容1,进一步的:电路的控制单元帕尔贴的输出功率的方式是PWM占空比控制。
1.5、基于发明内容1,进一步的:还具有气压传感器,控制单元以气压传感器采集环境气压,控制单元以通过气压传感器采集到的气压数据作为计算沸点的依据,用来限定水温最高限度,当设定使用者设定的温度超过沸点时,控制单元依据沸点来控制温度。
1.6、基于发明内容1,进一步的:还具有LED提示模块,用来向使用者提供提示。
1.7、基于发明内容1,进一步的:还具有无线通讯模块,用于连接互联网;还具有GPS模块,用于采集饮水机的位置信息;当控制系统发现运行错误时,通过互联网向厂家发送故障信息和地理位置信息,方便厂家,上门维修,提高质量控制能力。
技术效果。
技术效果:本发明可以有效的解决水桶淌水和水桶难以重易重复利用的问题。
附图说明
图1为实施例的饮水机的控制系统原理图。
图2为实施例的饮水机的结构图。
图3位实施实力的水桶与桶座的结构示意图,其中图a为纵切面示意图,图b、c、d为a中的剖切面的剖面图。
图4、5为实施例的饮水机的电路图,为了使图示清晰,分成了两份。
限位环S13是限位体的一种;透水孔S111是为了让水流流畅,减少阀芯S11因为扰流而晃动;暂存容器S5即实施例所说的容器;实施例中第一磁力作用体S12为导磁体,第二磁力作用体S112为磁体,他们二者的属性可以互换,不影响技术效果。
图4、图5标号说明:气压传感器M1;第一号电阻R1;第二号电阻R2;第三号电阻R4;第四号电阻R7;第五号电阻R3;第六号电阻R5;第七号电阻R10;第八号电阻R6;第九号电阻R8;第一十号电阻R13;第一十一号电阻R14;第一十二号电阻R16;第一十三号电阻R9;第一十四号电阻R11;第一十五号电阻R12;第一十六号电阻R15;第一号电容C1;第二号电容C2;第三号电容C3;第四号电容C4;第五号电容C5;第六号电容C6;第七号电容C21;第一号集成电路U1;第二号集成电路U2;第三号集成电路U3;第四号集成电路U4;第一号三极管Q1;第二号三极管Q2;第三号三极管Q5;第四号三极管Q3;第一号二极管D1;第二号二极管D2;第三号二极管D5;第四号二极管D7;第五号二极管D10;第六号二极管D3;第七号二极管D6;第八号二极管D12;第九号二极管D4;第一十号二极管D8;第一十一号二极管D9;第一十二号二极管D21;第一十三号二极管D22;第一十四号二极管D23;第一十五号二极管D24;交流市电AC220;第一号开关SW1;第二号开关SW2;第三号开关SW3;第四号开关SW4;入水线圈L1;冷水阀之线圈L2;热水阀之线圈L3;液晶屏LCD1;蜂鸣器LS1;帕尔贴P1;蓝牙模块P2;GPS模块P3;第一号继电器RL1;第二号继电器RL2;第三号继电器RL3;排阻RP1;变压器TR21;第一号晶振X1。
具体实施方式
实施例1、一种饮水机,包括水桶、桶座;水桶包括桶盖、阀芯、桶口、;桶盖包括外圈和内圈,外圈为空心柱状,内圈为空心柱状,外圈的内直径大于内腔的外直径,外圈和内圈共轴,外圈的内侧的下端与和内圈外侧的下端固定相连,内圈具有第一磁力作用体S12、中间孔S13;第一磁力作用体S12用于中间孔S13的封闭或打开控制,中间孔S13用于进出水;第一磁力作用体S12为永磁体;阀芯包括浮体与第二磁力作用体S112;第二磁力作用体S112能够与被磁力所控制,浮体的密度小于水;阀芯没于水底时阀芯受到的浮力大于阀芯所受到的重力;第二磁力作用体S112为顺磁体;桶口的内腔空间中具有限位体,限位体不会封闭桶口内壁;水桶桶口的限位体用于配合桶座和阀芯S11,构成水桶的阀,阀芯S11控制的桶座的中间孔S13的联通状态,限位体可以防止阀芯跌落到通身内部或桶底,并防止阀芯S11的第二磁力作用体S112与桶盖的第一磁力作用体S12距离过远,以保证阀芯S11的第二磁力作用体S112与桶盖的第一磁力作用体S12之间的磁力作用能够被利用;阀芯S11作为水桶的桶口的出水控制,配合第一磁力作用体S12使用,阀芯S11在水桶的桶口内运动;阀芯S11与第二磁力作用体S112相互之间具有磁力作用,相互吸引,阀芯S11与第二磁力作用体S112之间的磁力大于阀芯S11的重力,阀芯S11所受磁力使阀芯倾向于封闭水流通道;阀芯S11没于水底时所阀芯S11受的浮力小于阀芯S11所受的重力与阀芯所受的磁力之和,阀芯S11没于水底时所,阀芯S11受的浮力用于抵抗阀芯所受的磁力和重力;水桶脱离饮水机独立存在时,如果水桶的桶口朝上则阀芯S11所受的磁力与阀芯所受的重力方向相反,由于阀芯S11与第二磁力作用体S112之间的磁力大于阀芯S11的重力,阀芯S11将水流通道封闭;二次利用时装水时需要可以使用工具比如漏洞尖头将阀芯捅开,从而装水;如果水桶安装在饮水机上桶口朝下时,阀芯S11在重力和磁力的作用下封闭水流通道,需要开放水流通道时,采用其他的磁力体来减小阀芯S11所受到的磁力,从而使阀芯S11受到的浮力将阀芯S11拉开,是水流通道开启;浮力F、重力G、磁力C;满足:F>G; C>G;F<C+G。桶座,包括本体与磁力体,本体为空心桶状;本体一端完全开放,本体另一端具有底,本体的底上具有出水孔S32,磁力体与本体固定相连,磁力体的磁力在本体的轴向方向上具有分量。所述的磁力体为螺旋线圈S31,如果是电磁体则通电后会产生磁力。阀芯S11控制的桶盖的中间孔S13的联通状态,桶盖的中间孔S13与桶座的出水孔S32相通,桶座的磁力体在本体的轴向方向上具有的分量的方向与阀芯S11和桶盖S1的第一磁力作用体S12之间的磁力在桶盖S1的轴向上的磁力分量的方向相反,可以削弱阀芯S11和桶盖S1的第一磁力作用体S12之间的磁力,从而使阀芯S11开放水流通道。容器,上端开口,下端具有水管,与所述的桶座配合使用,桶座的出水孔S32在桶座的底的外底面上的开口低于容器的上端开口的最低位置,当容器中的液体的液面低于桶座的出水孔S32在桶座的底的外底面上的开口时空气可以进入桶座的出水孔S32,从而方便出水;当容器中的液体的液面高于桶座的出水孔S32在桶座的底的外底面上的开口时,空气不能进入桶座的出水孔S32,由于大气压强的作用,桶座的出水孔S32不能出水。被安装在饮水机上。还包括电路;桶座的磁力体为螺旋线圈S31,螺旋线圈S31与桶座共轴、热水阀F11、冷水阀F12、帕尔贴即电子制冷片、冷水容器、热水容器;电路包括电源、控制单元、出热水按钮、出冷水按钮、调温开关、显示屏、温度传感器;电路的电源能够输出直流电为电路的控制单元、电路的显示屏、电路的温度传感器、热水阀F11、冷水阀F12、帕尔贴提供运转所需的电能;冷水容器与冷水阀F12相通;热水容器与热水阀F11相通;电路的控制单元与电路的出热水按钮相连,控制单元可以通过出热水按钮接收使用者发出的出热水指令;控制单元接收到使用者发出的出热水指令后,控制热水阀F11放出热水;帕尔贴的冷端为冷水容器制冷,帕尔贴的热端为热水容器制热;控制单元可以控制帕尔贴的输出功率;温度传感器与控制单元相连,控制单元能够通过温度传感器的能够采集热水容器中的水温;控制单元以采集到的热水容器中的水温数据作为帕尔贴功率控制依据;电路的控制单元与电路的出冷水按钮相连,控制单元可以通过出冷水按钮接收使用者发出的出冷水指令;控制单元接收到使用者发出的出冷水指令后,控制冷水阀F11放出冷水;电路的控制单元能够控制桶座的螺旋线圈S31的磁力大小或磁力有无,以便于调控入水。
实施例2、基于实施例1,进一步的:控制单元具有单片机。
实施例3、基于实施例1,进一步的:冷水阀F11为电磁水阀。
实施例4、基于实施例1,进一步的:还具有水深传感器,用于采集冷水容器、热水容器里水的深度。
实施例5、基于实施例1,进一步的:电路的控制单元帕尔贴的输出功率的方式是PWM占空比控制。
实施例6、基于实施例1,进一步的:还具有气压传感器,控制单元以气压传感器采集环境气压,控制单元以通过气压传感器采集到的气压数据作为计算沸点的依据,用来限定水温最高限度,当设定使用者设定的温度超过沸点时,控制单元依据沸点来控制温度。
实施例7、基于实施例1,进一步的:还具有LED提示模块,用来向使用者提供提示。
实施例8、基于实施例1,进一步的:还具有无线通讯模块,用于连接互联网;还具有GPS模块,用于采集饮水机的位置信息;当控制系统发现运行错误时,通过互联网向厂家发送故障信息和地理位置信息,方便厂家,上门维修,提高质量控制能力。
实施实力9、如图2、3、5,为了将本发明落实到具体产品,本实施实力公开了全部项目的绝大多数细节,包涵电路、电路连接关系、单片机代码,如下,如图5电路包括气压传感器、第一号电阻、第二号电阻、第三号电阻、第四号电阻、第五号电阻、第六号电阻、第七号电阻、第八号电阻、第九号电阻、第一十号电阻、第一十一号电阻、第一十二号电阻、第一十三号电阻、第一十四号电阻、第一十五号电阻、第一十六号电阻、第一号电容、第二号电容、第三号电容、第四号电容、第五号电容、第六号电容、第七号电容、第一号集成电路、第二号集成电路、第三号集成电路、第四号集成电路、第一号三极管、第二号三极管、第三号三极管、第四号三极管、第一号二极管、第二号二极管、第三号二极管、第四号二极管、第五号二极管、第六号二极管、第七号二极管、第八号二极管、第九号二极管、第一十号二极管、第一十一号二极管、第一十二号二极管、第一十三号二极管、第一十四号二极管、第一十五号二极管、交流市电、第一号开关、第二号开关、第三号开关、第四号开关、入水线圈、冷水阀之线圈、热水阀之线圈、液晶屏、蜂鸣器、帕尔贴、蓝牙模块、GPS模块、第一号继电器、第二号继电器、第三号继电器、排阻、变压器、第一号晶振;第一号集成电路的型号为AT89C51,第二号集成电路的型号为ADC0832,第三号集成电路的型号为DS18B20,第四号集成电路的型号为7805;第二号电容的第一脚与第一号集成电路的第一十八脚相连,第一号晶振的第一脚与第一号集成电路的第一十八脚相连,第一号电容的第二脚与第一号集成电路的第一十九脚相连,第一号晶振的第二脚与第一号集成电路的第一十九脚相连,第一号电阻的第二脚与第一号集成电路的第九脚相连,第三号电容的负极与第一号集成电路的第九脚相连,排阻的第五脚与第一号集成电路的第三十六脚相连,排阻的第六脚与第一号集成电路的第三十五脚相连,第一号开关的第二脚与第一号集成电路的第四脚相连,第二号开关的第二脚与第一号集成电路的第五脚相连,第三号开关的常开端与第一号集成电路的第六脚相连,第四号开关的常开端与第一号集成电路的第七脚相连,气压传感器的第一脚与第二号集成电路的第三脚相连,第一号三极管的第二脚与第六号电阻的第二脚相连,第五号二极管的负极与第一号三极管的第三脚相连,第三号继电器的线圈的第一端与第一号三极管的第三脚相连,第九号电阻的第一脚与第一号三极管的第一脚相连,第三号继电器的COM端与第四号电阻的第一脚相连,第三号继电器的常开端与入水线圈的第二脚相连,第六号二极管的正极与入水线圈的第二脚相连,第二号三极管的第二脚与第五号电阻的第二脚相连,第三号二极管的负极与第二号三极管的第三脚相连,第一号继电器的线圈的第一端与第二号三极管的第三脚相连,第一十一号电阻的第一脚与第二号三极管的第一脚相连,第一十三号电阻的第二脚与第九号二极管的正极相连,第一十五号电阻的第二脚与第一十号二极管的正极相连,第一十四号电阻的第二脚与第一十一号二极管的正极相连,变压器的P1脚与交流市电的第一脚相连,变压器的P2脚与交流市电的第二脚相连,第一十五号二极管的正极与变压器的S2脚相连,第一十三号二极管的负极与变压器的S2脚相连,第一十四号二极管的正极与变压器的S1脚相连,第一十二号二极管的负极与变压器的S1脚相连,第一十四号二极管的负极与第七号电容的正极相连,第一十五号二极管的负极与第七号电容的正极相连,第一号二极管的正极与第七号电容的正极相连,第四号电容的正极与第七号电容的正极相连,第四号集成电路的第一脚与第七号电容的正极相连,第二号二极管的正极与第四号集成电路的第三脚相连,第六号电容的正极与第四号集成电路的第三脚相连,第一号继电器的常开端与冷水阀之线圈的第二脚相连,第七号二极管的正极与冷水阀之线圈的第二脚相连,第三号三极管的第二脚与第七号电阻的第二脚相连,第四号二极管的负极与第三号三极管的第三脚相连,第二号继电器的线圈的第一端与第三号三极管的第三脚相连,第一十二号电阻的第一脚与第三号三极管的第一脚相连,第二号继电器的常开端与热水阀之线圈的第二脚相连,第八号二极管的正极与热水阀之线圈的第二脚相连,第四号三极管的第二脚与帕尔贴的第二脚相连,第一十六号电阻的第一脚与帕尔贴的第二脚相连,第一号继电器的COM端与第二号电阻的第一脚相连,第二号继电器的COM端与第三号电阻的第一脚相连,第一十号电阻的第二脚与第二号继电器的线圈的第二端相连,第一号集成电路的第一脚与电气节点CS相连,第二号集成电路的第一脚与电气节点CS相连,第一号集成电路的第二脚与电气节点CLK相连,第二号集成电路的第七脚与电气节点CLK相连,第一号集成电路的第三脚与电气节点DOUT相连,第二号集成电路的第五脚与电气节点DOUT相连,第二号集成电路的第六脚与电气节点DOUT相连,电气节点DIN与电气节点DOUT相连,第一号集成电路的第一十七脚与电气节点COIL相连,第六号电阻的第一脚与电气节点COIL相连,第一号集成电路的第一十二脚与电气节点OPEN_L相连,第五号电阻的第一脚与电气节点OPEN_L相连,排阻的第四脚与电气节点SKEAP相连,第一号集成电路的第三十七脚与电气节点SKEAP相连,蜂鸣器的第一脚与电气节点SKEAP相连,第一号集成电路的第二十八脚与第四号二极管的第四脚相连,液晶屏的第一十四脚与第四号二极管的第四脚相连,第一号集成电路的第二十七脚与第七号二极管的第二十八脚相连,液晶屏的第一十三脚与第七号二极管的第二十八脚相连,第一号集成电路的第二十六脚与第三号二极管的第二十七脚相连,液晶屏的第一十二脚与第三号二极管的第二十七脚相连,第一号集成电路的第二十五脚与第九号二极管的第二十六脚相连,液晶屏的第一十一脚与第九号二极管的第二十六脚相连,第一号集成电路的第二十四脚与第六号二极管的第二十五脚相连,液晶屏的第一十脚与第六号二极管的第二十五脚相连,第一号集成电路的第二十三脚与第二号二极管的第二十四脚相连,液晶屏的第九脚与第二号二极管的第二十四脚相连,第一号集成电路的第二十二脚与第一号二极管的第二十三脚相连,液晶屏的第八脚与第一号二极管的第二十三脚相连,第一号集成电路的第二十一脚与电气节点D0相连,液晶屏的第七脚与电气节点D0相连,第一号集成电路的第一十五脚与电气节点E相连,液晶屏的第六脚与电气节点E相连,第一号集成电路的第一十四脚与电气节点RW相连,液晶屏的第五脚与电气节点RW相连,第一号集成电路的第一十三脚与电气节点RS相连,液晶屏的第四脚与电气节点RS相连,排阻的第三脚与电气节点DQ相连,第一号集成电路的第三十八脚与电气节点DQ相连,第八号电阻的第二脚与电气节点DQ相连,第三号集成电路的第二脚与电气节点DQ相连,排阻的第七脚与电气节点LD1相连,第一号集成电路的第三十四脚与电气节点LD1相连,第一十三号电阻的第一脚与电气节点LD1相连,排阻的第八脚与电气节点LD2相连,第一号集成电路的第三十三脚与电气节点LD2相连,第一十四号电阻的第一脚与电气节点LD2相连,排阻的第九脚与电气节点LD3相连,第一号集成电路的第三十二脚与电气节点LD3相连,第一十五号电阻的第一脚与电气节点LD3相连,第一号集成电路的第一十脚与电气节点P_RXD相连,蓝牙模块的第二脚与电气节点P_RXD相连,第一号集成电路的第一十一脚与电气节点P_TXD相连,蓝牙模块的第三脚与电气节点P_TXD相连,排阻的第二脚与电气节点GPS_DATA相连,第一号集成电路的第三十九脚与电气节点GPS_DATA相连,GPS模块的第二脚与电气节点GPS_DATA相连,第一号集成电路的第一十六脚与电气节点OPEN_H相连,第七号电阻的第一脚与电气节点OPEN_H相连,第一号集成电路的第八脚与电气节点PEL相连,第四号三极管的第一脚与电气节点PEL相连,气压传感器的第三脚与电气节点+5相连,蓝牙模块的第一脚与电气节点+5V相连,第六号二极管的负极与电气节点+12V相连,入水线圈的第一脚与电气节点+12V相连,第七号二极管的负极与电气节点+12V相连,冷水阀之线圈的第一脚与电气节点+12V相连,第八号二极管的负极与电气节点+12V相连,热水阀之线圈的第一脚与电气节点+12V相连,第五号电容的正极与电气节点+12V相连,第一十六号电阻的第二脚与电气节点+12V相连,帕尔贴的第一脚与电气节点+12V相连,第一号二极管的负极与电气节点+12V相连,第一号集成电路的第二十脚与电气节点GND相连,第一号电阻的第一脚与电气节点GND相连,第二号电容的第二脚与电气节点GND相连,第一号电容的第一脚与电气节点GND相连,第三号开关的COM脚与电气节点GND相连,第四号开关的COM脚与电气节点GND相连,第二号开关的第一脚与电气节点GND相连,第一号开关的第一脚与电气节点GND相连,第二号集成电路的第四脚与电气节点GND相连,第三号继电器的线圈的第二端与电气节点GND相连,第五号二极管的正极与电气节点GND相连,第四号电阻的第二脚与电气节点GND相连,气压传感器的第二脚与电气节点GND相连,蜂鸣器的第二脚与电气节点GND相连,第一十号二极管的负极与电气节点GND相连,第一十一号二极管的负极与电气节点GND相连,第九号二极管的负极与电气节点GND相连,第三号集成电路的第一脚与电气节点GND相连,第一十三号二极管的正极与电气节点GND相连,第一十二号二极管的正极与电气节点GND相连,第四号电容的负极与电气节点GND相连,第四号集成电路的第二脚与电气节点GND相连,第六号电容的负极与电气节点GND相连,第七号电容的负极与电气节点GND相连,蓝牙模块的第四脚与电气节点GND相连,GPS模块的第三脚与电气节点GND相连,第四号三极管的第三脚与电气节点GND相连,第三号二极管的正极与电气节点GND相连,第一号继电器的线圈的第二端与电气节点GND相连,第二号电阻的第二脚与电气节点GND相连,第一十号电阻的第一脚与电气节点GND相连,第四号二极管的正极与电气节点GND相连,第三号电阻的第二脚与电气节点GND相连,第五号电容的负极与电气节点GND相连,第三号电容的正极与电气节点VCC相连,第一号集成电路的第三十一脚与电气节点VCC相连,第一号集成电路的第四十脚与电气节点VCC相连,第二号集成电路的第八脚与电气节点VCC相连,第一十一号电阻的第二脚与电气节点VCC相连,排阻的第一脚与电气节点VCC相连,第八号电阻的第一脚与电气节点VCC相连,第三号集成电路的第三脚与电气节点VCC相连,第二号二极管的负极与电气节点VCC相连,GPS模块的第一脚与电气节点VCC相连,第一十二号电阻的第二脚与电气节点VCC相连,第九号电阻的第二脚与电气节点VCC相连,电气节点VCC/VDD与电气节点VCC相连。
并在单片机烧录如下程序。
#include <reg52.h>
#include "LCD1602.h"
#include "ADC0832.h"
//系统允许标志
bit start_flag=1;
bit flag1s=1;//1秒标志
//蜂鸣器报警
sbit BUZZ=P0^2;
//led显示工作状态
sbit led1=P0^5;//电源指示灯
sbit led3=P0^6;//加热指示灯
sbit led4=P0^7;//温度到达设定温度
//水位温度设定可调
sbit t_up=P1^3;
sbit t_down=P1^4;
//其他按钮
sbit water_out_hot=P1^5;//出热水按钮
sbit water_out_cold=P1^6;//出冷水按钮
sbit open_water_cold=P3^2;//冷水阀开关
sbit open_water_hot=P3^6;//热水阀开关
//电磁线圈
sbit coil=P3^7;
//pwm输出口
sbit PWMOUT=P1^7;
sbit pwmadd=P0^3;
sbit pwmdec=P0^4;
int pwm_set=80;
int pwm_set_before=80;
bit dc_0_flag=0;
//温度
float temprature_set=80;//温度设定值
float temprature_now;//温度当前值
//沸点
int boiling_point;
//标志位
int stop_heat=0;//停止加热标志
//lcd预显示
unsigned char code tab1[] = "air:";
unsigned char code tab2[] = "Pot:";
unsigned char code tab3[] = "Tmp:";
unsigned char code tab4[] = "set:";
//普通定时器配置
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
void ConfigTimer0unsigned int ms;
//PWM配置
unsigned char HighRH = 0;
unsigned char HighRL = 0;
unsigned char LowRH = 0;
unsigned char LowRL = 0;
void ConfigPWMunsigned int fr, unsigned char dc;
void start_picture;
void all_controll;
void show_adc0832float *level_now;
void show_tempturefloat *temp_now;
void show_pressureint *boiling_point_now;
bit CmpMemoryunsigned char *ptr1, unsigned char *ptr2, unsigned char len;
float absfloat a;
extern bit Start18B20;
extern bit Get18B20Tempint *temp;
extern void config_uart;
void main
{
EA = 1; //开总中断
ConfigPWM100,80; //配置T0定时1ms
config_uart;
Start18B20; //启动DS18B20
init1602;
while1
{
ifstart_flag==1
{
start_picture;
ifflag1s //每秒读一次温度,避免经常打断中断
{
flag1s=0;
show_pressure&boiling_point;
show_tempture&temprature_now;
}
all_controll;
}
else
{
write1602_com0x01; //清屏
led1=0;led3=0;led4=0;
}
}
}
//开机界面
void start_picture
{
unsigned char i;
//液晶初始化显示
LcdSetCursor0,0;
fori = 0; tab1[i]; ++i
write1602_dattab1[i];
LcdSetCursor9,0;
fori = 0; tab2[i]; ++i
write1602_dattab2[i];
LcdSetCursor0,1;
fori = 0; tab3[i]; ++i
write1602_dattab3[i];
LcdSetCursor9,1;
fori = 0; tab4[i]; ++i
write1602_dattab4[i];
led1=1;//电源指示灯,正常工作
}
//总控制
void all_controll
{
static bit t_up_before,t_down_before;
static bit pwmadd_before,pwmdec_before;
//温度设定
ift_up==0
{
ift_up_before==1
{temprature_set+=1;}
t_up_before=t_up;
}
else
{
t_up_before=t_up;
}
ift_down==0
{
ift_down_before==1
{temprature_set-=1;}
t_down_before=t_down;
}
else
{
t_down_before=t_down;
}
iftemprature_set+2>boiling_point
{temprature_set=boiling_point-2;}
iftemprature_set<=1
{temprature_set=1;}
ifwater_out_cold==0||water_out_hot==0//出水 //停止加热 0%
{
ifwater_out_cold==0&&water_out_hot==1
{open_water_cold=0;open_water_hot=1;}
else ifwater_out_cold==1&&water_out_hot==0
{open_water_cold=1;open_water_hot=0;}
else
{open_water_cold=0;open_water_hot=0;}
coil=0;//启动线圈
stop_heat=1;
led3=0;//不加热
led4=0;//不保温
}
else
{
open_water_hot=1;//关闭水阀
open_water_cold=1;//关闭水阀
coil=1;//关闭线圈
//温度控制
iftemprature_now<temprature_set
{
iftemprature_now+2<boiling_point//加热 80%
{
stop_heat=0;
led3=1;//加热
led4=0;//不保温
BUZZ=0;//不报警
}
else//停止加热 0%
{
stop_heat=1;
led3=0;//不加热
led4=0;//不保温
BUZZ=1;//报警
}
}
else
{
iftemprature_now>=temprature_set+1//停止加热 0%
{
led3=0;//不加热
led4=0;//不保温
stop_heat=1;
BUZZ=1;//报警
}
else//保温 20%
{
led3=0;//不加热
led4=1;//保温
stop_heat=-1;
BUZZ=0;//不报警
}
}
}
//pwm设定
ifstop_heat==0{pwm_set=80;}
else ifstop_heat==-1{pwm_set=20;}
else ifstop_heat==1{pwm_set=0;}
ifpwm_set!=pwm_set_before{ConfigPWM100,pwm_set;}
pwm_set_before=pwm_set;
}
//18B20显示温度
void show_tempturefloat *temp_now
{
bit res;
int temp; //读取到的当前温度值
int intT, decT; //温度值的整数和小数部分
unsigned char len;
unsigned char str[12];
res = Get18B20Temp&temp; //读取当前温度
if res //读取成功时,刷新当前温度显示
{
intT = temp >> 4; //分离出温度值整数部分
decT = temp & 0xF; //分离出温度值小数部分
ifintT+2>=boiling_point //沸点限制
{intT=boiling_point-2;decT=0;}
len = IntToStringstr, intT; //整数部分转换为字符串
str[len++] = '.'; //添加小数点
decT = decT*10 / 16; //二进制的小数部分转换为1位十进制位
str[len++] = decT + '0'; //十进制小数位再转换为ASCII字符
str[len] = '\0'; //添加字符串结束符
LcdShowStr4, 1, str; //显示到液晶屏上
//得到当前温度
*temp_now=intT+floatdecT/10;
}
else
{
LcdShowStr4, 1, "ero!";
}
//设定温度显示
LcdSetCursor13,1;
write1602_dat'0'+inttemprature_set/100;
write1602_dat'0'+inttemprature_set/10%10;
write1602_dat'0'+inttemprature_set%10;
Start18B20; //重新启动下一次转换
}
//dac0832显示气压
/*
气压传感器范围0-260
单片机读数值范围0.27-4.86
设100为正常大气压,即一个大气压,记为F0
气压与单片机读数关系F0=x-0.27*57;
计算沸点公式
*/
void show_pressureint *boiling_point_now
{
int v,f,t;
v = 5.0 * read0832 / 256 * 100;
f = v-27*55/100;//单片机读数转换为气压
LcdSetCursor4,0;
write1602_dat'0' + f/100 ;
write1602_dat'0' + f/10%10 ;
write1602_dat'0' + f%10 ;
iff<60{t=82;}
else iff>=60&&f<70{t=86;}
else iff>=70&&f<80{t=90;}
else iff>=80&&f<90{t=93;}
else iff>=90&&f<100{t=97;}
else iff>=100&&f<110{t=100;}
else iff>=110&&f<120{t=103;}
else iff>=120&&f<130{t=105;}
else iff>=130&&f<140{t=107;}
else iff>=140&&f<150{t=109;}
else iff>=150&&f<160{t=111;}
else iff>=160&&f<170{t=113;}
else iff>=170&&f<180{t=115;}
else iff>=180&&f<190{t=117;}
else iff>=190&&f<200{t=119;}
else{t=121;}
ift>100{ t=100;}
*boiling_point_now=t;
LcdSetCursor13,0;
write1602_dat'0' + t/100 ;
write1602_dat'0' + t/10%10 ;
write1602_dat'0' + t%10 ;
}
float absfloat a
{
ifa<0
{a=-a;}
return a;
}
/* 内存比较函数,比较两个指针所指向的内存数据是否相同,
ptr1-待比较指针1,ptr2-待比较指针2,len-待比较长度
返回值-两段内存数据完全相同时返回1,不同返回0 */
bit CmpMemoryunsigned char *ptr1, unsigned char *ptr2, unsigned char len
{
while len--
{
if *ptr1++ != *ptr2++ //遇到不相等数据时即刻返回0
{
return 0;
}
}
return 1; //比较完全部长度数据都相等则返回1
}
/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0unsigned int ms
{
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = tmp * ms / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 32; //补偿中断响应延时造成的误差
T0RH = unsigned chartmp>>8; //定时器重载值拆分为高低字节
T0RL = unsigned chartmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0为模式1
TH0 = T0RH; //加载T0重载值
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
void ConfigPWMunsigned int fr, unsigned char dc
{
unsigned long tmp;
unsigned int high, low;
ifdc==0{dc=50;dc_0_flag=1;}
else{dc_0_flag=0;}
tmp = 11059200/12/fr;
high = tmp*dc/100;
low = tmp - high;
high = 65536 - high;
low = 65536 - low;
HighRH = unsigned charhigh >>8;
HighRL = unsigned charhigh;
LowRH = unsigned charlow >> 8;
LowRL = unsigned charlow;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = HighRH;
TL0 = HighRL;
ET0 = 1;
TR0 = 1;
ifdc_0_flag==1{PWMOUT = 0;}
else{PWMOUT = 1;}
}
void InterruptTimer0 interrupt 1
{
static int s_cnt;
s_cnt++;
ifs_cnt>100{flag1s=1;s_cnt=0;} //定时1秒
ifdc_0_flag==0
{
if PWMOUT == 1 //当前输出为高电平时,装载低电平值并输出低电平
{
TH0 = LowRH;
TL0 = LowRL;
PWMOUT = 0;
}
else //当前输出为低电平时,装载高电平值并输出高电平
{
TH0 = HighRH;
TL0 = HighRL;
PWMOUT = 1;
}
}
else //关断pwm,但是不关闭计时器
{
TH0 = LowRH;
TL0 = LowRL;
PWMOUT = 0;
}
}
void Serial_INT interrupt 4
{
ifRI
{
RI = 0;
switchSBUF
{
case 'A':temprature_set++;break;
case 'B':temprature_set--;break;
case 'S':start_flag=~start_flag;break;
default:break;
}
}
iftemprature_set+2>boiling_point
{temprature_set=boiling_point-2;}
iftemprature_set<=1
{temprature_set=1;}
/*
if TI //字节发送完毕
{
TI = 0; //清零发送中断标志位
//flagTxd = 1; //设置字节发送完成标志
}
*/
}