当前位置:   article > 正文

【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;//锁存段选数据
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/572007
推荐阅读
相关标签
  

闽ICP备14008679号