实物2操作(stc8a8k按键使用)

【实物2操作(stc8a8k按键使用)】弱龄寄事外,委怀在琴书。这篇文章主要讲述实物2操作:stc8a8k按键使用相关的知识,希望能为你提供帮助。
1、硬件连接。
下载器连接;
LED连接;
按键已经PCB里面连接好;
2、按键原理

实物2操作(stc8a8k按键使用)

文章图片

实物2操作(stc8a8k按键使用)

文章图片

实物2操作(stc8a8k按键使用)

文章图片

实物2操作(stc8a8k按键使用)

文章图片

实物2操作(stc8a8k按键使用)

文章图片

为什么识别按键按下之后还需要再识别一次呢。实际上为了消抖,那到底什么是消抖。根据硬件按键原理图可以知道,开发板上的按键是直接连接到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; } } }


    推荐阅读