如何在STM8S单片机上实现一键式的开关机功能

发布者:创意梦者最新更新时间:2020-08-14 来源: elecfans关键字:STM8S  单片机  一键式  开关机功能 手机看文章 扫描二维码
随时随地手机看文章

开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。


开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的电流降低到μA级,对电池的消耗就可以忽略不计了。


1、电路设计

电路图如下,C1是STM8S单片机VCAP电容,保持内部1.8V电压的稳定,是STM8S单片机唯一必须接要的外部元件,选用容量为1μF的瓷片电容,而且从电路可靠性讲,这个电容越靠近单片机IC越好。


K1是按钮,一端接到单片机的PD4引脚上,另一端接地,这样按钮被按下就会产生一个低电平的脉冲。


Q1是三极管,通过发光二极管D1和限流电阻R1接到单片机的PD3上。这样当PD3输出低电平时,Q1导通,VCC上有电压,可以对系统供电,反之PD3输出高电平时,Q1截止VCC没有电压。


发光二极管D1还兼作电源指示灯的作用, Q1导通时发光反之不发光。


剩余的C2~C5都是电源退藕电容,用于消除电源上的干扰信号。P1、P2两个接线端分别接3.6V锂电池的正负极。

如何在STM8S单片机上实现一键式的开关机功能

2、软件设计

软件要实现的功能是,在PD4引脚上监控按钮按下产生的低电压脉冲信号,并根据这个信号来设置PD3引脚的输出电平去控制Q1的导通和截止,以及设置单片机自身的工作状态,以此实现对电源供电的控制。


1)引脚工作模式设置

首先要做的,就是设置单片机引脚的工作模式,把PD4设置为输入模式,D3设置为输出模式。

在STM8S_StdPeriph_Lib库中,可以使用这个函数进行设置:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)

GPIOx是端口编号,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口,GPIO_Pin是引脚编号,取值有GPIO_PIN_1~GPIO_PIN_7,函数通过GPIOx和GPIO_Pin两个参数指定一个唯一的引脚。

GPIO_Mode是工作模式了。表示输入模式的取值有四种,分别是要不要上拉,要不要中断的四种组合:

GPIO_MODE_IN_FL_NO_ITInput floaTIng, no external interrupt

GPIO_MODE_IN_PU_NO_ITInput pull-up, no external interrupt

GPIO_MODE_IN_FL_ITInput floaTIng, external interrupt

GPIO_MODE_IN_PU_ITInput pull-up, external interrupt

要上拉的话,单片机内部会自动为引脚提供一个上拉电流,在没有外部输入的情况下,引脚就是高电平了。


表示输出模式的取值有8种,分别是是否开漏输出、输出高低电平、是否高速输出的组合:

GPIO_MODE_OUT_OD_LOW_FASTOutput open-drain, low level, 10MHz

GPIO_MODE_OUT_PP_LOW_FASTOutput push-pull, low level, 10MHz

GPIO_MODE_OUT_OD_LOW_SLOWOutput open-drain, low level, 2MHz

GPIO_MODE_OUT_PP_LOW_SLOWOutput push-pull, low level, 2MHz

GPIO_MODE_OUT_OD_HIZ_FASTOutput open-drain, high-impedance level,10MHz

GPIO_MODE_OUT_PP_HIGH_FASTOutput push-pull, high level, 10MHz

GPIO_MODE_OUT_OD_HIZ_SLOWOutput open-drain, high-impedance level, 2MHz

GPIO_MODE_OUT_PP_HIGH_SLOWOutput push-pull, high level, 2MHz

在这个应用中,需要把PD4设置为带上拉(因为按钮未按下时要呈高电平)、有中断的输入模式。开机时,PD3要设置为低电平的输出模式(低电平才能让Q1导通)。关机时PD3要设置为不带上拉的输入模式,所以这部分代码要这样写:

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_IT); //PD4设置为带上拉、有中断的输入模式

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); //开机时把PD3设置低电平的输入模

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//关机时把PD3设置低电平的输入模式

额外提一下,除了GPIO_Init函数可以设置引脚是输出高电平还是低电平,还可以用下面四个函数继续引脚的高低电平:

void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal)//输出PortVal指定的电平

void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//输出高电平

void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//输出低电平

void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//高低电平翻转一次


2)停机模式设置

STM8S单片机有停机模式,在停机模式下,单片机功耗降到最低,所有时钟停止工作,但可以保留RAM和寄存器的值,停机模式只能可以通过下面几种方式退出:

-外部中断(GPIO)

-CAN接收中断

-SPI传输结束

-I2C中断(从地址匹配)

-复位

通过执行HALT指令,也就是执行库函数的halt()函数进入停机模式。


3)设置外部中断

外部中断通过SetExtIntSensitivity函数设置:

void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)

其中Port是要设置外部中断的端口,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口;

SensitivityValue是外部中断类型,有以下几种取值,分别表示下降沿和低电平触发中断、上升沿触发中断、下降沿触发中断、上升沿和下降沿触发中断:

EXTI_SENSITIVITY_FALL_LOWInterrupt on Falling edge and Low level

EXTI_SENSITIVITY_RISE_ONLYInterrupt on Rising edge only

EXTI_SENSITIVITY_FALL_ONLYInterrupt on Falling edge only

EXTI_SENSITIVITY_RISE_FALLInterrupt on Rising and Falling edges

在这个应用中,按钮按下是产生下降沿,要选取EXTI_SENSITIVITY_FALL_ONLY模式。

设置中断模式后,还需要启用中断,使用enableInterrupts()函数启用。


4)外部中断处理程序

在ST官方提供的STM8S_StdPeriph_Lib库自带的模板中,中断处理程序都在stm8s_it.c中实现。stm8s_it.c中已经根据中断向量设置好了每种中断处理程序的入口函数。只需在相应函数中填入内容即可。

关键字:STM8S  单片机  一键式  开关机功能 引用地址:如何在STM8S单片机上实现一键式的开关机功能

上一篇:电容式触摸感应在电磁炉中的应用研究
下一篇:STM8单片机rtc时钟的设计

推荐阅读最新更新时间:2024-11-18 21:24

单片机中断学习笔记
一、基本概念 1、 89C51单片机中共有5 个中断源:两个外部中断,两个定时/计数器中断(溢出),一个串行口中断。 2、 单片机中断系统中有两种不同类型的中断:一种称为非屏蔽中断,用户不能用软件方法加以禁止;另一种称为屏蔽中断,本文描述的都是这种类型。 3、 二、控制字 1、 外部中断。单片机的12、13(P3.2、P3.3)脚引入,名称为INT0、INT1。以上的TCON寄存器用于控制外部中断。 IT0:INT0的触发方式。0表示低电平触发;1表示负跳变触发。 IE0:有外部中断进入时,该位置1。CPU响应后自动清0。 2、 内部中断。TCON寄存器,定时器中已描述。 3、 串行口中断。 4、 中断允许寄存
[单片机]
51单片机-新按键程序
1.支持连按的书写 对上一讲的知识我们再补充一下支持连按的代码以此加深理解。 实验现象就是按着按键不放,那么“key=1;”出现的频率就会比不支持连按代码的时候多,所以就会有左右不断流水的现象,按键的功能代码大家自己去分析了。 #include reg52.h #include function.h #define TIMES 2000 //让流速慢一点 sbit KEY4 = P2^7; u8 KEY4_Scan() { static u8 key_up=1; static u16 times; if(key_up==0) { times++; if(times =T
[单片机]
51<font color='red'>单片机</font>-新按键程序
51单片机的花样彩灯
#include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int char code SST516 _at_ 0x003b; uchar code display_P0 ={ 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x7F,0xBF,0xDF,0xEF,0xF7,
[单片机]
基于AT89c51单片机为核心的遥控报警系统设计与原理分析
1 引 言 由于经济的快速发展,人们生活水平得到较大的提高,生活节奏也越来越快,为此家电遥控和家庭安全也为人们所需要和重视。以AT89C51单片机为核心通过电话进行电器遥控和报警装置主要解决这些问题。他的主要功能有:通过电话可以遥控16路电器通断,遥控路数可以根据需要进行扩展;可以实现电器调压调速控制,有密码设定,保密安全性好;有语言提示,避免盲目操作;可以取消已输入的操作命令;当单片机接收到家中天然气泄露、温度超限和失窃信号后会自动拨打预留电话并报告家中发生的情况。 2硬件电路设计 总体电路设计思路是:电话遥控报警器与家用电话采用并联方式,当有振铃信号时单片机开始记数,前10次铃声内若有人接电话,则遥控报警器被
[单片机]
基于AT89c51<font color='red'>单片机</font>为核心的遥控报警系统设计与原理分析
ARM和单片机的区别
  1、软件方面   这应该是最大的区别了。引入了操作系统。为什么引入操作系统?有什么好处嘛?   1)方便。主要体现在后期的开发,即在操作系统上直接开发应用程序。不像单片机一样一切都要重新写。前期的操作系统移植工作,还是要专业人士来做。   2)安全。这是LINUX的一个特点。LINUX的内核与用户空间的内存管理分开,不会因为用户的单个程序错误而引起系统死掉。这在单片机的软件开发中没见到过。   3)高效。引入进程的管理调度系统,使系统运行更加高效。在传统的单片机开发中大多是基于中断的前后台技术,对多任务的管理有局限性。   2、硬件方面   现在的8位单片机技术硬件发展的也非常得快,也出现了许多功能非常强大的单片机。但
[单片机]
基于51单片机的pwm直流电机调速
仿真原理图如下 单片机源程序如下: #include reg52.h /********************************************* * 定时器初值 *********************************************/ #define T0HIGH 0xec #define T0LOWW 0x8a /********************************************* * *********************************************/ typedef unsigned char u8; typed
[单片机]
基于51<font color='red'>单片机</font>的pwm直流电机调速
51单片机启动过程
STC8G2K64S4-48PIN 系列、STC8G2K64S2-48PIN 系列单片内部集成了 64K 字节【0000H-FFFFH】的 Flash 程序存储器(ROM)。 1:单片机复位后,程序计数器(PC)的内容为 0000H,从 flash的0000H 单元开始执行程序。【PC是一个16位的计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。】 2:另外中断服务程序的入口地址(又称中断向量)也位于程序存储器单元。在程序存储器中,每个中断
[单片机]
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(3)NVIC 介绍
NVIC(Nested vectored interrupt controller,嵌套向量中断控制器)是Cortex-M处理器的一部分,它是可编程的,且寄存器位于存储器映射的系统控制空间(SCS)。NVIC与内核相辅相成,共同完成对中断的响应。本章将介绍中断的优先级设置、如何定义中断函数名称、中断向量如何偏移。有关NVIC的更多知识,请见《ARM Coretex-M3权威指南》。 3.1.优先级的设置 在Cortex-M中,优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何时可以响应。优先级的数值越小,则优先级越高。Cortex-M支持中断嵌套,使得高优先级异常会抢占低优先级异常。有3个系统异常:复位,NMI以
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】GD32 <font color='red'>MCU</font> 常见外设介绍(3)NVIC 介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved