求51单片机控制继电器程序
通过三个按键模拟三种状态,s1常闭,s2常开,s3常开。工作时扫描三个按键的状态:如果s1闭合,s2常开,s3常开时,输出控制继电器1闭合,延时3秒后结束输出程序,继续检...
通过三个按键模拟三种状态,s1常闭,s2常开,s3常开。工作时扫描三个按键的状态:如果s1闭合,s2常开,s3常开时,输出控制继电器1闭合,延时3秒后结束输出程序,继续检测三个按键的状态,如果状态无改变,则扫描下去;如果s1常闭,s2常开,s3闭合,则继电器2闭合,延时3秒后结束输出程序,继续检测三个按键状态,如无状态改变,则扫描下去;如果s1闭合,s2闭合,s3常开 ,则继电器2闭合,延时3秒后结束输出程序,继续检测三个按键状态,如状态无改变,则扫描下去。大致图就是这样子的,如果图中有错误,请指正,请编译的时候最好带上注释,感谢。另,我用的是90c516rd+,不知道跟89c51通用不?最后想移植到stm32f103中去,如果程序编译出来能兼容stm32f103更好,或者指明方法,感谢大神们。
展开
2个回答
展开全部
程序就免了,给你几个建议。
你最好把按键的程序和逻辑控制分开写,这样比较清晰,按键驱动的结果就是消抖以后的按键状态,处理完清除,最好用固定时钟驱动少用延时,按键驱动看着容易做好了还是不容易的。
逻辑控制无非就是if else。。。用全局量记录之前的状态,最好有个简单明了的逻辑状态图否则很容易乱套,然后操作继电器就是两个io口就是了。
你用的这个和89c都是stc比较老的型号了,建议你到官网看看,很多新型号跑得更快,程序上能不能通用注意两点,死等延时的时间和硬件上的区别。
stc很多型号都用3.0和3.1口下载程序,所以按键会有影响,建议换个io口
继电器的常开和常闭是接线决定的,按键常开和常闭可以用上下拉电阻来控制,硬件上处理一下,主要是要保证系统刚上电之前的这段时间的状态是对的。
51和stm32是完全不同的cpu,如果要移植到stm32上初始化和寄存器操作是不一样的,c语言的层面上大概只有逻辑控制这块儿能用,而且stm32是3.3V硬件上也要处理。
这个做成并不难,做好就要花些心思,自己做才有意义解决问题就是学习的过程。
追问
关键问题是不懂编程,现抱佛脚来不及啊。。。
你说的这些我都只知道皮毛,型号无所谓,新的老的都行,关键就是想实现那几个功能,至于用哪个引脚也无所谓,不是非得用p3.0,p3.1的,继电器状态不要管他,意思就是通过按键改变输出状态,经过一段时间后结束。
至于51跟stm32,主要是看着stm32体积比较小,更能节约空间,引脚多,可扩展性强,没别的。
追答
51也有小封装,8脚sop的都有。
又看了一下你这个逻辑是有问题的
s1常闭,s2常开,s3常开。工作时扫描三个按键的状态:如果s1闭合,s2常开,s3常开时,输出控制继电器1闭合,延时3秒后结束输出程序,继续检测三个按键的状态,如果状态无改变,则扫描下去。。。
初态应该和上电默认状态一致,如果单片机没上电应该保持初态,没有任何状态变化也要保持初态。所以你这个延时三秒后结束输出是个啥意思,换句话说三秒从哪里开始算起呢?
你在斟酌斟酌吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询