在上面介绍了使用I/O口点了LED,实际也可以用I/O口做按键检测。这里采用的是P1.0口外接按键到GND。P1.1口外接LED到GND。
P1.0--->按键--->GND。
P1.1--->LED--->GND。
实验程序如下:
#include "stc15.h"
void main()
{
P11 = 0; // 初始设置P1.1为0 熄灭LED
while (1)
{
if(P10 == 0) // P1.0口检测到按键按下
{
P11 = !P11; // P1.1口输出取反
}
}
}
按钮按下的时候的波形图:
这里发现,按钮按下的时候并没有机械抖动,而是波形直接被拉低了,松开之后也没有抖动,波形也直接恢复了。这里我使用的是这种按钮:
那么在之前的文章《8.树莓派3B+按钮操作》中介绍的抖动是有问题了。当时在这篇文章中的抖动图:
这个图怎么说呢,在我十年前接触单片机的时候就是这么说的,现在自己有示波器了,实际测试是没有的。那么实际有没有抖动大家还是要以自己的测试为准。按钮检测代码也要以自己的实际电路和程序为准。之前我就是按照接触的别人的知识处理的,在按钮按下的时候等待20ms左右再次判断电平。
if (rpio.read(button_pin) == rpio.LOW) { // 检测到 低电平
rpio.msleep(20); // 按键消抖
if (rpio.read(button_pin) == rpio.LOW) {
rpio.write(led_pin, rpio.HIGH); // 点亮LED
}
}
在去年弄树莓派的时候就一直对这个抖动抱有怀疑,现在自己有示波器了,也就证实了之前的怀疑。还是实践出真理。
关键字:STC15W408AS 单片机 按键输入
引用地址:
5.STC15W408AS单片机按键输入
推荐阅读最新更新时间:2024-11-10 15:36
PIC 单片机应用问答14 篇
1 PIC 单片机振荡电路中如何选择晶体 对于一个高可靠性的系统设计,晶体的选择非常重要。尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因是上电时电路有足够的扰动很容易建立振荡;在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。在振荡回路中晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑谐振频点、负载电容、激励功、率温度特性、长期稳定性 2 如何判断电路中晶振是否被过分驱动? 电阻RS 常用来防止晶振被过分驱动。过分驱动晶振会渐渐损耗减少晶振的接触电镀,这将
[单片机]
51单片机驱动16*16点阵程序带原理图
下面是主程序还有一个包含文件完整版本请到 http://www.51hei.com/bbs/dpj-20624-1.html 下载 #include reg52.h #include 74HC595.h #define uchar unsigned char #define uint unsigned int uchar code table_L ={0xff,0x7f, 0xff,0xbf, 0xff,0xdf, 0xff,0xef, 0xff,0xf7, 0xff,0xfb, 0xff,0xfd, 0xff,0xfe, 0x7f,0xff, 0xbf,0xff, 0xdf,0xff,
[单片机]
单片机与控制实验(4)——步进电机原理及应用
一、实验目的和要求 了解步进电机的工作原理,学习用单片机的步进电机控制系统的硬件设计方法,掌握定时器和中断系统的应用,熟悉单片机应用系统的设计与调试方法。 二、实验设备 单片机测控实验系统 步进电机控制实验模块 Keil开发环境 STC-ISP程序下载工具 三、实验内容 编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上。 步进电机的转速分为两档,当按下S1开关时,加速旋转,速度从10转/分加速到60转/分。当松开开关时,减速旋转,速度恢复为10转/分。当按下S2开关时,按照逆时针旋转;当松开时,按照顺时针旋转。 本程序要求使用定时器中断来实现,不准
[单片机]
51单片机 使用蜂鸣器播放简单音乐
MCU型号 STC 89C52RC #include reg52.h #define RldTmr(fr) 65536 - (11059200 / 12) / (fr 1) #define FuDian(n) (n 1) / 3 //附点n分音符的换算 typedef unsigned char UCHAR; typedef unsigned int UINT; typedef unsigned long ULONG; sbit BUZZ = P1^6; UINT code noteFreq = { //中音 1-7 和高音 1-7对应的频率列表 523, 587
[单片机]
单片机C51延时时间怎样计算?
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的 单片机 为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i 0;i--) for(j=202;j 0;j--) for(k=81;k 0;k--); } 计算分析: 程序共有三层循环 一层循环n
[单片机]
PIC单片机软件模拟IIC读写例程
;I2C总线程序 ;this is eeprom read & write programm ;the special store ram unit w equ 0 f0 equ 0 rt CC equ 1 pc equ 2 f2 equ 2 f3 equ 3 f4 equ 4 ra equ 5 rb equ 6 rc equ 7 pclath equ 0ah i NTC on equ 0bh pir1 equ 0ch tmr1l equ 0eh tmr1h equ 0fh t1con equ 10h tmr2 equ 11h t2con equ 12h sspbuf equ 13h ss
[单片机]
STM32F103系列微控制器在应用编程技术研究
引言 STM32F103系列芯片下载程序主要通过JTAG以及ISP(In-System Programming)这两种方式。其中JTAG需要专门的下载器,这种方式主要用于软件调试。 ISP是在系统编程,指的是利用STM32F103中自带的Bootloader程序,通过通信接口擦除和下载用户代码。STM32F103系列芯片中引脚BOO T0和BOOT1置位为1和0时就会进入ISP模式,但下载程序完成后需要将BOOT0和BOOT1都置为0,才能进入正常工作模式。这就使得在下载程序完成后需要设置跳线帽等机械性的操作。而一个嵌入式产品的设计不得不考虑软件部分的更新,前面介绍的两种下载方式都不适合用来做软件更新,也就不适合用在嵌入式
[单片机]
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍 (6) ADC 模块介绍
6.1.ADC 基础知识 12 位逐次逼近式模数转换器模块(ADC),可以采样来自于外部输入通道、内部输入通道的模拟信号,采样转换后,转换结果可以按照最低有效位对齐或最高有效位对齐的方式保存在相应的数据寄存器中。 6.2.GD32 ADC 外设原理 GD32 ADC 主要特性 ◼ 高性能: – ADC采样分辨率: 12位、 10位、 8位、或者6位分辨率; – 前置校准功能; – 可编程采样时间; – 数据存储模式:最高有效位对齐和最低有效位对齐; – 支持规则数据转换的DMA请求。 ◼ 模拟输入通道: – 16个外部模拟输入通道; – 1个内部温度传感器输入通道(VSENSE); – 1个内部参考电压输入通道(VREFINT
[单片机]