找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3939|回复: 33
收起左侧

这种按一下亮,再按一下灭的单片机程序,大家写过么?

  [复制链接]
ID:299519 发表于 2022-7-17 09:16 | 显示全部楼层 |阅读模式
参考图片。
51hei截图20220717091605.png
回复

使用道具 举报

ID:332444 发表于 2022-7-17 11:06 | 显示全部楼层
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。
回复

使用道具 举报

ID:299519 发表于 2022-7-17 11:40 | 显示全部楼层
xianfajushi 发表于 2022-7-17 11:06
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。

编程实现呀,如果纯硬件的话,还要单片机作甚。。
回复

使用道具 举报

ID:88256 发表于 2022-7-17 12:21 | 显示全部楼层
myemcu 发表于 2022-7-17 11:40
编程实现呀,如果纯硬件的话,还要单片机作甚。。

单片机是可以编程,但是还是得符合单片机的工作要求啊,沙发都告诉你不行了还争辩
回复

使用道具 举报

ID:299519 发表于 2022-7-17 12:25 | 显示全部楼层
hhdsdy 发表于 2022-7-17 12:21
单片机是可以编程,但是还是得符合单片机的工作要求啊,沙发都告诉你不行了还争辩

人家项目已经量产了,就是采用的这种方案。。
回复

使用道具 举报

ID:99525 发表于 2022-7-17 12:30 | 显示全部楼层
扔掉单片机,按钮改成自锁按钮!
回复

使用道具 举报

ID:884147 发表于 2022-7-17 12:36 | 显示全部楼层
编程完全可以实现,要加限流电阻,每间隔10mS置端口高电平检测按键,有键按下改变状态,无按键恢复状态。就是在发光管关闭的瞬间检测按键状态

评分

参与人数 1黑币 +21 收起 理由
wpppmlah + 21 赞一个!

查看全部评分

回复

使用道具 举报

ID:299519 发表于 2022-7-17 12:47 | 显示全部楼层
雪玉寐影 发表于 2022-7-17 12:30
扔掉单片机,按钮改成自锁按钮!

项目要具有可扩展需求,比如再加个闪烁状态啥的。
回复

使用道具 举报

ID:299519 发表于 2022-7-17 12:55 | 显示全部楼层
mtdzok 发表于 2022-7-17 12:36
编程完全可以实现,要加限流电阻,每间隔10mS置端口高电平检测按键,有键按下改变状态,无按键恢复状态。就 ...

还要用内部Timer?
回复

使用道具 举报

ID:121859 发表于 2022-7-17 13:09 | 显示全部楼层
这个电路只能实现按下亮,抬起灭。要实现按一下亮再按一下灭,无法实现。除非你的LED和按键分开用不同的IO口。
回复

使用道具 举报

ID:827243 发表于 2022-7-17 13:22 | 显示全部楼层
雪玉寐影 发表于 2022-7-17 12:30
扔掉单片机,按钮改成自锁按钮!

这个才是正解,怎么方便怎么来。
回复

使用道具 举报

ID:213173 发表于 2022-7-17 13:30 | 显示全部楼层
myemcu 发表于 2022-7-17 12:25
人家项目已经量产了,就是采用的这种方案。。

沙发说得没错。一个IO口复用于LED和按键当然可以,但要有硬件条件支持的。楼主这个图是有缺陷的,有损毁IO口的风险。
无标题.jpg


回复

使用道具 举报

ID:299519 发表于 2022-7-17 13:53 | 显示全部楼层
wulin 发表于 2022-7-17 13:30
沙发说得没错。一个IO口复用于LED和按键当然可以,但要有硬件条件支持的。楼主这个图是有缺陷的,有损毁I ...

Proteus不用过多考虑电气特性,仅考虑逻辑实现即可,就像单片机最小系统一样,都不用外加复位和时钟啥的,直接设置就行。
回复

使用道具 举报

ID:884147 发表于 2022-7-17 14:49 | 显示全部楼层
myemcu 发表于 2022-7-17 12:55
还要用内部Timer?

用不用定时器随意,本身按键就要加防抖,利用防抖延时即可,定时不要求准,太短了没必要,太长了不易检测到按键。实际就是发光管亮时是间断显示,是肉眼看不出来的,在熄灭瞬间检测按键。在逻辑上和电器参数上都是没有问题的。
回复

使用道具 举报

ID:299519 发表于 2022-7-17 16:43 | 显示全部楼层
daemondong 发表于 2022-7-17 13:22
这个才是正解,怎么方便怎么来。

见8楼,老板会让你这么干?
回复

使用道具 举报

ID:213173 发表于 2022-7-17 17:16 | 显示全部楼层
myemcu 发表于 2022-7-17 13:53
Proteus不用过多考虑电气特性,仅考虑逻辑实现即可,就像单片机最小系统一样,都不用外加复位和时钟啥的 ...

不考虑其它因素,此功能很容易实现。 无标题.jpg

  1. #include<reg52.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;

  4. sbit key=P3^7;

  5. bit LED;

  6. void Delay_ms(uint t)
  7. {
  8.         uint i,j;
  9.         for(i=t;i>0;i--)
  10.                 for(j=120;j>0;j--);
  11. }

  12. void main()
  13. {
  14.         LED=key;
  15.         while(1)
  16.         {
  17.                 key=1;
  18.                 if(!key)
  19.                 {
  20.                         LED=~LED;
  21.                         while(!key);
  22.                 }
  23.                 key=LED;
  24.                 Delay_ms(1);
  25.         }
  26. }

复制代码



回复

使用道具 举报

ID:299519 发表于 2022-7-17 17:28 | 显示全部楼层
wulin 发表于 2022-7-17 17:16
不考虑其它因素,此功能很容易实现。

判键不能采用阻塞方式。
回复

使用道具 举报

ID:213173 发表于 2022-7-17 17:40 | 显示全部楼层
myemcu 发表于 2022-7-17 17:28
判键不能采用阻塞方式。

示例只是给你一个逻辑关系的验证,按键处理方式请自行补课。
回复

使用道具 举报

ID:8222 发表于 2022-7-17 17:45 | 显示全部楼层
当LED这时,IO口低电平,你如何检测开关动作?再说你的LED直接接IO口中,会烧掉单片机的。
回复

使用道具 举报

ID:299519 发表于 2022-7-17 17:50 | 显示全部楼层
wulin 发表于 2022-7-17 17:40
示例只是给你一个逻辑关系的验证,按键处理方式请自行补课。

阻塞和非阻塞的区别还是很大滴。。
回复

使用道具 举报

ID:299519 发表于 2022-7-17 17:54 | 显示全部楼层
温xyz 发表于 2022-7-17 17:45
当LED这时,IO口低电平,你如何检测开关动作?再说你的LED直接接IO口中,会烧掉单片机的。

Proteus纯属逻辑验证,逻辑通过后,到了电气设计环节时,该加啥就加啥。
回复

使用道具 举报

ID:88256 发表于 2022-7-17 19:33 | 显示全部楼层
myemcu 发表于 2022-7-17 17:54
Proteus纯属逻辑验证,逻辑通过后,到了电气设计环节时,该加啥就加啥。

不是我想杠,画一个电阻这么难吗?自己1楼就直接说了“参考图片”,大家看图的接法说是不行有什么错?(很多初学者还是会忘了要加限流电阻)还说了已经量产了
回复

使用道具 举报

ID:299519 发表于 2022-7-17 22:42 | 显示全部楼层
hhdsdy 发表于 2022-7-17 19:33
不是我想杠,画一个电阻这么难吗?自己1楼就直接说了“参考图片”,大家看图的接法说是不行有什么错?( ...

Proteus实没必要画这个,又不是非要AD制板,那么机械作甚。
回复

使用道具 举报

ID:739610 发表于 2022-7-17 23:11 | 显示全部楼层
可以实现这个功能 就是不断的改变改变这个引脚的输入输出状态  输入时判断引脚状态 输出时实际是脉冲驱动LED  图是一回事 限流电阻是要加的
回复

使用道具 举报

ID:161164 发表于 2022-7-17 23:22 | 显示全部楼层
myemcu 发表于 2022-7-17 17:50
阻塞和非阻塞的区别还是很大滴。。

非阻塞
ezgif.com-crop.gif

2022-07-17_232152.png

回复

使用道具 举报

ID:299519 发表于 2022-7-18 08:42 | 显示全部楼层
我也想了一种:
  1. while(1)
  2. {
  3.         if(KY)
  4.         {
  5.    delay(1000);
  6.          if(!KY)
  7.    {
  8.     k_flag=1;
  9.                 d_Flag++;
  10.                 if(d_Flag>2)
  11.                  d_Flag=0;       
  12.    }          
  13.   }
  14.        
  15.         if(k_flag)       
  16.         {
  17.    k_flag=0;
  18.        
  19.          switch(d_Flag)
  20.          {
  21.                 case 0: D1= 0; break;
  22.                 case 1: D1 =1; break;
  23.                 case 2: for(i=0;i<6;i++)
  24.                         {
  25.                                                         D1 = !D1;
  26.                                                         delay(20000);
  27.                                                 }
  28.                 default:break;
  29.          }
  30.   }        
  31. }         
复制代码
回复

使用道具 举报

ID:965189 发表于 2022-7-18 08:55 | 显示全部楼层
用定时器中断脉冲驱动这个IO口,在高电平期间检测这个端口,如果是低电平,就是按下了按键。每次取反一次输出状态。
回复

使用道具 举报

ID:698558 发表于 2022-7-18 09:10 | 显示全部楼层
myemcu 发表于 2022-7-17 11:40
编程实现呀,如果纯硬件的话,还要单片机作甚。。

他这个图,输入和输出同一个引脚怎么实现啊
回复

使用道具 举报

ID:299519 发表于 2022-7-18 11:23 | 显示全部楼层
zhangxl 发表于 2022-7-18 09:10
他这个图,输入和输出同一个引脚怎么实现啊

参考26楼。
回复

使用道具 举报

ID:130230 发表于 2022-7-18 11:53 | 显示全部楼层
定时检测按键,剩下时间驱动led。分时执行就可以了,利用led的视觉残留效应可以做到。
回复

使用道具 举报

ID:332444 发表于 2022-7-19 14:11 | 显示全部楼层
myemcu 发表于 2022-7-17 11:40
编程实现呀,如果纯硬件的话,还要单片机作甚。。

那反问一下,难道提问之前就没在本论坛搜索过有这样的提问和例子?去看看这样例子是哪年的了!
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。这样的抛砖引玉反问看不懂也罢了。
回复

使用道具 举报

ID:824490 发表于 2022-7-19 16:17 | 显示全部楼层
电路做些修改,软件再规划一下可以实现你说的功能,

基本原则楼上的都 说了,分时运行LED驱动和按键检测。
回复

使用道具 举报

ID:299519 发表于 2022-7-19 17:17 | 显示全部楼层
名字不是重点 发表于 2022-7-19 16:17
电路做些修改,软件再规划一下可以实现你说的功能,

基本原则楼上的都 说了,分时运行LED驱动和按键检测 ...

我用的不是这种方法。
回复

使用道具 举报

ID:195496 发表于 2022-7-20 09:06 | 显示全部楼层
分时驱动的方法可以实现这种功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表