OpenEdv-开源电子网

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

急求大侠解决矩阵键盘的问题

[复制链接]

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
发表于 2012-5-9 15:42:45 | 显示全部楼层 |阅读模式

#include "exti.h"
#include "stm32f10x_lib.h"
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "Key.h"
#include "usart.h"

void Exti_Init(){
 //PC13输出低电平
 RCC->APB2ENR |=1<<4;//enable clock of PORTC
 RCC->APB2ENR|=1<<0; 
 GPIOC->CRH &= 0xff0fffff;
 GPIOC->CRH |= 0x00300000;//PC13推挽输出 m默认下拉
 GPIOC->ODR &= ~(1<<13); 
 
 //PC0中断输入
 GPIOC->CRL &= 0xfffffff0;
 GPIOC->CRL |= 0x00000008;

 GPIOC->ODR |= 1<<0;//上拉
 Ex_NVIC_Config(GPIO_C,0,1);//下降沿触发
 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
 //将中断线有PA0映射到PC0
 //GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
 //AFIO->EXTICR[0 >> 0x02] &= ~(0x0F << 0x04);
 //AFIO->EXTICR[0 >> 0x02] |= 0x01;

 AFIO->EXTICR[0] &= 0xffffff0f;
 AFIO->EXTICR[0] |= 0x00000010;
}
//中断处理函数
void EXTI0_IRQHandler(){
 u16 i = 0;
 u16 key;
 LED0 = !LED0;

 delay_ms(10);//消抖
 
 if (PCin(0) == 0)
 {
  printf("please input the number:\t");
     Key_Init();
  //按键扫描5s
  while (1)
  {
   key = Key_Scan();
   if (key <16)
   {
    printf("%d",key);
   }
   
   i++;
   if (i ==500 )
   {
    i = 0;
    break;
   }
   delay_ms(10);
  }
  
 }
 Exti_Init();
}


#ifndef __EXTI_H
#define __EXIT_H 

#include "sys.h"
void Exti_Init(void);

#endif


我是用的pc0 2 3 4 口输出 PC5  11 12 13输入,可是不知道为什么就是加上我的中断(程序如上)后显示就是白屏

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

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
 楼主| 发表于 2012-5-9 15:56:20 | 显示全部楼层
回复【楼主位】心灵:
---------------------------------
这是参考论坛上的程序自己修改的,也不知道是不是可以,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-9 16:27:13 | 显示全部楼层
回复【楼主位】心灵:
---------------------------------
不妥.
PC11,PC12和24C02共用了.可能会有影响.
做矩阵扫描,把LCD拔了,用PB口去做吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-4-29
在线时间
0 小时
发表于 2012-5-9 17:32:02 | 显示全部楼层
拔了 还怎么看效果?
1.环保数采仪监控系统?2.物联网、管网监控系统?3.水文水利监控系统?4.油烟在线监控系统.?5.智能小区水电表监控系统.?提供各种自动化监控解决方案!?有需要请联系,QQ 237324479!
回复 支持 反对

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
 楼主| 发表于 2012-5-9 19:40:53 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子老师我照者把这PC11 C 12 去掉了,就改的你的KEY.C中的代码。如此啊。咋不还是不行呢
u8 trg;
u8 cont = 0;
u8 keyData;
void keyRead()
{
keyData = (PCin(5))^0xff;
trg = keyData&(keyData^cont);
cont = keyData;
}

void Key_Init()
{

//PC0234输出


RCC->APB2ENR |=1<<4;//enable clock of ORTC
GPIOC->CRL &= 0xfff000f0;
GPIOC->CRL |= 0x00033303;//PC0234推挽输出

GPIOC->ODR |= 1<<0;//PC0上拉
GPIOC->ODR |= 1<<2;
GPIOC->ODR |= 1<<3;
GPIOC->ODR |= 1<<4;

//PC5输入
GPIOC->CRL &= 0xff0fffff;
GPIOC->CRL |= 0x00080000;

GPIOC->ODR |= 1<<5;

/* //PC 11 12 13 输入
GPIOC->CRH &= 0xff000fff;
GPIOC->CRH|= 0x00888000;

GPIOC->ODR |= 1<<11;
GPIOC->ODR |= 1<<12;
GPIOC->ODR |= 1<<13;//上拉
   */
}  
//矩阵扫面函数
u16 Key_Scan(){

GPIOC->ODR |= 1<<0;//PB0上拉
GPIOC->ODR |= 1<<2;
GPIOC->ODR |= 1<<3;
GPIOC->ODR |= 1<<4;

//PC0下拉
GPIOC->ODR &= ~(1<<0);
if (M4 == 0 )
{
//delay_ms(10);//消抖
keyRead();
if (trg == 0x1)
{
return 0;

/* else if(trg == 0x2)
{
return (1*4);
}else if (trg == 0x4)
{
return (2*4);
}else if (trg ==0x8)
{
return 3*4;
}
*/
}
//开始扫描下一行
    GPIOC->ODR |= 1<<0;//PB0上拉
GPIOC->ODR |= 1<<2;
GPIOC->ODR |= 1<<3;
GPIOC->ODR |= 1<<4;

//PC2下拉
GPIOC->ODR &= ~(1<<2);

if (M4 == 0  )
{
//delay_ms(10);//消抖

keyRead();
if (trg == 0x1)
{
return 1;

/* else if(trg == 0x2)
{
return (1+1*4);
}else if (trg == 0x4)
{
return (1+2*4);
}else if (trg == 0x8)
{
return (1+3*4);
}
 */
}

//扫描第三行
    GPIOC->ODR |= 1<<0;//PB0上拉
GPIOC->ODR |= 1<<2;
GPIOC->ODR |= 1<<3;
GPIOC->ODR |= 1<<4;

//PC3下拉
GPIOC->ODR &= ~(1<<3);

if (M4 == 0 )
{
//delay_ms(10);//消抖
keyRead();
if (trg == 0x1)
{
return 2;

/* else if(trg == 0x2)
{
return (2+1*4);
}else if (trg == 0x4)
{
return (2+2*4);
}else if (trg == 0x8)
{
return (2+3*4);
}
 */
}
//扫描第四行
    GPIOC->ODR |= 1<<0;//PB0上拉
GPIOC->ODR |= 1<<2;
GPIOC->ODR |= 1<<3;
GPIOC->ODR |= 1<<4;

//PC4下拉
GPIOC->ODR &= ~(1<<4);

if (M4 == 0  )
{
//delay_ms(10);//消抖
keyRead();
if (trg == 0x1)
{
return 3;
}
/* else if(trg == 0x2)
{
return (3+1*4);
}else if (trg == 0x4)
{
return (3+2*4);
}else if (trg == 0x8)
{
return (3+3*4);
}
 */
}
return 16;
}



回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-9 22:56:16 | 显示全部楼层
这我就不清楚了,软件仿真下了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
 楼主| 发表于 2012-5-9 23:42:53 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
扛不住了啊,在B口可以用的,而且联系上LED等的话,也亮啊,可是改成我的C口就不行了。原子老师你的板子那些口还可以让我拿来用啊,我至少需要8个口啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-10 00:43:05 | 显示全部楼层
回复【7楼】心灵:
---------------------------------
我们的板子C口接了很多外设,如果使用,有可能存在干扰.这个你要特别留意.比如IIC的.或者SPI的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-4-29
在线时间
0 小时
发表于 2012-5-10 16:00:32 | 显示全部楼层
直接就告诉他 你呀别想太多了,老老实实用B吧
1.环保数采仪监控系统?2.物联网、管网监控系统?3.水文水利监控系统?4.油烟在线监控系统.?5.智能小区水电表监控系统.?提供各种自动化监控解决方案!?有需要请联系,QQ 237324479!
回复 支持 反对

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
 楼主| 发表于 2012-5-12 10:45:28 | 显示全部楼层
回复【9楼】MartinARM:
---------------------------------回复【8楼】正点原子:
---------------------------------
那我把C口用的那些程序去掉,不占用是不是可以用呢,只要我不配置相应的C口,那不就是可以用了啊,不知道是否可以
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-12 11:43:39 | 显示全部楼层
回复【10楼】心灵:
---------------------------------
要结合电路图看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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