我是靠谱客的博主 拼搏音响,这篇文章主要介绍STC8H1K08 - GPIO 按键检测不使用硬件或软件消抖的按键检测参考,现在分享给大家,希望可以做个参考。

文章目录

  • 不使用硬件或软件消抖的按键检测
    • 原理图
    • Keil 工程结构
    • 源文件
  • 参考

STC8H 系列单片机所有的 I/O 口均有 4 种工作模式:准双向口/弱上拉(标准 8051 输出口模式)、推挽输出/强上拉、高阻输入(电流既不能流入也不能流出)、开漏输出。

注意:除 P3.0 和 P3.1 外,其余所有 I/O 口上电后的状态均为高阻输入状态,用户在使用 I/O 口之前必须先设置 I/O 模式。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

不使用硬件或软件消抖的按键检测

原理图

  • 使用 3V 电源为单片机的供电;
  • 端口 P1.2 连接发光二极管 D1;当该端口输出高电平时,熄灭发光二极管,反之点亮发光二极管;
  • 端口 P1.6 连接轻触按键 K1;当按下按键时,该端口被拉低;
  • 端口 P3.7 连接轻触按键 K2;当按下按键时,该端口被拉高。

在这里插入图片描述

Keil 工程结构

在这里插入图片描述

源文件

新建 stc8h1k08.h 头文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef __STC8H1K08_H #define __STC8H1K08_H sfr P1 = 0x90; /* Port 1 Register */ sfr P1M1 = 0x91; /* Port 1 Configuration Register 1 */ sfr P1M0 = 0x92; /* Port 1 Configuration Register 0 */ sfr P3 = 0xB0; /* Port 3 Register */ sfr P3M1 = 0xB1; /* Port 3 Configuration Register 1 */ sfr P3M0 = 0xB2; /* Port 3 Configuration Register 0 */ sfr P_SW2 = 0xBA; #define P1PU (*(unsigned char volatile xdata *)0xFE11) /* P1 Pull-up Resistor Control Register */ /** P1M1 Register Bits Definition */ #define P12M1 (0x04) /* P1.2 Mode Selection Bit 1 */ #define P16M1 (0x40) /* P1.6 Mode Selection Bit 1 */ /** P1M0 Register Bits Definition */ #define P12M0 (0x04) /* P1.2 Mode Selection Bit 0 */ #define P16M0 (0x40) /* P1.6 Mode Selection Bit 0 */ /** P3M1 Register Bit Definition */ #define P37M1 (0x80) /* P3.7 Mode Selection Bit 1 */ /** P3M0 Register Bit Definition */ #define P37M0 (0x80) /* P3.7 Mode Selection Bit 0 */ /** P_SW2 Register Bit Definition */ #define P_SW2_EAXFR (0x80) /** P1PU Register Bit Definition */ #define P1PU_P16PU (0x40) #define setRegisterBit(r, b) r |= (b) #define clearRegisterBit(r, b) r &= ~(b) #endif

新建 config.h 头文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef __CONFIG_H #define __CONFIG_H #include "stc8h1k08.h" sbit KEY1 = P1^6; /* 轻触按键检测引脚。0:按下。1:松开。*/ sbit KEY2 = P3^7; /* 轻触按键检测引脚。0:松开。1:按下。*/ sbit LED1 = P1^2; /* 发光二极管控制引脚. 0:点亮, 1:熄灭 */ void initialize(); #endif

新建 config.c 文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "config.h" void initialize() { /** * 初始化 GPIO */ // // 将轻触按键(KEY1)检测引脚设为准双向口 // clearRegisterBit(P1M1, P16M1); // clearRegisterBit(P1M0, P16M0); // 将轻触按键(KEY1)检测引脚设为高阻输入 setRegisterBit(P1M1, P16M1); clearRegisterBit(P1M0, P16M0); // 使能轻触按键(KEY1)检测引脚的内部上拉电阻 setRegisterBit(P_SW2, P_SW2_EAXFR); setRegisterBit(P1PU, P1PU_P16PU); clearRegisterBit(P_SW2, P_SW2_EAXFR); // 将轻触按键(KEY2)检测引脚设为高阻输入 setRegisterBit(P3M1, P37M1); clearRegisterBit(P3M0, P37M0); // 将发光二极管(LED1)的控制引脚设为推挽输出 clearRegisterBit(P1M1, P12M1); setRegisterBit(P1M0, P12M0); }

新建 main.c 文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "config.h" void main() { initialize(); while(1) { if(KEY1 == 0) { // 按下按键 1,点亮发光二极管 LED1 = 0; } if(KEY2 == 1) { // 按下按键 2,熄灭发光二极管 LED1 = 1; } } }

参考

宏晶科技 STC micro - STC8H 系列单片机技术参考手册

最后

以上就是拼搏音响最近收集整理的关于STC8H1K08 - GPIO 按键检测不使用硬件或软件消抖的按键检测参考的全部内容,更多相关STC8H1K08内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部