c语言矩阵键盘0到F,4*4矩阵键盘显示0——F的程序。大神帮忙指导下 啊

/*******************************************************************************

* 实 验 名                 : 矩阵键盘实验

* 使用的IO             : 数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3

* 实验效果       : 按矩阵键盘分别显示在数码管上面显示十六进制的0到F。

* 注    意                 :

*******************************************************************************/

#include

#define GPIO_DIG P0

#define GPIO_KEY P1

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

unsigned char code DIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned char KeyValue;

//用来存放读取到的键值

void Delay10ms();   //延时10ms

void KeyDown();                 //检测按键函数

/*******************************************************************************

* 函 数 名         : main

* 函数功能                   : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void main(void)

{

LSA=0; //给一个数码管提供位选

LSB=0;

LSC=0;

while(1)

{

KeyDown();

GPIO_DIG=DIG_CODE[KeyValue];

}

}

/*******************************************************************************

* 函 数 名         : KeyDown

* 函数功能                   : 检测有按键按下并读取键值

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void KeyDown(void)

{

char a=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)//读取按键是否按下

{

Delay10ms();//延时10ms进行消抖

if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0X0F;

switch(GPIO_KEY)

{

case(0X07):        KeyValue=0;break;

case(0X0b):        KeyValue=1;break;

case(0X0d): KeyValue=2;break;

case(0X0e):        KeyValue=3;break;

}

//测试行

GPIO_KEY=0XF0;

switch(GPIO_KEY)

{

case(0X70):        KeyValue=KeyValue;break;

case(0Xb0):        KeyValue=KeyValue+4;break;

case(0Xd0): KeyValue=KeyValue+8;break;

case(0Xe0):        KeyValue=KeyValue+12;break;

}

while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测

{

Delay10ms();

a++;

}

}

}

}

/*******************************************************************************

* 函 数 名         : Delay10ms

* 函数功能                   : 延时函数,延时10ms

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void Delay10ms(void)   //误差 0us

{

unsigned char a,b,c;

for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值