求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更好,或者指明方法,感谢大神们。 展开
 我来答
huzi2099
2018-02-21 · TA获得超过1172个赞
知道小有建树答主
回答量:1887
采纳率:82%
帮助的人:637万
展开全部

程序就免了,给你几个建议。

  1. 你最好把按键的程序和逻辑控制分开写,这样比较清晰,按键驱动的结果就是消抖以后的按键状态,处理完清除,最好用固定时钟驱动少用延时,按键驱动看着容易做好了还是不容易的。

  2. 逻辑控制无非就是if else。。。用全局量记录之前的状态,最好有个简单明了的逻辑状态图否则很容易乱套,然后操作继电器就是两个io口就是了。

  3. 你用的这个和89c都是stc比较老的型号了,建议你到官网看看,很多新型号跑得更快,程序上能不能通用注意两点,死等延时的时间和硬件上的区别。

  4. stc很多型号都用3.0和3.1口下载程序,所以按键会有影响,建议换个io口

  5. 继电器的常开和常闭是接线决定的,按键常开和常闭可以用上下拉电阻来控制,硬件上处理一下,主要是要保证系统刚上电之前的这段时间的状态是对的。

  6. 51和stm32是完全不同的cpu,如果要移植到stm32上初始化和寄存器操作是不一样的,c语言的层面上大概只有逻辑控制这块儿能用,而且stm32是3.3V硬件上也要处理。

  7. 这个做成并不难,做好就要花些心思,自己做才有意义解决问题就是学习的过程。

追问
关键问题是不懂编程,现抱佛脚来不及啊。。。
你说的这些我都只知道皮毛,型号无所谓,新的老的都行,关键就是想实现那几个功能,至于用哪个引脚也无所谓,不是非得用p3.0,p3.1的,继电器状态不要管他,意思就是通过按键改变输出状态,经过一段时间后结束。
至于51跟stm32,主要是看着stm32体积比较小,更能节约空间,引脚多,可扩展性强,没别的。
追答
51也有小封装,8脚sop的都有。
又看了一下你这个逻辑是有问题的
s1常闭,s2常开,s3常开。工作时扫描三个按键的状态:如果s1闭合,s2常开,s3常开时,输出控制继电器1闭合,延时3秒后结束输出程序,继续检测三个按键的状态,如果状态无改变,则扫描下去。。。
初态应该和上电默认状态一致,如果单片机没上电应该保持初态,没有任何状态变化也要保持初态。所以你这个延时三秒后结束输出是个啥意思,换句话说三秒从哪里开始算起呢?
你在斟酌斟酌吧。
大陆业余歌手
2018-02-20
知道答主
回答量:49
采纳率:0%
帮助的人:4.1万
展开全部
编程语言
追问
针对这种情况,能给编写下么?
汇编也是一窍不通,现在在恶补中。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式