想要楼主的程序 |
原理图正确,带上计时器按时间输出基本就行了 |
dzbj 发表于 2017-4-11 23:52 谢谢,我已经编出来了 ![]() |
dzbj 发表于 2017-4-11 23:52 请问,用单片机控制固态继电器,再控制高频电磁阀每秒钟开关50次,请问这个程序应该怎么写 |
三极管驱动继电器 |
刚才少看最后一句了 补上 bit flag_one=0; //第一次工作标记 uchar num1s=0; //1s计数器 uchar n=5; //总秒数计数器 void mast() //主控 { if(flag_one==0) //如果 第一次工作标记为0 这里是你要求的第一次5s开5s关 { jk=1; //继电器吸合 num1s=0; //延时5s while(num1s<n); jk=0; //继电器关闭 num1s=0; //延时5s while(num1s<n); flag_one=1; //第一次工作标记置1 不再运行5s间隔的状态 n++; //总秒数计数器自加 } jk=1; //继电器吸合 num1s=0; //延时5+n秒 每次+1S while(num1s<n); n++; //总秒计数器自加 jk=0; //继电器关闭 num1s=0; //延时5s 你要求开时间每次+1S 关时间不变 while(n<5); //刚才没看见你最后一句话没写这段 if(n==40) //判断总次数 如果总次数是40 { flag_one=0; //第一次工作标记清零 n=5; //总秒数计数器置5 } } void Server_Time0() interrupt 1 //定时器服务程序 { TH0 = xx; //重装定时初值 1s TL0 = xx; //重装定时初值 1s num1s++; //1s计数器自加 } void main() { Init_Time(); //定时器初始化 没给你写 基础程序了 while(1) { mast(); //调用 主控程序 } } |
我写了一个 不知道对不对 一起学习吧 bit flag_one=0; //第一次工作标记 uchar num1s=0; //1s计数器 uchar n=5; //总秒数计数器 void mast() //主控 { if(flag_one==0) //如果 第一次工作标记为0 这里是你要求的第一次5s开5s关 { jk=1; //继电器吸合 num1s=0; //延时5s while(num1s<n); jk=0; //继电器关闭 num1s=0; //延时5s while(num1s<n); flag_one=1; //第一次工作标记置1 不再运行5s间隔的状态 n++; //总秒数计数器自加 } jk=1; //继电器吸合 num1s=0; //延时5+n秒 每次+1S while(num1s<n); n++; //总秒计数器自加 jk=0; //继电器关闭 num1s=0; //延时5s 你要求开时间每次+1S 关时间不变 while(n<5); } void Server_Time0() interrupt 1 //定时器服务程序 { TH0 = xx; //重装定时初值 1s TL0 = xx; //重装定时初值 1s num1s++; //1s计数器自加 } void main() { Init_Time(); //定时器初始化 没给你写 基础程序了 while(1) { mast(); //调用 主控程序 } } |
用三极管驱动,继电器。也可以用可控硅控制。 |
Vanessa 发表于 2017-3-26 18:00 只要在继电器驱动线圈两端并联二极管就可。 |
越快乐越堕落 发表于 2017-3-26 21:09 已经改成三极管的了 |
yzwzfyz 发表于 2017-3-25 01:12 那应该怎么改呢? |
yzwzfyz 发表于 2017-3-25 01:12 能给个建议改正吗,有点不太懂,谢谢 |
199419zzq 发表于 2017-3-26 14:31 正在往出憋程序 ![]() |
imxuheng 发表于 2017-3-26 11:13 调光是什么呢 |
zl2168 发表于 2017-3-25 09:05 三极管接法查的比较容易坏,正在考虑要不要用2003驱动数码管 |
原理图正确,就看你编程能不能实现了 |
2003驱动电路7路用了一路,真可惜。没有性价比更好的方案吗? |