基于51单片机的矩阵按键

   日期:2020-10-08     浏览:93    评论:0    
核心提示:矩阵按键数码管选用芯片AT89S52功能:16个矩阵按键分别对应0~F,在数码管显示。#include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;u16 i,j;u16 k=0;#define jk P1#define smg P0u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0&

矩阵按键数码管

选用芯片AT89S52
功能:16个矩阵按键分别对应0~F,在数码管显示。

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

u16 i,j;
u16 k=0;
#define jk P1
#define smg P0
u8 code smgduan[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};	 //数码管显示0-F

void delayms(u16 ms)			  //毫秒延时
{ 
	for(i=0;i<ms;i++)
	{ 
		for(j=115;j>0;j--);
	}
}

void key_scan()										//按键扫描
{ 
	jk=0xf0;									   //先给行和列分别赋值高低电平,这样按下后才能检测到
	if(jk!=0xf0)
	{ 
		delayms(20);
		if(jk!=0xf0)
		{ 
			jk=0xf0;
			switch(jk)							   //先扫描确定是哪一列
			{ 
				case(0xe0):k=0;break;
				case(0xd0):k=1;break;
				case(0xb0):k=2;break;
				case(0x70):k=3;break;
			}
			jk=0x0f;
			switch(jk)							   //再确定是哪一行,由此确定具体按键
			{ 
				case(0x0e):k=k;break;
				case(0x0d):k=k+4;break;
				case(0x0b):k=k+8;break;
				case(0x07):k=k+12;break;
			}	
		}
	}	
}

void main()
{ 
	P2=0xfe;
	while(1)
	{ 
		key_scan();
		smg=smgduan[k];	
	}
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服