|
本帖最后由 慕名而来 于 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个可以多**几次了。
丑媳妇出来见见公婆,蹩脚的制作见下图:
未经过实际应用检验的代码如下:
- /************************************
- 净水器水泵及18S延时冲洗控制程序
- 编写:wannenggong
- 芯片:STC12C4052AD
- 时间:2020-06-03
- *************************************/
- #include <STC12C2052AD.h>
- //--------------------------------------------------------
- #define uchar unsigned char
- #define uint unsigned int
- //--------------------------------------------------------
- sbit GK=P1^4; //高压开关
- //水龙头打开时开关闭合端口接地----输入低电平
- //水龙头关闭后开关断开端口经10K电阻接Vcc----输入高电平
- sbit DF=P1^5; //废水电磁阀驱动
- sbit JF=P1^6; //水泵继电器驱动
- //--------------------------------------------------------
- bit ft; //定时器计时到达标志
- uchar flag;
- uint t0=0; //定时器中断计数变量
- //====I/O口、计数变量、标志状态初始化函数=================
- void IO_init()
- {
- GK=1;
- DF=1; //关闭电磁阀
- JF=1; //关闭水泵
- TR0=0;
- t0=0;
- ft=0;
- flag=0;
- }
- //====定时器T0初始化函数==================================
- void T0_Init(void)
- {
- TMOD = 0x01;; //设置定时器模式
- TL0 = 0xB0; //设置定时初值,外部晶振12MHz&50ms
- TH0 = 0x3C; //设置定时初值
- TF0 = 0; //清除TF0标志
- ET0=1;
- EA=1;
- }
- //====定时器TO中断函数====================================
- void clock_T0(void) interrupt 1
- {
- TL0 = 0xB0;
- TH0 = 0x3C;
- t0++;
- if(t0==360) //18s延时
- {
- t0=0;
- ft=1;
- }
- }
- //====冲洗电磁阀驱动函数==================================
- void DF_control()
- {
- if(flag==1) //执行延时18s操作
- {
- TR0=1;
- flag=0;
- DF=0;
- if(ft)
- {
- ft=0;
- TR0=0;
- IO_init();
- }
- }
- if(flag==2) //变量恢复初始状态
- {
- ft=0;
- TR0=0;
- t0=0;
- flag=0;
- DF=1;
- }
- }
- //====主函数=============================================
- main()
- {
- T0_Init();
- IO_init();
-
- while(1)
- {
- if((GK==1)&&(JF==1))
- IO_init();
- if(GK==0)
- JF=0;
- if((GK==1)&&(JF==0))
- flag=1;
- if((GK==0)&&(JF==0))
- flag=2;
- DF_control();
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|