51单片机的4x4矩阵键盘扫描例程(C51)
来源:互联网 发布:thinkphp商城项目源码 编辑:程序博客网 时间:2024/05/01 22:37
//4x4矩阵键盘扫描例程(C51)
//使用P0口上的LED灯显示4x4键盘扫描得到的键值
//
//广西民大物电学院 李映超 2010.4.19
#include <reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
#define key_4x4_port P3 //定义4x4键盘使用的单片机端口
uchar key; //4x4键盘扫描所得的键值保存到这里
void delayms(uint xms); //声明延时子函数
void key_4x4_scan(); //声明4x4键盘扫描子函数,得到的键值送至全局变量key
//========================================================
void main()
{
P0=0xff; //P0开机初始化
key=0xff; //键盘值开机初始化为ff(检测到的键值应为0----15)
while(1)
{
key_4x4_scan();//不停调用键盘扫描程序
P0=key; //用P0来显示键值
}
}
//========================================================
void delayms(uint xms) //延时子函数
{ uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
//---------------------------------------------
void key_4x4_scan() //4x4键盘扫描子函数,得到的键值送至全局变量key
{ uchar temp ;
key_4x4_port=0xfe; //送出最高位0电平去扫描
temp=key_4x4_port; //读出整个口的得到的值
temp=temp&0xf0; //屏蔽低4位
if(temp!=0xf0) //假如高4位不是全1
{ delayms(10); //延时消抖再读
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0) //消抖后如果再次确定高4位不是全1
{ temp=key_4x4_port; //读出此次按键的值
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=key_4x4_port;
temp=temp&0xf0;
}
}
}
key_4x4_port=0xfd;
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ delayms(10);
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=key_4x4_port;
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=key_4x4_port;
temp=temp&0xf0;
}
}
}
key_4x4_port=0xfb;
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ delayms(10);
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=key_4x4_port;
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=key_4x4_port;
temp=temp&0xf0;
}
}
}
key_4x4_port=0xf7;
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ delayms(10);
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=key_4x4_port;
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=key_4x4_port;
temp=temp&0xf0;
}
}
}
}
//---------------------------------------------
- 51单片机的4x4矩阵键盘扫描例程(C51)
- 单片机挂4X4矩阵键盘
- 4X4矩阵键盘扫描程序
- 4X4矩阵键盘扫描程序
- C51中4X4键盘扫描(非反转法)
- 4x4的矩阵键盘
- c51上跑smallrtos 之4x4 矩阵键盘任务
- C51 单片机矩阵键盘
- 键盘扫描4X4
- C51单片机矩阵键盘扫描去抖程序,新手必读
- 51单片机矩阵键盘扫描
- 4x4 矩阵键盘
- 单片机实验——4X4矩阵键盘识别技术
- 基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
- 再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
- C51矩阵键盘扫描程序
- 4X4矩阵键盘程序
- 4X4矩阵键盘1
- Delphi设计模式之单例模式(Singleton Pattern)
- 今早球赛没看成,今天所做的事就是装了下Oracle 10g而已
- 自己翻译的书(关于ASP.NET),希望对大家有帮助 (五)
- 自己翻译的书(关于ASP.NET),希望对大家有帮助 (六)
- 实现Oracle跨服务器的具体步骤
- 51单片机的4x4矩阵键盘扫描例程(C51)
- 自己翻译的书(关于ASP.NET),希望对大家有帮助 (七)
- Seventh Demo of OGRE
- C51行列键盘扫描程序
- VMWare+Windbg双机调试终于成功!
- c标准库源代码之 随机数产生算法
- 自己翻译的书(关于ASP.NET),希望对大家有帮助 (八)
- Use python win32gui for drawing
- SqlServer Function(SplitText)