89C52单片机 独立按键 示例

1、简介

实现按键控制 一个数码管显示

2、理论讲解

在这里插入图片描述

我们看到电路图,如图说是 每个按键连接一个单片机的端口。
当按键按下时对应的端口就会被置为低电平。
我们检测对应端口电平变化,来控制相应逻辑。

3.功能demo

s2 按键 控制 数码管数值增加

//数码管动态显示12345678
#include <reg52.h> //51头文件 	

#define uchar unsigned char//宏定义
#define uint  unsigned int //宏定义
sbit we = P2^7;	//位定义数码管位选锁存器接口
sbit du = P2^6;	//位定义数码管段选锁存器接口
sbit key_s2 = P3^0; //S2按键位定义

//数码管段选表
uchar code leddata[]={ 
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
 
                         };
//毫秒级延时函数
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--);
}

void main()
{
		uchar num;

		we = 1;
		P0 = 0xfe; //1111 1110 选中第一个数码管
		we = 0 ;//锁存器保存 串口电平状态
				
		while(1)
		{
		du = 1;
		P0 = leddata[num]; //显示S2按下次数 数码管显示的数字
		du = 0; 

		if(key_s2 == 0) { //判断 S2是否按下 ,按下 电平为低电平 0
		delay(5) ; //延时防抖
		if (key_s2 == 0) {
		num++;
		}

		while(!key_s2);//松手检测 ,不松手不向下执行
		}
		if (num == 10) {  //当数值超过 9时 ,循环
		num = 0;
		}
		}
}

4.效果展示

在这里插入图片描述

发布了354 篇原创文章 · 获赞 114 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/qq_27061049/article/details/101620758