【实物2操作(stc8a8k按键使用)】弱龄寄事外,委怀在琴书。这篇文章主要讲述实物2操作:stc8a8k按键使用相关的知识,希望能为你提供帮助。
1、硬件连接。
下载器连接;
LED连接;
按键已经PCB里面连接好;
2、按键原理
文章图片
文章图片
文章图片
文章图片
文章图片
为什么识别按键按下之后还需要再识别一次呢。实际上为了消抖,那到底什么是消抖。根据硬件按键原理图可以知道,开发板上的按键是直接连接到IO口上的,那么如果在按键按下的时候,会发生多次循环响应。51单片机的处理速度足够整个while循环里面的程序在一瞬间来回运行若干次了,那么如果直接检测按键的话,会出现很不稳定的情况。比如说按键控制数码管上的数字依次加一,按一次就加一次。如果不进行消抖处理的话,那么在你按下去的一瞬间,数字已经加了很多次了。所以在这里用了软件延时的消抖,避免重复检测的情况。有人可能心想,为什么不弄一个硬件消抖的电路呢,那当然可以,加一个电容就可以了,也称之为电容按键,一般来说,stm32的开发板上都采用的电容按键,也就是硬件消抖,那样根本无需再用软件延时消抖了。
3、程序:
先定义引脚。
然后进行编程。注意去抖动。
编程的时候,可以给每个按键设定一个变量作为旗帜,当安下去的时候,旗帜=1进行翻转,后面可以查询到哪一个按键按下去。
4、例程。
4个按键,实现不同的LED闪烁模式。
#include<
stc8a8k.h>
sbit key0=P3^4;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit LED0=P0^0;
sbit LED1=P0^1;
void delay1ms(unsigned int tms)
{
unsigned int ix=0,iy=0;
for(ix=tms;
ix>
0;
ix--)
for(iy=0;
iy<
1350;
iy++);
}void main()
{
unsigned char key0flag=0,key1flag=0,key2flag=0,key3flag=0;
while(1)
{
//判断按键按下,去抖动,然后让对应的按键的旗帜举起来切换
if(key0==0)
{
delay1ms(15);
if(key0==0)
{
key0flag=1;
key1flag=0;
key2flag=0;
key3flag=0;
}
}elseif(key1==0)
{
delay1ms(15);
if(key1==0)
{
key0flag=0;
key1flag=1;
key2flag=0;
key3flag=0;
}
}elseif(key2==0)
{
delay1ms(15);
if(key2==0)
{
key0flag=0;
key1flag=0;
key2flag=1;
key3flag=0;
}
}elseif(key3==0)
{
delay1ms(15);
if(key3==0)
{
key0flag=0;
key1flag=0;
key2flag=0;
key3flag=1;
}
}//根据旗帜进行判断执行不同的LED工作模式
if(key0flag==1)
{
LED0=0;
LED1=0;
}
elseif(key1flag==1)
{
LED0=0;
LED1=1;
}
elseif(key2flag==1)
{
LED0=1;
LED1=0;
}
elseif(key3flag==1)
{
LED0=1;
LED1=1;
} }
}
推荐阅读
- RHEL 6.3 as 64bit 配置yum源
- 安装MYSQL错误“conflicts with file from package mysql-libs-*” 解决方法
- Linux中找不到service命令
- iGuard和NFS文件同步的解决方案
- linux tar压缩排除某个文件夹
- python实现三位的水仙花数(阿姆斯特朗数)
- JavaScript的type属性等于text/html 例子
- kubernetes 基础干货
- Python 之 map函数 及lambda函数