打印
[PIC®/AVR®/dsPIC®产品]

我写了个矩阵键盘程序,没按下却显示按下,内有原理图.....

[复制链接]
1555|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
培风|  楼主 | 2015-11-12 15:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这是原理图,现在问题是程序已启动没有按键按下,直接就进了IF的循环,最后在松手检测的while里做死循环,找了半天发现一开始什么都不按,就把PORTC变成了0xf8(1111 1000),后面3个莫名其妙被拉低了

键盘.png (146.25 KB )

键盘.png
沙发
培风|  楼主 | 2015-11-12 15:41 | 只看该作者
这是检测第一行的程序
        PORTA=0xdf;                        //1101 1111扫描SCANO0行
RB1=1;
        if(PORTC!=0xf8)                //有按键按下
        {
                tmp=PORTC;               
                delay(5);
RB2=1;
                if(PORTC!=0xf8) //延时后确定有按键按下
                {
                        switch(tmp)
                        {
                                case 0xdf:key_num=0x11;break;
                                case 0xef:key_num=0x12;break;
                                case 0xf7:key_num=0x13;break;
                                case 0xfb:key_num=0x14;break;
                                case 0xfd:key_num=0x15;break;
                                case 0xf0:key_num=0x16;RB0=1;break;        //fe KKE14
        //                        case 0xf8:RB1=1;break;                // 1111 1000

                        }
                        while(tmp!=0xf8)              //等待按键松手 while(tmp!=0xff)
                        {
                                tmp=PORTC;
                       
                        }
                }
        }

使用特权

评论回复
板凳
培风|  楼主 | 2015-11-12 15:43 | 只看该作者
程序可以检测到前面11 12 13这3个按键,但RC0 RC1 RC2莫名其妙被拉低,导致后面3个按键检测不出来

使用特权

评论回复
地板
songchenping| | 2015-11-12 16:26 | 只看该作者
老感觉你的硬件图哪里有问题。

使用特权

评论回复
5
培风|  楼主 | 2015-11-12 16:32 | 只看该作者
songchenping 发表于 2015-11-12 16:26
老感觉你的硬件图哪里有问题。

现在可以检测到一半的按键,另一半由于RC0 RC1 RC2莫名其妙被拉低导致检测不到 感觉应该是硬件的问题

使用特权

评论回复
6
songchenping| | 2015-11-12 19:07 | 只看该作者
培风 发表于 2015-11-12 16:32
现在可以检测到一半的按键,另一半由于RC0 RC1 RC2莫名其妙被拉低导致检测不到 感觉应该是硬件的问题 ...

你的SCANO0~6的初始状态不能确定啊

使用特权

评论回复
7
培风|  楼主 | 2015-11-13 08:20 | 只看该作者
songchenping 发表于 2015-11-12 19:07
你的SCANO0~6的初始状态不能确定啊

程序第一句PORTA=0xdf;不是设置了SCANO0-6的状态么

使用特权

评论回复
8
efen| | 2015-11-14 14:46 | 只看该作者
这硬件有问题,同一行怎么区分出不同列的键按下?

使用特权

评论回复
9
gmm2015| | 2015-11-14 15:42 | 只看该作者
看看是不是硬件问题,调试软件的时候最忌讳有硬件问题

使用特权

评论回复
10
培风|  楼主 | 2015-11-16 15:05 | 只看该作者
gmm2015 发表于 2015-11-14 15:42
看看是不是硬件问题,调试软件的时候最忌讳有硬件问题

问题解决了,仔细看了芯片手册才发现,单片机在启动的时候RC0-2被复用成其他的功能了,改成普通IO口就行了

使用特权

评论回复
11
gmm2015| | 2015-11-16 15:16 | 只看该作者
培风 发表于 2015-11-16 15:05
问题解决了,仔细看了芯片手册才发现,单片机在启动的时候RC0-2被复用成其他的功能了,改成普通IO口就行 ...

恭喜,离成功有近了一步。
软件初始化不正确导致异常是软硬联调过程中常出的错误。

使用特权

评论回复
12
培风|  楼主 | 2015-11-16 15:21 | 只看该作者
gmm2015 发表于 2015-11-16 15:16
恭喜,离成功有近了一步。
软件初始化不正确导致异常是软硬联调过程中常出的错误。 ...

谢了,现在再弄I2C了,把取到的键值通过I2C传到STM32上,请问你对I2C了解么?

使用特权

评论回复
13
gmm2015| | 2015-11-16 15:25 | 只看该作者
培风 发表于 2015-11-16 15:21
谢了,现在再弄I2C了,把取到的键值通过I2C传到STM32上,请问你对I2C了解么? ...

STM32的硬件I2C不怎么好用。我之前的项目中用的软件模块I2C来做的。

使用特权

评论回复
14
培风|  楼主 | 2015-11-16 15:36 | 只看该作者
gmm2015 发表于 2015-11-16 15:25
STM32的硬件I2C不怎么好用。我之前的项目中用的软件模块I2C来做的。

恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是先发送接收地址在发送数据,从机的地址设置好就行?我被从机地址和发送地址弄糊涂了

使用特权

评论回复
15
gmm2015| | 2015-11-16 16:07 | 只看该作者
培风 发表于 2015-11-16 15:36
恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是 ...

先看下IIC协议,了解这个总线到底是如何通讯的。协议里面有详细的介绍。可以边看协议边看代码,看下代码是如何一步一步实现IIC的。

使用特权

评论回复
16
蛋蛋的忧伤oo| | 2015-11-17 17:05 | 只看该作者
我们公司专业提供:方案选型→样片提供→开发工具→PCB印制→元器件采集→SMT焊接→组装调试的一站式电子产品采购    希望能帮助到各位朋友!
有需要的请加联系QQ:2850173406

使用特权

评论回复
17
蛋蛋的忧伤oo| | 2015-11-23 08:59 | 只看该作者
培风 发表于 2015-11-16 15:36
恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是 ...

STM32体系列单片机我们这里有! 18971386610

000.jpg (61.17 KB )

000.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

21

帖子

0

粉丝