当前位置:   article > 正文

用51单片机矩阵键盘控制数码管显示数字_51单片机矩阵按键控制数码管

51单片机矩阵按键控制数码管

用51单片机矩阵键盘控制数码管显示数字

#include<reg51.h>//头文件
#define keys P1//宏定义矩阵键盘
#define smg P0//宏定义数码管
sbit SMGA=P2^2;//位定义
sbit SMGB=P2^3;
sbit SMGC=P2^4;
unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f
                     ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管字形码
unsigned int k;
void delay()//延时函数
{
    unsigned char a,b;
	for(a=0;a<200;a++)
	for(b=0;b<200;b++);
}
void jzjp()//矩阵键盘函数
{
	unsigned int i=0;
	//unsigned int k; 本人遇到的错误,在该函数下定义的k,导致主函数中用k时出现错误,应在整体下定义
	keys=0x0f;//行列扫描,高四位输出低电平,低四位输出高电平
	if(keys!=0x0f)//如果keys不等于该值则说明有按键按下
	{
		delay();//按键消抖
		if(keys!=0x0f)//确实按下按键,第四位不全为1
		{
			switch(keys)//列判断
			{
				case(0x07):k=0;break;//对应列按键按下时矩阵键盘对应的数,并存储于k
				case(0x0b):k=1;break;
				case(0x0d):k=2;break;
				case(0x0e):k=3;break;
			}
			keys=0xf0;
			switch(keys)//行判断
			{
				case(0x70):k=k;break;//对应行按键按下时矩阵键盘对应的数,并存储于k
				case(0xb0):k=k+4;break;
				case(0xd0):k=k+8;break;
				case(0xe0):k=k+12;break;
			}
				//扫描过程,如果case(0x07)时第一列按键按下,k=0,break跳出switch,
				//行判断,case(0x70)时第一行按键按下,k=k,跳出switch
				// 如果case(0x0b)时第二列按键按下,k=1,break跳出switch,
				//行判断,case(0xb0)时第二行按键按下,k=k+4(第一个按键向后数4个)跳出switch。。
             while((i<50)&&(keys!=0xf0))//按键总是按着不松开超过一定时间时强制退出,从新扫描显示你所按着不动的按键
			 {
			  	delay();
				i++;	
			 }
		}

	}
				
}
void main()//主函数
{
	while(1)
	{
	SMGA=0;//Y0非输出端对应的数码管显示
	SMGB=0;
	SMGC=0;
	jzjp();
	smg=table[k];//数码管显示
	}
}

  • 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
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

注:

  1. 该开发板矩阵键盘接于P1口
  2. 该程序时用矩阵键盘控制的最后一个动态数码管,3-8译码器的输入端接于P2口的2,3,4端,P0口接数码管驱动端。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/408862
推荐阅读
相关标签
  

闽ICP备14008679号