单片机按键软开关:1个引脚实现单片机低电量自己控制给自己断电

背景

类似于手机的开机按键,我们希望在单片机电路上也能实现类似的低电量自动关机、通过按键而不是自锁开关来上电开机。

软开关电路

电路图如下:
在这里插入图片描述

  • 当按键按下时,Q1导通,R18右侧变为低电平,进而Q2导通,系统上电
  • 系统上电后,立刻控制PWR_CTR为高电平,此时松开按键,系统依旧保持上电状态。
  • 当系统主动关机时,控制PWR_CTR为低电平,系统断电。

电压采样电路

我们在加了软开关之后,就可以在软开关后面加采样电阻采样电量,这样不会导致电池一直被放电。

使用一个引脚实现

在上述电路中,有2个问题:

  • 当按键按下时,单片机PWR_CTR引脚会受到外部输入POWER_IN的电压,如果电压高于5V,会打坏单片机。
  • 必须通过PWR_CTR控制软开关开断,再通过另外一个引脚对电池电压进行采样,这样就整个需要2个引脚。

我们可以对电路做如下修改:
在这里插入图片描述

  • 输入到PWR_CTR引脚的电压,被电阻R18和R19分压,不会打坏电阻。
  • 当按下按键时,单片机上电,首先初始化PA1为ADC,此时松开按键,由于ADC为输入,不会输出电平,所以ADC_PA1端的电平为高电平,可以保持单片机一直上电。当检测到电池电压过低时,将PA1初始化为输出,输出低电平,给电源断电。

仿真如下:
刚上电时,如下:
在这里插入图片描述
按下开关,再松开后,如下:

在这里插入图片描述
电源电压变化后,ADC采样端电压如下:
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,这是一个基于51单片机的电风扇控制程序。程序中实现了一个按键控制开关和一个按键控制加速功能。 ```c #include<reg51.h> //头文件 sbit KEY1=P3^2; //定义按键1的引脚 sbit KEY2=P3^3; //定义按键2的引脚 sbit FAN=P2^0; //定义风扇的引脚 void delay_ms(unsigned int time) //延时函数 { unsigned int i,j; for(i=0;i<time;i++) for(j=0;j<1275;j++); } void main() { unsigned char speed=1; //风速变量,初始值为1 unsigned char flag1=1,flag2=1; //按键标志位,用于消抖 FAN=0; //初始状态为关闭 while(1) { if(KEY1==0 && flag1==1) //按键1按下 { flag1=0; //按键标志清零 if(FAN==0) FAN=1; //如果风扇关闭,则打开 else FAN=0; //否则关闭风扇 } if(KEY1==1) flag1=1; //按键1松开,按键标志置1 if(KEY2==0 && flag2==1) //按键2按下 { flag2=0; //按键标志清零 speed++; //风速加1 if(speed>3) speed=1; //风速不能超过3,循环回到1 } if(KEY2==1) flag2=1; //按键2松开,按键标志置1 switch(speed) //根据风速控制风扇 { case 1:FAN=0;break; //风速为1,风扇关闭 case 2:delay_ms(100);FAN=1;break; //风速为2,延时100ms后打开风扇 case 3:delay_ms(50);FAN=1;break; //风速为3,延时50ms后打开风扇 } } } ``` 程序中使用了P3口的2、3引脚分别连接两个按键,用于控制风扇的开关和风速的调节。P2口的0引脚连接风扇,用于控制风扇的开关。程序中还使用了一个延时函数,用于实现不同风速时风扇的转速控制。 程序的主要流程是进入一个死循环,不断检测按键状态,根据按键状态控制风扇的开关和风速。程序中使用了一个按键消抖的技术,避免按键抖动造成误操作。 注意,程序中的延时函数可能需要根据具体硬件调整,以实现不同风速下的合适转速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天城寺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值