找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 5028 | 评论数: 33 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-7-17 09:16

正文摘要:

参考图片。

回复

ID:195496 发表于 2022-7-20 09:06
分时驱动的方法可以实现这种功能
ID:299519 发表于 2022-7-19 17:17
名字不是重点 发表于 2022-7-19 16:17
电路做些修改,软件再规划一下可以实现你说的功能,

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

我用的不是这种方法。
ID:824490 发表于 2022-7-19 16:17
电路做些修改,软件再规划一下可以实现你说的功能,

基本原则楼上的都 说了,分时运行LED驱动和按键检测。
ID:332444 发表于 2022-7-19 14:11
myemcu 发表于 2022-7-17 11:40
编程实现呀,如果纯硬件的话,还要单片机作甚。。

那反问一下,难道提问之前就没在本论坛搜索过有这样的提问和例子?去看看这样例子是哪年的了!
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。这样的抛砖引玉反问看不懂也罢了。
ID:130230 发表于 2022-7-18 11:53
定时检测按键,剩下时间驱动led。分时执行就可以了,利用led的视觉残留效应可以做到。
ID:299519 发表于 2022-7-18 11:23
zhangxl 发表于 2022-7-18 09:10
他这个图,输入和输出同一个引脚怎么实现啊

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

他这个图,输入和输出同一个引脚怎么实现啊
ID:965189 发表于 2022-7-18 08:55
用定时器中断脉冲驱动这个IO口,在高电平期间检测这个端口,如果是低电平,就是按下了按键。每次取反一次输出状态。
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:161164 发表于 2022-7-17 23:22
myemcu 发表于 2022-7-17 17:50
阻塞和非阻塞的区别还是很大滴。。

非阻塞




ID:739610 发表于 2022-7-17 23:11
可以实现这个功能 就是不断的改变改变这个引脚的输入输出状态  输入时判断引脚状态 输出时实际是脉冲驱动LED  图是一回事 限流电阻是要加的
ID:299519 发表于 2022-7-17 22:42
hhdsdy 发表于 2022-7-17 19:33
不是我想杠,画一个电阻这么难吗?自己1楼就直接说了“参考图片”,大家看图的接法说是不行有什么错?( ...

Proteus实没必要画这个,又不是非要AD制板,那么机械作甚。
ID:88256 发表于 2022-7-17 19:33
myemcu 发表于 2022-7-17 17:54
Proteus纯属逻辑验证,逻辑通过后,到了电气设计环节时,该加啥就加啥。

不是我想杠,画一个电阻这么难吗?自己1楼就直接说了“参考图片”,大家看图的接法说是不行有什么错?(很多初学者还是会忘了要加限流电阻)还说了已经量产了
ID:299519 发表于 2022-7-17 17:54
温xyz 发表于 2022-7-17 17:45
当LED这时,IO口低电平,你如何检测开关动作?再说你的LED直接接IO口中,会烧掉单片机的。

Proteus纯属逻辑验证,逻辑通过后,到了电气设计环节时,该加啥就加啥。
ID:299519 发表于 2022-7-17 17:50
wulin 发表于 2022-7-17 17:40
示例只是给你一个逻辑关系的验证,按键处理方式请自行补课。

阻塞和非阻塞的区别还是很大滴。。
ID:8222 发表于 2022-7-17 17:45
当LED这时,IO口低电平,你如何检测开关动作?再说你的LED直接接IO口中,会烧掉单片机的。
ID:213173 发表于 2022-7-17 17:40
myemcu 发表于 2022-7-17 17:28
判键不能采用阻塞方式。

示例只是给你一个逻辑关系的验证,按键处理方式请自行补课。
ID:299519 发表于 2022-7-17 17:28
wulin 发表于 2022-7-17 17:16
不考虑其它因素,此功能很容易实现。

判键不能采用阻塞方式。
ID:213173 发表于 2022-7-17 17:16
myemcu 发表于 2022-7-17 13:53
Proteus不用过多考虑电气特性,仅考虑逻辑实现即可,就像单片机最小系统一样,都不用外加复位和时钟啥的 ...

不考虑其它因素,此功能很容易实现。

  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 16:43
daemondong 发表于 2022-7-17 13:22
这个才是正解,怎么方便怎么来。

见8楼,老板会让你这么干?
ID:884147 发表于 2022-7-17 14:49
myemcu 发表于 2022-7-17 12:55
还要用内部Timer?

用不用定时器随意,本身按键就要加防抖,利用防抖延时即可,定时不要求准,太短了没必要,太长了不易检测到按键。实际就是发光管亮时是间断显示,是肉眼看不出来的,在熄灭瞬间检测按键。在逻辑上和电器参数上都是没有问题的。
ID:299519 发表于 2022-7-17 13:53
wulin 发表于 2022-7-17 13:30
沙发说得没错。一个IO口复用于LED和按键当然可以,但要有硬件条件支持的。楼主这个图是有缺陷的,有损毁I ...

Proteus不用过多考虑电气特性,仅考虑逻辑实现即可,就像单片机最小系统一样,都不用外加复位和时钟啥的,直接设置就行。
ID:213173 发表于 2022-7-17 13:30
myemcu 发表于 2022-7-17 12:25
人家项目已经量产了,就是采用的这种方案。。

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



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

这个才是正解,怎么方便怎么来。
ID:121859 发表于 2022-7-17 13:09
这个电路只能实现按下亮,抬起灭。要实现按一下亮再按一下灭,无法实现。除非你的LED和按键分开用不同的IO口。
ID:299519 发表于 2022-7-17 12:55
mtdzok 发表于 2022-7-17 12:36
编程完全可以实现,要加限流电阻,每间隔10mS置端口高电平检测按键,有键按下改变状态,无按键恢复状态。就 ...

还要用内部Timer?
ID:299519 发表于 2022-7-17 12:47
雪玉寐影 发表于 2022-7-17 12:30
扔掉单片机,按钮改成自锁按钮!

项目要具有可扩展需求,比如再加个闪烁状态啥的。
ID:884147 发表于 2022-7-17 12:36
编程完全可以实现,要加限流电阻,每间隔10mS置端口高电平检测按键,有键按下改变状态,无按键恢复状态。就是在发光管关闭的瞬间检测按键状态

评分

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

查看全部评分

ID:99525 发表于 2022-7-17 12:30
扔掉单片机,按钮改成自锁按钮!
ID:299519 发表于 2022-7-17 12:25
hhdsdy 发表于 2022-7-17 12:21
单片机是可以编程,但是还是得符合单片机的工作要求啊,沙发都告诉你不行了还争辩

人家项目已经量产了,就是采用的这种方案。。
ID:88256 发表于 2022-7-17 12:21
myemcu 发表于 2022-7-17 11:40
编程实现呀,如果纯硬件的话,还要单片机作甚。。

单片机是可以编程,但是还是得符合单片机的工作要求啊,沙发都告诉你不行了还争辩
ID:299519 发表于 2022-7-17 11:40
xianfajushi 发表于 2022-7-17 11:06
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。

编程实现呀,如果纯硬件的话,还要单片机作甚。。
ID:332444 发表于 2022-7-17 11:06
这样电路无法实现,当低电平时点亮则再无法检测按键操作,高电平时是可以检测按键按下操作。

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

Powered by 单片机教程网

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