实物2操作:stc8a8k按键使用

1、硬件连接。
下载器连接;
LED连接;
按键已经PCB里面连接好;
2、按键原理
实物1操作:stc8a单片机和普通51/52单片机的异同以及下载步骤(点亮一盏LED为例)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么识别按键按下之后还需要再识别一次呢。实际上为了消抖,那到底什么是消抖。根据硬件按键原理图可以知道,开发板上的按键是直接连接到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;
		}
			
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值