文章目录

  • 不使用硬件或软件消抖的按键检测
    • 原理图
    • 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 头文件:

#ifndef __STC8H1K08_H
#define __STC8H1K08_Hsfr 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 头文件:

#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 文件:

#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 文件:

#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 按键检测相关推荐

  1. 【STC8A8K64S4A12开发板】—小白做GPIO按键实验

    版权声明:本文为博主原创文章,转载请附上原文出处链接. 文章目录 前言 一.硬件电路设计 1.开发板用户按键硬件电路 2.按键检测接法 3.按键检测电路考虑因素 二.软件设计 1.寄存器解析 1.1. ...

  2. linux 按键检测 防抖,GPIO输入——按键检测

    当按下一个按键时,系统是如何检测到的呢? 我们通过LED灯的亮灭状态来间接完成按键检测.当按下按键时,LED灯亮,再次按下时,LED灯灭. 要完成这个实验,我们就会用到GPIO外设的基本输入功能. 查 ...

  3. 【STM32】GPIO输入—按键检测

    Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性 文章目录 2.1硬件设计 2.2软件设计 2.2.1编程要点 2.2.2代码分析 1.按键引脚宏定义 2.按键 ...

  4. STM32F103 GPIO之按键检测

    1.直接上代码 #include "stm32f10x.h" #include "led.h" #include "key.h"void K ...

  5. 11、GPIO输入—按键检测

    文章目录 0.前言 1.硬件设计 2.软件设计 2.1.编程要点 2.2.代码分析 2.2.1.按键引脚宏定义 2.2.2.按键 GPIO 初始化函数 2.2.3.检测按键的状态 2.2.4.主函数 ...

  6. STM32——GPIO输入——按键检测

    硬件介绍 当按键置空时,IO接地 按键按下之后,IO口接通3.3V高电压,电流比较大,为了避免损坏IO,这里需要加装一个限流电阻.可以看到IO口是默认低电平,按键按下后产生一个上升沿,和平常的电路设计 ...

  7. stm32实现GPIO输入按键检测

    1.硬件设计 按键机械触点断开.闭合时,由于按键触点的弹性作用,按键开关不会马上稳定接通或一下就断开,使用按键时就会产生下图中的带纹波信号,需要软件消抖处理滤波 由于用软件消抖处理滤波不方便输入检测, ...

  8. Openwrt按键检测分析-窥探Linux内核与用户空间通讯机制netlink使用

    首先看一下Openwrt系统中关于按键功能的使用和修改,以18.06版本为例 按键功能实现在脚本中, 比如18.06/package/base-files/files/etc/rc.button/re ...

  9. linux耳机检测,Audio Jack 的耳机检测和按键检测

    基于QCM 8960 二十七.Audio jack1. https://wiki.sonyericsson.net/androiki/Huashan_legacy_feature:_Vibrator_ ...

最新文章

  1. 强烈推荐可以玩上一整天的游戏网站
  2. php函数,static,globalkeyword及三种变量作用域
  3. 机智云5.0推出IoT套件GoKit4.0 可实现物联网应用协同开发
  4. TCP/IP / 如何保证数据包传输的有序可靠?
  5. java中ssm付款代码,ssm实现支付宝支付功能(图文详解)
  6. 前端学习(757):预解析
  7. mysql操作窗口如何设置粘贴,Access6.5在表中复制和粘贴数据
  8. apicloud入门学习笔记1:简单介绍
  9. leetcode 92 python
  10. Windows操作系统的各进程的作用
  11. Javascript 权威指南第五版 手记(2) 变量的作用域
  12. AS1.3 及其以上预览版新插件-实验版(NDK)
  13. 硬件电路设计中的几点注意事项
  14. uni-app实现上传照片和个人信息
  15. HTML5 video autoplay=autoplay 无法自动播放的问题
  16. linux 终止作业任务命令,Linux中作业控制命令
  17. 视距无线传输 (Line of Sight,LOS)
  18. 计算机引起usb设备无法识别的原因有哪些,计算机无法识别USB设备是什么原因
  19. 外部排序(多路归并排序)
  20. 【MapReduce】MapReduce读写MySQL数据

热门文章

  1. mp4视频文件损坏无法播放怎么修复?
  2. 5000套web前端期末大作业 HTML+CSS+JavaScript网页设计实例 企业网站制作【建议收藏】
  3. 电线电缆行业mes解决方案,打造全新信息化车间
  4. OpenStack Train Magnum部署Kubernetes(2)--使用OpenStack界面部署虚拟机
  5. 小议:C++ 二维数组的声明与申请空间
  6. 重置 Mac 的 PRAM 和 NVRAM
  7. 我想做一个网站,怎么做
  8. 2022-2028全球牛油果市场专题研究及投资评估报告
  9. nodejs实现一个会自动聊天的机器人
  10. 删除鼠标右键Office 的共享文件夹同步 已成功