OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3783|回复: 2

急求原子哥关于矩阵键盘问题,搞了一晚上了都没搞出来

[复制链接]

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2015-4-14
在线时间
2 小时
发表于 2015-5-9 00:56:18 | 显示全部楼层 |阅读模式
5金钱
一个4*4矩阵键盘,明天就要比赛了,急求原子哥尽早回哈
程序是这样的
#include <delay.h>
#include <key.h>





u8 Get_KeyValue(void)           
{
  
  u16 hcode,lcode,keycode,scode,Z=0;
      JTAG_Set(JTAG_SWD_DISABLE)  ; 
  
  RCC->APB2ENR|=1<<5;              //使能PORTD时钟
  // RCC->APB2ENR|=1<<0;              //开启辅助时钟
  
  GPIOD->CRL&=0XFFFF0000; 
  GPIOD->CRL|=0X00003333;            //PD0~PD3 推挽输出    
  
  GPIOD->CRL&=0X0000FFFF;          //PA4~PA7 输入
  GPIOD->CRL|=0X88880000;        //PA4~PA7默认上拉
GPIOD->IDR=0X00F0;
  GPIOD->ODR=0x00f0 ; //PA0~PA3置0
    hcode=(GPIOD->IDR&0x00f0);
//    if(hcode==0x00f0)
//    {Z=7;}
//    else
    delay_ms(10);
      hcode=GPIOD->IDR&0x00f0;
hcode=hcode&0x00f0;
        
  GPIOD->CRL&=0XFFFF0000; 
  GPIOD->CRL|=0X00008888;            //PA0~PA3 推挽输出    
  
  GPIOD->CRL&=0X0000FFFF;          //PA4~PA7 输入
  GPIOD->CRL|=0X33330000; GPIOD->IDR=0X000F;        //PA4~PA7默认上拉
        GPIOD->ODR=0X000F;
       
lcode=GPIOD->IDR&0X000F;
        lcode=lcode&0X000F;
        keycode=hcode|lcode;
        loop: GPIOD->ODR=0x000f;
        delay_ms(10);
        scode=GPIOD->IDR&0x000f;
        if(scode==0x000f);
        else goto loop;
        if(keycode!=0x00ff)
        {switch (keycode)
            
            {
case 0xee:return 1;break;
case 0xde:return 2;break;
case 0xbe:return 3;break;
case 0xE0:return 4;break;
case 0xD0:return 5;break;
case 0xBD:return 6;break;
case 0xEB:return 7;break;
case 0xDB:return 8;break;
case 0xBB:return 4;break;
case 0xD7:return 10;break;
case 0x7e:return 'H';break;
case 0x7d:return 'L';break;
case 0x7b:return 'Z';break;
case 0x77:return 'F';break;
case 0xB7:return 'Q';break;
 case 0xe7:return 'X';break;
         //   default:return Z;break;      
            
            
            
            
            
            
            
            }
        
        
        
        
        
        }
        
    
    
    
    
    
    
    
    
    
    
    
    

return keycode;}
    
    
 测试结果是hcode的值是对的,lcode的值一直为0.其他的都是对的,我想知道为什么lcode一直为0啊,谢啦
    
  

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
发表于 2015-5-9 10:08:05 | 显示全部楼层
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-9 23:05:04 | 显示全部楼层
多搞两个晚上试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 17:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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