当前位置: 代码迷 >> 单片机 >> 51单片机第四弹-矩阵键盘
  详细解决方案

51单片机第四弹-矩阵键盘

热度:119   发布时间:2016-04-28 14:47:46.0
51单片机第四弹---矩阵键盘

原理图:

              

   原理:

              

和独立键盘相似

/******************************************************************************** 实 验 名		 : 矩阵键盘实验* 使用的IO	     : 数码管使用P0 矩阵键盘使用P3* 实验效果       : 显示独立键盘的按键值* 注    意		 :*******************************************************************************/#include <reg52.h>#include <intrins.h>#define GPIO_LED P2#define GPIO_DIG P0#define GPIO_KEY P1#define uint unsigned int#define uchar unsigned charsbit K1=P3^1;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar KEY_VALUE;unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void Delay10ms();void KeyDown();void main(){	LSA=0;LSB=0;LSC=0;	while(1)	{		KeyDown();		GPIO_DIG=DIG_CODE[KEY_VALUE];	}}void Delay10ms()  {      uchar i=38,j=130;      while(i--)          while(j--);  }  void KeyDown(){		char n=0;	GPIO_KEY=0x0f;	if(GPIO_KEY!=0x0f)	{		Delay10ms();		if(GPIO_KEY!=0x0f)		{			GPIO_KEY=0x0f;			switch(GPIO_KEY)			{				case(0x07):KEY_VALUE=0;break;				case(0x0b):KEY_VALUE=1;break;				case(0x0d):KEY_VALUE=2;break;				case(0x0e):KEY_VALUE=3;break;			}			GPIO_KEY=0xf0;			switch(GPIO_KEY)			{				case(0x70):KEY_VALUE+=0;break;				case(0xb0):KEY_VALUE+=4;break;				case(0xd0):KEY_VALUE+=8;break;				case(0xe0):KEY_VALUE+=12;break;			}			while((n<50)&&(GPIO_KEY!=0xf0))			{				Delay10ms();				++n;			}		}	}}


  相关解决方案