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

📄 ex.c

📁 AT89S52单片机 程序 矩阵键盘
💻 C
字号:
//****************Copyright (c)*************
//         成都麟鑫科技有限责任公司
//         http://www.linxinpro.com
//******************************************
/*2007年11月19日
  矩阵键盘试验及数码管移位显示试验
  按键输入0~F的数据
  数码管动态移位显示
  通过改变time变量可以改变动态显示效果
  采用逐行扫描法实现矩阵键盘输入
  */
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code tab1[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~F字形代码
uint data1=0,data2=0,data3=0,data4=0;time=100;//全局变量
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2; 
sbit P1_3=P1^3;
void delay(uint tx);//延时程序
void keys();		//判断键值子程序
void skeys();		//扫描键盘子程序
void show(uint tx1,uint tx2,uint tx3,uint tx4);//数据显示子程序
void main () //主程序
{
	uint i;
	P1_3=1;//初始化数码管控制位
	P1_2=1;
	P1_1=1;
	P1_0=1;
	while(1)
	{
		skeys();//扫描键盘
		show(data1,data2,data3,data4);//显示数据
	}
}
/*判断键值*/
void keys()
{
	P0=0xef;	//判断是否为第一行按键按下
	if(P0<0xef)
	{
	    data4=data3;//数据移位操作
		data3=data2;
		data2=data1;
		if(P0==0Xee)
			data1=0;
		if(P0==0xed)
			data1=1;
		if(P0==0xeb)
			data1=2;
		if(P0==0xe7)
			data1=3;			
		while(P0!=0xef)
			show(data1,data2,data3,data4);//等待按键断开
	}
	P0=0xdf;    //判断是否为第二行按键按下
	if(P0<0xdf)
	{
	    data4=data3;//数据移位操作
		data3=data2;
		data2=data1;
		if(P0==0Xde)
			data1=4;
		if(P0==0xdd)
			data1=5;
		if(P0==0xdb)
			data1=6;
		if(P0==0xd7)
			data1=7;
		while (P0!=0xdf)
			show(data1,data2,data3,data4);//等待按键断开
	}
	P0=0xbf;	//判断是否为第三行按键按下
	if(P0<0xbf)
	{
        data4=data3;//数据移位操作
		data3=data2;
		data2=data1;
		if(P0==0Xbe)
			data1=8;
		if(P0==0xbd)
			data1=9;
		if(P0==0xbb)
			data1=10;
		if(P0==0xb7)
			data1=11;
		while (P0!=0xbf)
			show(data1,data2,data3,data4);//等待按键断开
	}
	P0=0x7f;	//判断是否为第四行按键按下
	if(P0<0x7f)
	{
		data4=data3;//数据移位操作
		data3=data2;
		data2=data1;
        if(P0==0X7e)
			data1=12;
		if(P0==0x7d)
			data1=13;
		if(P0==0x7b)
			data1=14;
		if(P0==0x77)
			data1=15;
		while (P0!=0x7f)
			show(data1,data2,data3,data4);//等待按键断开
	}
}
/*扫描矩阵键盘*/
void skeys()
{
	uint j=0;
	P0=0x0f;
	if(P0<0x0f)
	{
		for(j=0;j<20;j++)
			show(data1,data2,data3,data4);//软件消除抖动
		if(P0<0x0f)
			keys();
	}
}
/*延时子程序*/
void delay(uint tx)
{
	uint x=tx;
	do
		x--;
	while(x>1);
}
/*显示按键键值*/
void show(uint tx1,uint tx2,uint tx3,uint tx4)
{
	P2=tab1[tx1];
	P1_0=0;
	delay(time);
	P1_0=1;
	P2=tab1[tx2];
	P1_1=0;
	delay(time);
	P1_1=1;
	P2=tab1[tx3];
	P1_2=0;
	delay(time);
	P1_2=1;
	P2=tab1[tx4];
	P1_3=0;
	delay(time);
	P1_3=1;
}

⌨️ 快捷键说明

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