您的位置 首页 传感器

4*4矩阵键盘模块程序的调用

产生.lib文件的方法:选择工程——目标target属性——输出——产生库文件*.lib,修改完后,编译一下程序,无措后,就在工

发生.lib文件的办法:挑选“工程”——“方针target特点”——“输出”——发生库文件*.lib,修正完后,编译一下程序,无措后,就在工程目录下发生一个.lib文件,届时要用到这个模块程序时,直接把.c和.lib文件拷贝到地点的目录下,再把.c的文件加载到工程文件里就OK了。

/*
***************************************************************************************
摘 要: 4*4小键盘模块程序,供今后其他程序调用.其间P2口高四位接键盘列,P2口低四位接键盘行,
版 本: V1.0
完结日期: 2008.4.28
作 者: ZHOUSFE
***************************************************************************************
修正日期: 2008.5.6
版 本: V1.2
****************************************************************************************
*/

#i nclude
#define uchar unsigned char
#define keyport P2
//uchar code seg[16]=

{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E}; //0~f,

共阳极
uchar code keycode[16]=

{0xEE,0XDE,0XBE,0X7E,0XED,0XDD,0XBD,0X7D,0XEB,0XDB,0XBB,0X7B,0XE7,0XD7,0XB7,0X77};//待查询的

键码值

/*
*******************************************************************************************
函数称号:delay()
功用描绘:延时ms个奇妙
进口参数:unsigned int ms
出口参数:无
*******************************************************************************************
*/

void delay(unsigned int ms)
{
unsigned char a;
while(!ms–)
for(a=0;a<124;a++);
}

/*
*******************************************************************************************
函数称号:keyscan()
功用描绘:键盘扫描程序,使用行扫描方法,得到键值
进口参数:无
出口参数:扫描得到的键值~((~sm)+(~fh))
*******************************************************************************************
*/

uchar keyscan(void)
{
uchar sm; //存放行扫描代码,该函数的回来值的低四位
uchar fh; //该函数的回来值的高四位
keyport=0xf0;
if((keyport&0xf0)!=0xf0) //判别是否有按键按下
{
delay(2); //去颤动延时(1~10ms)
if((keyport&0xf0)!=0xf0)
{
sm=0xfe; //行扫描初值
while((sm&0x10)!=0)
{
keyport=sm;
if((keyport&0xf0)!=0xf0) //若本行有键按下,则履行读取键值信息
{
fh=(keyport&0xf0)|0x0f;
return(~((~sm)+(~fh))); //回来扫描的键值
}
else sm=(sm<<1)|0x01; //若本行没有键按下,则扫描下一行
}
}
}
return 0xff; //若没有按键按下,则回来0xff
}

/*
*******************************************************************************************
函数称号:getkey()
功用描绘:将扫描得到的键值转化为对应的0~f
进口参数:无
出口参数:显现的数字0~f
*******************************************************************************************
*/

uchar getkey()
{
uchar key;
uchar temp;
uchar j;
while(1)
{
key=keyscan();
delay(2);
for(j=0;j<16;j++)
{
if(key==keycode[j]) //经过查询方法,得到按下的按键值
{
temp=j; //按键值先保存于temp中
if(key==0xff) //若没有按下下一个键,则一向显现上一个键值
{
return temp;
}
else
{
return j;
temp=j; //更新temp里的值
}
}
}
}
}
/*
*******************************************************************************************
测试用函数
*******************************************************************************************
*/
/*void main(void)
{
uchar ch;
P3&=0xfe;
while(1)
{
ch=getkey();
P0=~seg[ch]; //P0口接数码管
}
}*/

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/266162.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部