在数码管上静态显示键值

#include
#define uchar unsigned char
#define uint unsigned int 
#define LL P0
#define temp P1
uchar code tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num;
void delay(uint z);
void scopkey();

void main()
{
	while(1)
	{
	   scopkey();
	   LL=~tab[num];
	}
}
	void scopkey()	  //键盘检测函数
	{
		temp=0xf0;
		if(temp!=0xf0)
		{
			delay(5);			 //消抖
			if(temp!=0xf0)
			{
			
				switch(temp)		//行列检测法区别于逐个检测法,此方法更简便;检测列
				{
					case 0x70:num=3;
					break;
					case 0xb0:num=2;
					break;
					case 0xd0:num=1;
					break;
					case 0xe0:num=0;
					break;
				}
				temp=0x0f;
				switch(temp)	   //检测行
				{
					case 0x07:num=num+12;
					break;
					case 0x0b:num=num+8;
					break;
					case 0x0d:num=num+4;
					break;
					case 0x0e:num=num;
					break;
				}
				while(temp!=0x0f)	   //松手检测
				{
					delay(5);
				}
		}
	}}
		void delay(uint z)
		{
			uint x,y;
			for(x=0;x
写这个程序颇费了一番周折,本来是用逐个检测的方法写的那个比较复杂,稍后在上传吧总是自己单片机之路的一个历程!按照单片机开发板所给的矩阵键盘电路图写的程序显示的键值并不与按键对应,因此我估计矩阵键盘的电路图给错了。我错误的程序显示的不对应的键值又重新画了一个电路图,按照新的电路图写出了上述的程序,这个程序和我的开发板键值是一一对应的!由这个程序我推测所有的检测矩阵的程序都可以用行列检测这是最简单的!

你可能感兴趣的:(在数码管上静态显示键值)