矩阵键盘

实验板上实现如下描述:实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上一次显示0~~F,6个数码管同时静态显示即可。



不知道为啥 写不到单片机上 哪里错了。。

我和书上写的一样呀。。



#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={    
0x3f,0x06,0x5b,0x4f,    
0x66,0x6d,0x7d,0x07,    
0x7f,0x6f,0x77,0x7c,    
0x39,0x5e,0x79,0x71    
};  
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--)
;
}

void display(uchar num)  
{  
  P0=table[num];
  dula=1;
  dula=0;
}  
 
void matrixkeyscan()
{
	uchar temp,key;
//P3=0xfe;
	P3=0xfe;
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0)
	{
	delayms(10);
	temp=P3;
	temp=temp&0xf0;
		if(temp!=0xf0)
		{
		temp=P3;
		switch(temp)
		{
			case 0xee:key=0;break;
			case 0xde:key=1;break;
			case 0xbe:key=2;break;
			case 0x7e:key=3;break;
		}
		while(temp!=0xf0)
		{
		temp=P3;
		temp=temp&0xf0;
		}
		display(key);
		}
	}
///
//2P3=0xfd;
	P3=0xfd;
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0)
	{
	delayms(10);
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0)
	{
	temp=P3;
	switch(temp)
	{
		case 0xed:key=4;break;
		case 0xdd:key=5;break;
		case 0xbd:key=6;break;
		case 0x7d:key=7;break;
	}
	while(temp!=0xf0)
	{
	temp=P3;
	temp=temp&0xf0;
	}
	display(key);
	}
	}
///
//3P3=0xfb;
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key=8;break;
case 0xdb:key=9;break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
///
//5P3=0xf7;
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
///

}
  
  
  
  

void main()
{
P0=0;
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
while(1)
 matrixkeyscan();
}



///


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值