普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4077|回复: 5

普中51-单核A3 《矩阵按键》课程操作无反应

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2021-1-3 23:23:16 | 显示全部楼层 |阅读模式
1金钱
在学习普中单片机开发板,矩阵按键的课程中,照这课程的代码写了程序,下载到板上操作按键没有反应,编译也没出错,不知哪里出了问题,求大神指导!


代码如下:
#include "reg52.h"


typedef unsigned char u8;                  
typedef unsigned int u16;               


#define GPIO_DIG P0
#define GPIO_KEY P1

u8 KeyValue;

u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
                                         0x83,0xc6,0xa1,0x86,0x8e};//共阴

void delay(u16 i)
   {
        while(i--);
        }


void KeyDown(void)
{
   char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
        {
           delay(1000);
           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=0X0F;
                         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))
                       delay(100);
                           a++;
           }
        }
}
void main()
{

           {
                 KeyDown();
                 GPIO_DIG=~smgduan[KeyValue];
           }
}

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有3人回答

回复

使用道具 举报

27

主题

337

帖子

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 2021-1-4 08:30:05 | 显示全部楼层
下载对应例程程序呢?
回复

使用道具 举报

20

主题

1344

帖子

8372

积分

论坛元老

Rank: 8Rank: 8

积分
8372
发表于 2021-1-6 15:35:15 | 显示全部楼层
用这个,老普中的:
#include "reg52.h"


typedef unsigned char u8;                  
typedef unsigned int u16;               


#define GPIO_DIG P0
#define GPIO_KEY P1

u8 KeyValue;

u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
                                         0x83,0xc6,0xa1,0x86,0x8e};//共阴
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--);
}


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++;
                        }
                }
        }
}
void main()
{
while (1)
           {
                 KeyDown();
                 GPIO_DIG=~smgduan[KeyValue];
           }
}


回复

使用道具 举报

0

主题

1

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2021-2-14 23:26:00 | 显示全部楼层
admin 发表于 2021-1-4 08:30
下载对应例程程序呢?

怎样才可以按按钮后单个数码管显示从1到3
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-20 02:08 , Processed in 0.088707 second(s), 35 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表