【51单片机】STC89C52独立键盘实验,含c代码(6)

1.参考教程:

清翔51单片机教程

2.实现效果:

利用独立键盘的按键,控制数码管数字的变化。
在这里插入图片描述

3.基本原理

**特点:**每个按键占用一个IO口,当按键数量较多时,IO口的利用效率不高,但程序简单,适用于所需按键较少的场合。
**原理:**以按键S2为例,给P30赋逻辑1,当S2被按下的时候,由于S2左端接地,则P30输出由高电平变低电平。S2没被按下依旧输出高电平。

在这里插入图片描述

4.参考代码

#include <reg52.h>
#include <intrins.h>//标准库函数
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;	//数码管段选
sbit WE = P2^7; //数码管位选
sbit key_s2 = P3^0;//独立按键S2
sbit key_s3 = P3^1;//独立按键S3
uchar num;	 //数码管显示的值
//共阴数码管段选表0-9
uchar code tabel[]=	{0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//毫秒级延时函数定义
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--);
}
void main()//main函数自身会循环
{
	WE = 1;//打开位选锁存器
	P0 = 0XFE;//1111 1110
	WE = 0;//锁存位选数据
	while(1)
	{
		if(key_s2 == 0)
		{
			delay(20);//按键消抖(按键会有抖动影响结果)
			if(key_s2 == 0)
			{
				num++;
				if(num == 10)
					num = 0;
				while(!key_s2);//松手检测(松手后跳出循环)
			}
		}
		if(key_s3 == 0)
		{
			delay(20);//按键消抖
			if(key_s3 == 0)
			{
				num--;
				if(num == 255)
					num = 9;
	
				while(!key_s3);//松手检测
			}
		}
		//松手之后刷新显示
		DU = 1;//打开段选锁存器
		P0 = tabel[num];//0000 0110
		DU = 0;//锁存段选数据
	}
}

版权声明:本文为qq_38391994原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。