📄 4×4键盘.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 + -