⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4×4键盘.c

📁 两个控制595的小程序。保证大家看后可以非常容易的学会使用它以及其他串进并出等器件
💻 C
字号:
/************************************************************************
*   名称:4×4键盘                                                       *
*   功能:按动4×4键盘上某个键,对应数字在LED上显示                      *
*   说明:用HC595作数显驱动,键盘由库中元件修改得到。                   *
************************************************************************/
#include<Atmel\AT89X51.H>
#include<INTRINS.H>

sbit SDI=P1^2;   //HC595的数据
sbit SRCLK=P1^3; //HC595的时钟
sbit RCLK=P1^0;  //HC595的使能

//延时函数
void delayms(unsigned int ms)
{
	unsigned int i=250;
	while(ms--)
	{
		while(i--);
		i=250;
	}
}

//键盘扫描函数
unsigned char KeyScan()
{
	unsigned char temp;
	unsigned char i;
	
	P2&=0xf0;
	if((P2&0xf0)!=0xf0)
	{
		delayms(1);
		if((P2&0xf0)!=0xf0)
		{
			for(i=0,temp=0xfe;i<4;i++,temp=(temp<<1)|1)
			{
				P2=temp;
				delayms(2);
				if((P2&0xf0)!=0xf0)
				{
					temp=P2&0xf0;
					while((P2&0xf0)!=0xf0);
					if(temp==0xe0)return(i);
					else if(temp==0xd0)return(i+4);
					else if(temp==0xb0)return(i+8);
					else if(temp==0x70)return(i+12);

				}
			}
		}
	}
	return(0xff);

}

//送出一个字节到HC595
void SendByte(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SRCLK=0;
		if(dat&0x80)
		SDI=1;
		else
		SDI=0;
		SRCLK=1;
		dat=dat<<1;
	}
}

//显示函数
void Display(unsigned char dat1,unsigned char dat2)
{
	unsigned char DisBuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x51,0x79,0x71,0x00};
	SendByte(DisBuf[dat1]);
	SendByte(DisBuf[dat2]);
	RCLK=0;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RCLK=1;
}

//键盘扫描主程序
main()
{
	unsigned char KeyValue;
	Display(0,0);
    	while(1)
	{
		KeyValue=KeyScan();

		if(KeyValue!=0xff)
		{
			Display(KeyValue/10,KeyValue%10);
		}
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -