数码之家

 找回密码
 立即注册
搜索
查看: 3515|回复: 19

[C51] 两次同样的失误三个开关量的控制用了三片单片机(C代码分享)

[复制链接]
发表于 2020-6-13 18:56:32 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2020-6-14 09:26 编辑

阅读提示:
1.本文只是描述了一次备受挫折的DIY过程,并无经验分享与技术探讨,如果看者时间不闲或不感兴趣请无视、绕行!
2.文章内容为通过文字再现了大部分场景,比较细碎、可作为“骗M”文字阅读,如在意者请无视、绕行。
常来本坛的朋友都知道我喜欢玩单片机,其实我更喜欢焊板子的过程,因为以前就是经常搭模拟、数字电路玩控制而后升级到单片机控制的,最近准备跟风攒一个RO膜净水机,发现了可以玩单片机的机会,在等待各种配件到来的时候开始做水机的控制板,其实这东西真的没必要自己动手的!!宝上9.9送到家的东西即方便又漂亮没得说,但是即然有了动手的冲动就没理由不玩了,说干就干,查点元件找到了一片STC15W204S单片机,8脚贴片引脚数量足够用(本次制作仅仅用3个I/O引脚),洞洞板总是充足的,很快就焊好了,一个引脚对电源上拉一个10K电阻做高压开关状态的判断引脚,另外两个引脚各控制一个继电器模块,接下来编程调试,这个用了两天,找外壳、引出接线这些用了一天,(每天零星动手、座久了眼花腰疼)就在联机测试的时候,一不小心开关判断线与24V电源线轻轻的碰了一下,并没有听到啪的声响,一片单片机STC15W204S就此夭折了。
又是一个工作日的上午,不太炎热的阳光铺撒在工作台上明亮而和煦,心情大好,首先做了心理建设:“焊东西短路、爆件任谁都是难免的,从头来过罢了”。在找元件已经没有8脚芯片了,只好用一片16脚的了,当然了还是STC,因为我只玩STC呀,STC15W408AS,3/4的引脚闲置95%的功能闲置真的挺可惜的,本着只要有用不吃灰就不算浪费的原则继续焊板子,因为有了上次的样板,这一次只用了半天时间就搞定了,下午休息无话----,转过天来胸有成竹的下载了代码再次全员上电测试,其实“全员”也只包含一个水泵、一个电磁阀,开关需要水压力驱动,不接水里测试就只能是手拿着开关线头和地线碰触的办法了,吸取了上次的教训,这次的操作可谓小心再小心了,测试没发现问题,该通的通该断的断都正常,测试结束收摊的时候,还是那根倒霉的开关线和那根24V电源线,还是轻轻的碰了一下,原因是原本以为24V电源已经拔掉了-----但是拔掉的是电烙铁插头,又一片单片机STC15W408AS就此报废。
这次我开始怀疑人生了,同样的乌龙出现两次真的毫无道理,难到在看不见的地方有一只顽皮的手吗?细思极恐!那一瞬间感觉无地自容,那一瞬间感觉悲从中来,那一瞬间---------。
说到这里需要澄清一个问题,单片机控制系统做测试的时候,只要端口电平根据程序能做相应变化就算完成了,为什么总要牵扯着24V电源呀,原因很简单,因为此前的设计都是由24V降压到5V给单片机用,所以通电测试是绕不开24V电源的。
经过同样的两次乌龙,第三次焊板子的时候手里的单片机除了40脚的以外就只有一片20脚的STC12C4025AD算是小的了,就只能用它了,这次弄好了通电之前首先给24V电源上了一个笼头——接线排,这次如果不是特意去碰就真的不会碰到了,另外板子上用了一个IC插座免得再**,到这里一个简单到不能在简单的控制装置才算是完成了,此后测试一切正常,但经过十几分钟的通电后发现,24V串联电阻经7805变成5V的电路发热较高,电阻、稳压芯片都有热量,最终换用9V电源适配器解决了,如此一来这个控制器就又多了一个外接电源、实用价值也就越发的低了,但从动手到现在的烦躁与欢喜却也充实了这几天日常的时光,满足了DIY的兴趣;制作完成了琢磨着单片机也该添些了,这次备足些,8脚单片机、16脚单片机都要弄他10个可以多**几次了。
丑媳妇出来见见公婆,蹩脚的制作见下图:


未经过实际应用检验的代码如下:
  1. /************************************
  2. 净水器水泵及18S延时冲洗控制程序
  3. 编写:wannenggong
  4. 芯片:STC12C4052AD
  5. 时间:2020-06-03
  6. *************************************/
  7. #include <STC12C2052AD.h>
  8. //--------------------------------------------------------
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. //--------------------------------------------------------
  12. sbit GK=P1^4;        //高压开关
  13. //水龙头打开时开关闭合端口接地----输入低电平
  14. //水龙头关闭后开关断开端口经10K电阻接Vcc----输入高电平
  15. sbit DF=P1^5;        //废水电磁阀驱动
  16. sbit JF=P1^6;        //水泵继电器驱动
  17. //--------------------------------------------------------
  18. bit ft;                //定时器计时到达标志
  19. uchar flag;
  20. uint t0=0;        //定时器中断计数变量
  21. //====I/O口、计数变量、标志状态初始化函数=================
  22. void IO_init()
  23. {
  24.     GK=1;
  25.     DF=1;        //关闭电磁阀
  26.     JF=1;        //关闭水泵
  27.     TR0=0;
  28.     t0=0;
  29.         ft=0;
  30.     flag=0;
  31. }
  32. //====定时器T0初始化函数==================================                                 
  33. void T0_Init(void)
  34. {
  35.     TMOD = 0x01;;        //设置定时器模式
  36.     TL0 = 0xB0;                //设置定时初值,外部晶振12MHz&50ms
  37.     TH0 = 0x3C;                //设置定时初值
  38.     TF0 = 0;                //清除TF0标志
  39.     ET0=1;
  40.     EA=1;
  41. }
  42. //====定时器TO中断函数====================================
  43. void clock_T0(void) interrupt 1
  44. {
  45.     TL0 = 0xB0;               
  46.     TH0 = 0x3C;               
  47.     t0++;
  48.     if(t0==360)                //18s延时
  49.     {
  50.         t0=0;
  51.         ft=1;
  52.     }
  53. }
  54. //====冲洗电磁阀驱动函数==================================
  55. void DF_control()
  56. {
  57.     if(flag==1)        //执行延时18s操作
  58.     {
  59.         TR0=1;
  60.         flag=0;
  61.         DF=0;
  62.         if(ft)
  63.         {
  64.             ft=0;
  65.             TR0=0;
  66.             IO_init();
  67.         }
  68.     }
  69.     if(flag==2)        //变量恢复初始状态
  70.     {
  71.         ft=0;
  72.         TR0=0;
  73.         t0=0;
  74.         flag=0;
  75.         DF=1;
  76.     }
  77. }
  78. //====主函数=============================================
  79. main()
  80. {
  81.     T0_Init();
  82.     IO_init();
  83.    
  84.     while(1)
  85.     {
  86.         if((GK==1)&&(JF==1))
  87.             IO_init();
  88.         if(GK==0)
  89.             JF=0;
  90.         if((GK==1)&&(JF==0))
  91.             flag=1;
  92.         if((GK==0)&&(JF==0))
  93.             flag=2;
  94.         DF_control();

  95.     }
  96. }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 5家元 +100 收起 理由
jf201006 + 20 謝謝分享
玛德陛下 + 20 謝謝分享
aqxgm + 20
锰子 + 20 謝謝分享
人艰不拆了 + 20

查看全部打赏

发表于 2020-6-13 19:58:38 | 显示全部楼层
我就服会编码的  膜拜
回复 支持 反对

使用道具 举报

发表于 2020-6-13 21:06:49 | 显示全部楼层
只是判断几个引脚的高低电平,程序当然简单
回复 支持 反对

使用道具 举报

发表于 2020-6-13 21:53:09 | 显示全部楼层
diy吗,总是会遇到各种各样的坑,最后发现费时、费力又费钱,好歹做出来的成品还丑的一逼
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 09:34:16 | 显示全部楼层
aqxgm 发表于 2020-6-13 21:53
diy吗,总是会遇到各种各样的坑,最后发现费时、费力又费钱,好歹做出来的成品还丑的一逼 ...

或许这就是玩DIY的成本吧,虽然做东西难免坏件的但连续两次同样的原因坏件也是平生首次,囧呀。
回复 支持 反对

使用道具 举报

发表于 2020-6-16 01:01:25 | 显示全部楼层
aqxgm 发表于 2020-6-13 21:53
diy吗,总是会遇到各种各样的坑,最后发现费时、费力又费钱,好歹做出来的成品还丑的一逼 ...

关键成品总有一些设计不合人意
回复 支持 反对

使用道具 举报

发表于 2020-6-16 08:16:26 | 显示全部楼层
旧的不去,新的不来:lol:
端口可以串个几K电阻吗
回复 支持 反对

使用道具 举报

发表于 2020-6-16 12:24:15 | 显示全部楼层
40560335 发表于 2020-6-16 01:01
关键成品总有一些设计不合人意

有耐心的话再来过
回复 支持 反对

使用道具 举报

发表于 2020-6-16 20:04:31 | 显示全部楼层
单片机应用到生活中,
回复 支持 反对

使用道具 举报

发表于 2020-6-24 08:48:23 | 显示全部楼层
这就是现实中的墨菲定律吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 18:47:29 | 显示全部楼层
本帖最后由 慕名而来 于 2020-6-24 18:49 编辑

有用到本帖代码的坛友请注意!本帖分享的控制方案在实际应用时发现了一个问题,原设计24V电源与5V电源是共地的,结果出现了控制紊乱的现象,后来拆除了共地的连线后控制正常、稳定了,其实本系统中真的没必要共地连接,因为是5V继电器控制24V通断,单片机只控制继电器就可以了。
回复 支持 反对

使用道具 举报

发表于 2020-6-26 20:54:48 | 显示全部楼层
我从来都是24V和5V两路电。用两组输出的,不共地的开关电源。
回复 支持 反对

使用道具 举报

发表于 2020-9-29 16:48:33 | 显示全部楼层
慕名而来 发表于 2020-6-24 18:47
有用到本帖代码的坛友请注意!本帖分享的控制方案在实际应用时发现了一个问题,原设计24V电源与5V电源是共 ...

没有通信可以不共地,如果有串口之类的除非你隔离,否则你不共地全乱码
回复 支持 反对

使用道具 举报

发表于 2020-9-30 08:01:11 | 显示全部楼层
7805需要大点的输入输出滤波,电阻可以不用
回复 支持 反对

使用道具 举报

发表于 2020-9-30 08:51:14 | 显示全部楼层
两个继电器电流合起来有150mA+了,对于这个电流,7805压降19V,发热很正常,你可以选择2596降压模块
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-30 11:08:38 | 显示全部楼层
ezj2008 发表于 2020-9-30 08:51
两个继电器电流合起来有150mA+了,对于这个电流,7805压降19V,发热很正常,你可以选择2596降压模块 ...

这个制作最终是一个水泵专用的24V电源和一个5V电源模块解决的。
回复 支持 反对

使用道具 举报

发表于 2020-10-4 16:16:47 | 显示全部楼层
楼主为何不先DIY一个调压直流电源,几元钱买板DC降压模块和电压电流表,将24V直流电源通过DC降压模块降压使用,这样效率会更高,而直接用7805之类的三端稳压器则效率低,甚至于会发热严重。
回复 支持 反对

使用道具 举报

发表于 2020-10-4 16:31:47 | 显示全部楼层
也输入过高压,只是那个IO坏了,其余IO正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 20:31:26 | 显示全部楼层
hujj 发表于 2020-10-4 16:16
楼主为何不先DIY一个调压直流电源,几元钱买板DC降压模块和电压电流表,将24V直流电源通过DC降压模块降压使 ...

起初是用一个闲置的12V铁网壳的开关电源改成24V输出后驱动水泵,制作过程中为了为单片机提供5V电源走了弯路,原本以为很简单的但每每实验收尾的时候就出现了人为的乌龙,最终方案确定后又发现为电源做防水密封的外壳是个问题,而配合净水器使用都是放在厨台下面的电器不做防护也是不行的,最终还是一个24V/5A+一个5V/1A两个标准电源解决了问题,其实如果再次制作就不必另外配5V电源了,因为既然需要将市电引入厨下,用一个含USB的电源插座就完美解决了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 20:33:21 | 显示全部楼层
ploestar 发表于 2020-10-4 16:31
也输入过高压,只是那个IO坏了,其余IO正常

这倒是没想到也没有测量就扔掉了,看来当时测量一下或许省事不少,多谢你的经验分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-22 10:26 , Processed in 0.312001 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表