• 大小: 281KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 矩阵键盘  

资源简介

例LY-K4矩阵键盘程序

资源截图

代码片段和文件信息

/***************************************************************************
标题: 4*4键盘程序
效果: 按键盘,数码管显示键号
工作于:LY5A-L2A开发板
作者: 林洋电子-单片机
网站: lydz8.taobao.com
说明: 板使用12M晶振
******************************************************************************/
#include 
#include 

#define KEY4_4 P2

//引脚定义:
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)

sbit SPK=P1^5; //蜂鸣器
sbit JDQ=P1^4; //继电器


//变量定义:
code unsigned char table[]=
{0xc00xf90xa40xb00x990x920x820xf80x800x90};
//表:共阳数码管 0-9 

unsigned char l_posit=2; //显示位置

code unsigned char key_tab[17]={0x000xee0xde0xbe0x7e
0xed0xdd0xbd0x7d
0xeb0xdb0xbb0x7b
0xe70xd70xb70x77};
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12
// 13 14 15 16

unsigned char l_key=0x0; //定义变量,存放键值
unsigned char l_keyold=0xFF; //做为按键松开否的凭证

//函数声明:
void ReadKey(void);    //扫描键盘 获取键值,并将键值重新编码
void display(unsigned int da);//定义显示函数,参数为显示内容
void delay(unsigned int timer); 

//主函数,C语言的入口函数:
void main(void)
{
while(1){
ReadKey(); //调用键盘扫描
display(l_key); //输出显示获取的键号

if(l_key==1) //按1键继电器启动
JDQ=0;
if(l_key==2)
JDQ=1; //按2键继电器关闭
}
}

//扫描键盘 获取键值
void ReadKey(void) //分三个部份来理解,
{
unsigned char ikey;

//**************第一部份,扫描读取键值******************************/
key=0xff; //设定初值
KEY4_4=0xfe; //第一行扫描
if(KEY4_4!=0xfe)
key=KEY4_4;

KEY4_4=0xfd; //第二行
if(KEY4_4!=0xfd)
key=KEY4_4;

KEY4_4=0xfb; //第三行
if(KEY4_4!=0xfb)
key=KEY4_4;

KEY4_4=0xf7; //第四行
if(KEY4_4!=0xf7)
key=KEY4_4;

KEY4_4=0XFF; //复位接口

/****************第二部份,检测是否干扰或无按键按下********************/
if (key==0xff){ //如果读取不到接口的值
l_keyold=0xff;
SPK=1; //按键有松开关闭蜂鸣器
return;
}
else
SPK=0; //否则打开蜂鸣器,继续处理

/****************第三部份,检测是否新按键按下,获取新的键盘编码值*******/
if(l_keyold!=key){ //检测是否为新的键被按下
l_keyold=key; //保存键码做为下次检测
for(i=0;i<17;i++){ //查表获得相应的键号存放l_key变量中
if (key==key_tab[i]){
l_key=i;
break;
}
}
}
//转换的键号放于l_key变量中,主程序就可以检测此变量做相应外理
}  

//显示函数,参数为显示内容
void display(unsigned int da)
{
P0=0XFF; //
da=da%10000;
switch(l_posit){
case 0: //选择千位数码管,关闭其它位
SMG_q=0;
SMG_b=1;
SMG_s=1;
SMG_g=1;
P0=table[da/1000]; //输出显示内容
break;
case 1: //选择百位数码管,关闭其它位
SMG_q=1;
SMG_b=0;
SMG_s=1;
SMG_g=1;
P0=table[da%1000/100];
break;
case 2: //选择十位数码管,关闭其它位
SMG_q=1;
SMG_b=1;
SMG_s=0;
SMG_g=1;
P0=table[da%100/10];
break;
case 3: //选择个位数码管,关闭其它位
SMG_q=1;
SMG_b=1;
SMG_s=1;
SMG_g=0;
P0=table[da%10];
break;
}
l_posit++; //每调用一次将轮流显示一位
if(l_posit>3)
l_posit=2; //从2开始,表示只显示后两位
}

//延时子函数
void delay(unsigned int timer){
while(timer--);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        191  2012-11-12 11:12  例LY-K4矩阵键盘程序\lhj.plg

     文件       1859  2009-08-24 10:25  例LY-K4矩阵键盘程序\lhj.Uv2

     文件       3498  2012-11-15 17:53  例LY-K4矩阵键盘程序\l_key.c

     文件       5169  2012-11-12 11:10  例LY-K4矩阵键盘程序\l_key.OBJ

     文件         48  2012-11-12 11:10  例LY-K4矩阵键盘程序\lhj.lnp

     文件       4879  2012-11-12 11:10  例LY-K4矩阵键盘程序\lhj

     文件       1607  2012-11-12 11:10  例LY-K4矩阵键盘程序\lhj.hex

     文件       1012  2012-11-12 11:11  例LY-K4矩阵键盘程序\lhj.Opt

     文件     151830  2012-06-19 15:36  LY-K4矩阵键盘使用说明.pdf

     文件     130865  2012-11-15 17:55  LY-K4短阵键盘连接参考图.jpg

     目录          0  2011-11-25 21:24  例LY-K4矩阵键盘程序

----------- ---------  ---------- -----  ----

               300958                    11


评论

共有 条评论