打印
[51单片机]

如何用单片机实现软开关?

[复制链接]
2395|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wtu224|  楼主 | 2014-5-5 00:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
天风立马| | 2014-5-5 01:00 | 只看该作者
别着急中断,一步一步来.看你问的,你应该先熟悉一下数/模电.

使用特权

评论回复
板凳
ayb_ice| | 2014-5-5 08:42 | 只看该作者
两个三极管,几个电阻,两个GPIO

就搞定了

网上搜索一下,应该有的

使用特权

评论回复
地板
wtu224|  楼主 | 2014-5-5 11:25 | 只看该作者
天风立马 发表于 2014-5-5 01:00
别着急中断,一步一步来.看你问的,你应该先熟悉一下数/模电.

做硬件设计,画了几年板,读书时学过C,这些应该没问题.

使用特权

评论回复
5
df_flying| | 2014-5-5 20:58 | 只看该作者
对于单片,您的问题不算问题,一般单片入门的多是LED控制,51的资料很多的,网上也容易找到。中断这么说吧:当你正在看电视剧,这时你朋友让你帮个小忙干点别的(中断请求来了),你发现要你帮的忙你可以做,那么你暂停了看电视剧(保护现场,暂停/记住播放的位置),去帮他(中断响应),如果你不愿意,那么就不理睬继续看电视(这叫可屏蔽中断)。帮完了回来继续你的电视剧(恢复现场,调到你之前放的位置继续),这是,突然断路保护器跳了,断电了!(不可屏蔽中断来了),你没办法,只能先去检查什么原因漏的电导致的,(中断响应),检查发现一只耗子电死了!排除掉,上电回来继续(恢复现场)。说白了,单片跟人一样,同时只能做一件事,当别的请求,比如AD采样,定时器,什么的别的事情来了,就得停下当前正在做的事,去做别的事,如AD采样,采样完,回来继续做原先的事。:L

使用特权

评论回复
6
天风立马| | 2014-5-5 22:45 | 只看该作者
wtu224 发表于 2014-5-5 11:25
做硬件设计,画了几年板,读书时学过C,这些应该没问题.

那你想点亮一个LED不就是给个高电平或者低电平嘛.那么你的问题就变成了:怎样让单片机输出高||低电平.直接赋值给IO口就行了.比如:P0=0xFF  或者P0 = 0x00.

使用特权

评论回复
7
wtu224|  楼主 | 2014-5-7 08:45 | 只看该作者
df_flying 发表于 2014-5-5 20:58
对于单片,您的问题不算问题,一般单片入门的多是LED控制,51的资料很多的,网上也容易找到。中断这么说吧 ...

对于中断我只理解到这里,后面实际编程的时候不太好理解,如要先开总中断开关,定时中断还要高位低位那些.

使用特权

评论回复
8
wtu224|  楼主 | 2014-5-7 08:49 | 只看该作者
天风立马 发表于 2014-5-5 22:45
那你想点亮一个LED不就是给个高电平或者低电平嘛.那么你的问题就变成了:怎样让单片机输出高||低电平.直接 ...

我的问题是如果实现灯闪的话就要加延时语句,那如何在延时的时候响应按键呢?又如何实现一个按键实现灯的三种状态:闪,亮,灭.

使用特权

评论回复
9
天风立马| | 2014-5-7 20:22 | 只看该作者
本帖最后由 天风立马 于 2014-5-7 20:23 编辑
wtu224 发表于 2014-5-7 08:49
我的问题是如果实现灯闪的话就要加延时语句,那如何在延时的时候响应按键呢?又如何实现一个按键实现灯的三 ...


你的问题还能延伸:延时多久合适?相应按键如何优化算**一个按键如何实现N种功能.
我的回答是:一步一步来.每一步都实现了,加起来就都实现了.然后再去做优化.

使用特权

评论回复
10
ballack_linux| | 2014-5-8 00:24 | 只看该作者
完全可以不用中断 , 但是用中断的话响应速度会快很多
第一种方法,用轮询的方式检测按键,用一个变量,表示闪烁,全灭,全亮的状态,比如1,2,3,然后一个switch..case就搞定啦
第二种方法,其实也是一样,只是检测按键的方式采用外部中断的方式
闪烁也可以分为直接延时或者定时器方式

使用特权

评论回复
11
wtu224|  楼主 | 2014-5-8 09:28 | 只看该作者
ballack_linux 发表于 2014-5-8 00:24
完全可以不用中断 , 但是用中断的话响应速度会快很多
第一种方法,用轮询的方式检测按键,用一个变量,表 ...

试过用轮询的方式,可能是语句用得不好,响应时间不理想。如果灯亮5秒,灭5秒,这么长的延时如何加轮询在里面呢。

使用特权

评论回复
12
yk910127| | 2014-5-8 12:41 | 只看该作者
不用中断就可以

使用特权

评论回复
13
ballack_linux| | 2014-5-8 13:05 | 只看该作者
wtu224 发表于 2014-5-8 09:28
试过用轮询的方式,可能是语句用得不好,响应时间不理想。如果灯亮5秒,灭5秒,这么长的延时如何加轮询在 ...

很好办啊 在延时里面也做轮询

使用特权

评论回复
14
jxw82284134| | 2014-5-8 13:19 | 只看该作者
直接写3个子程序,用按键增加了个变量。根据不同的变量值执行不同子程序就可以了。可以不用中断的

使用特权

评论回复
15
moxue10| | 2014-5-15 17:58 | 只看该作者
用switch  case 语句  按键每加一 key++   switch(key)  case 1 :灯闪的程序  ; 依次类推。

使用特权

评论回复
16
mecompu| | 2014-5-25 15:08 | 只看该作者
1、按键用中断,但分为两种用法:第一种直接用外部中断,即中断来了就认为有按键触发;第二种用定时器中断计时,然后按键就以轮询方式理,
     即每隔一段时间就读取按键io口一次,然后判断io口状态是否产生了变化,产生了变化就说明按键被触发了;
2、  一个按键控制led多种模式可以这样实现:用一个变量来标识状态,例如:变量值为1时led闪,变量值为2时led是全灭,变量值为3时led是全
     亮,按键每触发一次就改变一次这个变量的值。然后在主函数里用轮询的方式控制led的亮和灭:变量值为1时控制led灯闪,变量值为2时控制
     led灯全灭,变量值为3时控制led灯全亮。
3、控制灯闪可以用一个变量在定时器中断里进行计数,当计数到达一定值时就改变一次led的状态,计数值依你要led闪的频率确定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

130

帖子

2

粉丝