mtiaopi 发表于 2019-12-16 09:09 改用无刷水泵吧 |
mtiaopi 发表于 2019-12-16 13:41 由于不清楚你采用的水位开关具体工作形态,程序只是完成控制逻辑关系,如果做实物还需要进一步完善 ![]() ![]()
|
wulin 发表于 2019-12-16 09:37 #include <STC12C2052AD.H> #define uint unsigned int #define uchar unsigned char uint temp; uchar a; sbit dishuiwei=P1^6; sbit gaoshuiwei=P1^5; sbit shuiliu=P1^7; sbit shuibeng=P1^0; sbit gaoled=P1^3; sbit diled=P1^2; sbit shuiliuled=P1^1; void delay(uint i); void main() { temp=0; shuiliuled=0; while(1) { while(dishuiwei==1) //检测低水位开关 { //启动水泵 shuibeng=0; diled=dishuiwei; // gaoled=~gaoshuiwei; // 指示灯 while(gaoshuiwei==1) //检测高水位开关 { delay(4800); //延时3秒左右 diled=dishuiwei; gaoled=~gaoshuiwei; if(shuiliu==1) //检测水位开关,如果没水流就关水泵 { //启动定时器延时 shuibeng=1; TMOD=0x01; TL0=(65536-45000)/256; TH0=(65536-45000)%256; EA=1; ET0=1; TR0=1; while(temp<65000) //延时时间 { diled=dishuiwei; // gaoled=~gaoshuiwei; //指示灯显示 } EA=0; //关定时器 temp=0; shuibeng=0; //启动水泵 } } } shuibeng=1; diled=dishuiwei; gaoled=~gaoshuiwei; } } void delay(uint i) { uint y; for(i;i>0;i--) for(y=570;y>0;y--); } void time0() interrupt 1 { TL0=(65536-45000)/256; // TH0=(65536-45000)%256; // temp++; a++; if(a==5) // { // a=0; shuiliuled=~shuiliuled; //在检测到没水流时水流灯闪烁报警 } } |
没有外围电路很难说清楚,单片机程序跟实际项目的调试差别不少...尤其是你用了电磁阀相关的东西,或者隔离没做好.. |
mtiaopi 发表于 2019-12-16 09:09 你把程序添加注释和硬件图发上来,可以帮你看看。因为你的程序有多处明显不合理。 |
51hei**1140 发表于 2019-12-15 15:55 要怎么解决这种问题,由于空间太小,电源我用的是一个5V/2A的手机充电器,和单片机板子放在一个插座明盒里的,是不是电源引起的干扰。 |
51hei**1140 发表于 2019-12-15 15:55 这种情况怎么检测,看门狗可以吗 |
你好! 典型的电磁干扰造成的单片机程序跑飞 |