注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
AT89C51王飞的个人空间 https://home.eeworld.com.cn/space-uid-481742.html [收藏] [复制] [分享] [RSS]
日志

驱动矩阵按键

已有 676 次阅读2013-11-15 23:09 |个人分类:驱动|

#include<reg52.h>
//将有符变量变成无符变量
#define uint unsigned int  
#define uchar unsigned char
/*************************************************************
//Function:delay some time
//Auther:wangfei
//Time:2012.11.12
//Return:void
**************************************************************/
void delay(uchar temp) //1MS延时
{
uint i;
for(i=0;i<120;i++)
{
temp--;
}
}
/*************************************************************
//Function:Get the key's valaue
//Auther:wangfei
//Time:2012.11.12
//Return:uint
**************************************************************/
uint keyscan()//键盘扫描
{
uchar tempx; //tempx用于存储列扫描的键值
uchar tempy;//tempy 用于存储行扫描的键值
P2=0XF0;  //读取P2口的原始值
tempx=P2&0XF0; //当有按键按下时存下按键的行键值
if(tempx!=0xf0)//是否有按键按下?
{
delay(10);//消抖
if(tempx!=0xf0) //确认有按键俺下
{
tempx=P2&0XF0;//存储列扫描的键值
P2=tempx|0x0f;//输出P2的键值
tempy=P2&0X0F; //存储行扫描的键值
return (tempx+tempy);//输出P2口的键值
}
}
return 0xff;  //否则输出全“1”。
}
/*************************************************************
//Function:main
//Auther:wangfei
//Time:2012.11.12
//Return:void
**************************************************************/
void main()
{
uint KEY;
KEY=keyscan();//键盘扫描函数
switch(KEY)
{ /*由LED灯显示按键按下的键值*/
case 0x77:P1=0X00;break;
case 0Xee:P1=0X01;break;
case 0Xed:P1=0X02;break;
case 0Xeb:P1=0X03;break;
case 0Xe7:P1=0X04;break;
case 0Xde:P1=0X05;break;
case 0Xdd:P1=0X06;break;
case 0Xdb:P1=0X07;break;
case 0Xd7:P1=0X08;break;
case 0Xbe:P1=0X09;break;
case 0Xbd:P1=0X0A;break;
case 0Xbb:P1=0X0B;break;
case 0Xb7:P1=0X0C;break;
case 0X7e:P1=0X0D;break;
case 0X7d:P1=0X0E;break;
case 0X7b:P1=0X0F;break;
default: P1=0X10;
}
}
全部作者的其他最新日志
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章