STM8单片机教程-06 GPIO口输入(按键检测)
注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。
注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。
一 本节课的目标:
- 掌握单片机的GPIO口的输入功能
- 按键功能的检测
- 通过按键控制LED灯的亮灭
- SW3按键按下LED2 灭
- SW4 按键按下LED2 亮
二 硬件介绍:
1.打开原理图,
如下图:我们可以看到 原理图上 红色框选的部分。 红色框选的部分,就是本节课 需要使用的原理图部分
2.本节课用到的单片机资源:
单片机GPIO口:PC1 PC4
3.原理简单分析:
我们以按键SW4为例,来简单的分析一下设计原理。
①按键按下:
- 按键未按下: PC1 高电平
- 按键按下: 0.033V 低电平
如果按键按下,按键导通,则PC4 和GND连通, PC4低电平
②按键松开:
按键送开,因R19上拉电阻,所以PC1 端口是高电平。
特别说明: PC2 PC3 PC4 设计没有 上拉电阻,是因为单片机的内部有上拉电阻。所以不需要外部再设计。 PC1口没有上拉电阻。所以增加了R19上拉电阻。
三 单片机GPIO相关寄存器的介绍(参考上章节)
(省略)
四 实现代码
( 代码讲解 详见视频)
#include “stm8l10x.h”
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_PINS GPIO_Pin_3
#define SW3_GPIO_PORT GPIOC
#define SW3_GPIO_PINS GPIO_Pin_4
#define SW4_GPIO_PORT GPIOC
#define SW4_GPIO_PINS GPIO_Pin_1
void Delay(uint16_t nCount)
{
while (nCount != 0)
{
nCount–;
}
}
void main(void)
{
GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(SW3_GPIO_PORT, SW3_GPIO_PINS, GPIO_Mode_In_PU_No_IT);
GPIO_Init(SW4_GPIO_PORT, SW4_GPIO_PINS, GPIO_Mode_In_FL_No_IT);
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);
while (1)
{
if(GPIO_ReadInputDataBit(SW3_GPIO_PORT,SW3_GPIO_PINS)== 0)
{
Delay(10000);
if(GPIO_ReadInputDataBit(SW3_GPIO_PORT,SW3_GPIO_PINS) == 0)
{
while(GPIO_ReadInputDataBit(SW3_GPIO_PORT,SW3_GPIO_PINS) == 0);
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PINS);
}
}
if(GPIO_ReadInputDataBit(SW4_GPIO_PORT,SW4_GPIO_PINS) == 0)
{
Delay(10000);
if(GPIO_ReadInputDataBit(SW4_GPIO_PORT,SW4_GPIO_PINS) == 0)
{
while(GPIO_ReadInputDataBit(SW4_GPIO_PORT,SW4_GPIO_PINS) == 0);
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);
}
}
}
}
五 功能测试
功能测试正常. 通过视频课程演示。