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

📄 4×4keys.c

📁 单片机键盘驱动资料
💻 C
字号:
/*********************************************************************
  Copyright (C), 2008, 湖南理工学院物理与电子信息系
  项目名称:
  文件名  :4×4keys.c
  创建人  :童耀南    版 本:0.2   日 期:2008.12.24
  功能描述:4×4矩阵键盘扫描显示程序
*********************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define keyIO P2//键盘接在P2口
sbit datain=P0^3;//移位寄存器输入接P0^3,输出接数码管
sbit clk=P0^2;//移位寄存器时钟接P0^2
uchar keyboardscan(void);
void display(uchar);
void delay(uint);
//***************************************
//主程序
//***************************************
main()
{
	unsigned char key;
	keyIO=0xf0;
    while(1)
	{
		key = keyboardscan();//键盘扫描,看是否有按键按下
		if(key!=0xff)//如果有按键按下,则显示该按键键值0~15
		{
			display(key);
			LOOP: keyIO=0xf0;
				    if((keyIO&0xf0)!=0xf0)
				 		goto LOOP;
		}

	}

}

//*******************************************
// 键盘检测程序,行列反转法
//*******************************************
uchar keyboardscan(void) 
{
	uchar temp1,temp2,num;
	keyIO=0xf0;    		//P2口赋初值
	if((keyIO&0xf0)!=0xf0)	
	//如果P2口电平不等于0xf0表示有按键按下
	{ 
		delay(10);	//延时10毫秒后再判断
		//此步为软件防抖
		if((keyIO&0xf0)!=0xf0)//再一次确定是有按键按下
		{ 
			keyIO=0xf0;//所以列线全输出1,行线全输出0
			temp1=keyIO&0xf0;//检测列号
			keyIO=0x0f;//所以列线全输出0,列线全输出1
			temp2=keyIO&0x0f;//检测行号
			temp2=temp1|temp2;
			switch(temp2)
			{   // 下面是键盘的编码识别//返回对应的键值0~15
				case 0x77: num=0;	break;
				case 0x7b: num=1;	break;
				case 0x7d: num=2;	break;
				case 0x7e: num=3;	break;
				case 0xb7: num=4;	break;
				case 0xbb: num=5;	break;
				case 0xbd: num=6;	break;
				case 0xbe: num=7;	break;
				case 0xd7: num=8;	break;
				case 0xdb: num=9;	break;
				case 0xdd: num=10;	break;
				case 0xde: num=11;	break;
				case 0xe7: num=12;	break;
				case 0xeb: num=13;	break;
				case 0xed: num=14;	break;
				case 0xee: num=15;	break;
				default:			break;
			}
			return(num);
		}
		return(0xff); //非正常按键,返回0xff
	}
	return(0xff); //如果没有按键按下,则返回0xff
}

//*******************************************
//显示函数
//*******************************************
void display(uchar num)//显示数字0~9 + a~f
{	char Data[]={0xB7,0x90,0x3D,0xB9,//0~3
				 0x9A,0xAB,0xAF,0xB0,//4~7
				 0xBF,0xBB,0xBA,0x8F,//8~b
				 0x27,0x9D,0x2F,0x2E};//c~f
	unsigned char j,temp;

	temp=Data[num];
	for(j=0;j<8;j++)
	{
		datain=temp&0x80;
		clk=0;
		clk=1;
		temp=temp<<1;
	}
}

//*******************************************
// 延时函数
//*******************************************
void delay(uint time)
{
	uint i,j;
	for(i=time;i>0;i--)
		for(j=114;j>0;j--);
}

⌨️ 快捷键说明

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