实物2操作:stc8a8k按键使用

Posted XGLIYOUQUAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实物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;			
			}
		}
		
		else 	if(key1==0)
		{
			delay1ms(15);
			if(key1==0)
			{
				key0flag=0;
				key1flag=1;
				key2flag=0;
				key3flag=0;			
			}
		}
		
			else 	if(key2==0)
		{
			delay1ms(15);
			if(key2==0)
			{
				key0flag=0;
				key1flag=0;
				key2flag=1;
				key3flag=0;			
			}
		}
		
			else 	if(key3==0)
		{
			delay1ms(15);
			if(key3==0)
			{
				key0flag=0;
				key1flag=0;
				key2flag=0;
				key3flag=1;			
			}
		}
		
		//根据旗帜进行判断执行不同的LED工作模式
		if(key0flag==1)
		{
			LED0=0;LED1=0;
		}
		else 	if(key1flag==1)
		{
			LED0=0;LED1=1;
		}
		else 	if(key2flag==1)
		{
			LED0=1;LED1=0;
		}
		else 	if(key3flag==1)
		{
			LED0=1;LED1=1;
		}
			
	}
}

以上是关于实物2操作:stc8a8k按键使用的主要内容,如果未能解决你的问题,请参考以下文章

实例7:stc8a8k定时器0,定时50ms,进入中断之后,加数20次到1秒,计算时间。

实例8:stc8a8k外部中断,计算小车运行的距离

STM32实现HID键盘

小车,测走过的距离,计算走过的时间,stc8a8k

KEIL编译器选择STC8A8K系列单片机报错未注册容量限制信息原因分析

基于鸿蒙OS的按键驱动