c语言按键松手检测,求助:关于矩阵键盘按键松手检测程序

本文档描述了一个使用单片机实现矩阵键盘输入四数字并在数码管上显示的实验中遇到的问题。主要问题是按键松手检测无法正常工作,导致程序陷入无限循环。代码中包含了按键检测和数码管显示的函数,但Proteus仿真未显示预期结果。作者通过检查按键状态和行、列信号来尝试解决松手检测问题。
摘要由CSDN通过智能技术生成

用单片机做一个从矩阵键盘输入四个数并在数码管上显示的实验,检测按键松手的程序不知道出什么问题了,检测不了,一直在循环里面跳不出来。用proteus仿真没有显示,程序在下面。

#include

#include

//--定义使用的IO口--//

#define show P0

#define GPIO_KEY P1

//--定义全局变量--//

unsigned char code number[10]={

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

0x7f,0x6f,0x3f};

//0、1、2、3、4、5、6、7、8、9、的显示码

unsigned char KeyValue;

unsigned char data1[4];

//用来存放要显示的4位数的值

void Delay10ms(unsigned int c);   //误差 0us

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

void DigDisplay(); //动态显示函数

void main(void)

{  int m=0;

while(1)

{

KeyDown();

DigDisplay();

}

}

void DigDisplay()

{

unsigned char i;

unsigned int j;

unsigned char choice ;

choice=0xEF;

for(i=0;i<4;i++)

{

choice=choice >> 1        ;

P2=choice;

show=data1[i];//发送段码

j=10;                                                 //扫描间隔时间设定

while(j--);

show=0x00;//消隐

}

}

void KeyDown(void)

{

unsigned char m=0;

while(m!=4)

{

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)

{

//Delay10ms(1);

if(GPIO_KEY!=0x0f)

{

//测试列

GPIO_KEY=0X0F;

//                         Delay10ms(1);

switch(GPIO_KEY)

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

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

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

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

//测试行

GPIO_KEY=0XF0;

//                        Delay10ms(1);

switch(GPIO_KEY)

{        case(0Xe0):        KeyValue=KeyValue;break;

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

case(0Xb0):        KeyValue=KeyValue+8;break;                        }

while(GPIO_KEY!=0XF0)         //按键松手检测

{

Delay10ms(1);

}

data1[m]=number[KeyValue];

m=m+1;

}

}

}

}

void Delay10ms(unsigned int c)   //误差 0us

{

unsigned char a, b;

for (;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、付费专栏及课程。

余额充值