[PIC®/AVR®/dsPIC®产品] 我写了个矩阵键盘程序,没按下却显示按下,内有原理图.....

[复制链接]
1859|16
 楼主| 培风 发表于 2015-11-12 15:40 | 显示全部楼层 |阅读模式
这是原理图,现在问题是程序已启动没有按键按下,直接就进了IF的循环,最后在松手检测的while里做死循环,找了半天发现一开始什么都不按,就把PORTC变成了0xf8(1111 1000),后面3个莫名其妙被拉低了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 培风 发表于 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 | 显示全部楼层
老感觉你的硬件图哪里有问题。
 楼主| 培风 发表于 2015-11-12 16:32 | 显示全部楼层
songchenping 发表于 2015-11-12 16:26
老感觉你的硬件图哪里有问题。

现在可以检测到一半的按键,另一半由于RC0 RC1 RC2莫名其妙被拉低导致检测不到 感觉应该是硬件的问题
songchenping 发表于 2015-11-12 19:07 | 显示全部楼层
培风 发表于 2015-11-12 16:32
现在可以检测到一半的按键,另一半由于RC0 RC1 RC2莫名其妙被拉低导致检测不到 感觉应该是硬件的问题 ...

你的SCANO0~6的初始状态不能确定啊
 楼主| 培风 发表于 2015-11-13 08:20 | 显示全部楼层
songchenping 发表于 2015-11-12 19:07
你的SCANO0~6的初始状态不能确定啊

程序第一句PORTA=0xdf;不是设置了SCANO0-6的状态么
efen 发表于 2015-11-14 14:46 | 显示全部楼层
这硬件有问题,同一行怎么区分出不同列的键按下?
gmm2015 发表于 2015-11-14 15:42 | 显示全部楼层
看看是不是硬件问题,调试软件的时候最忌讳有硬件问题
 楼主| 培风 发表于 2015-11-16 15:05 | 显示全部楼层
gmm2015 发表于 2015-11-14 15:42
看看是不是硬件问题,调试软件的时候最忌讳有硬件问题

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

恭喜,离成功有近了一步。
软件初始化不正确导致异常是软硬联调过程中常出的错误。
 楼主| 培风 发表于 2015-11-16 15:21 | 显示全部楼层
gmm2015 发表于 2015-11-16 15:16
恭喜,离成功有近了一步。
软件初始化不正确导致异常是软硬联调过程中常出的错误。 ...

谢了,现在再弄I2C了,把取到的键值通过I2C传到STM32上,请问你对I2C了解么?
gmm2015 发表于 2015-11-16 15:25 | 显示全部楼层
培风 发表于 2015-11-16 15:21
谢了,现在再弄I2C了,把取到的键值通过I2C传到STM32上,请问你对I2C了解么? ...

STM32的硬件I2C不怎么好用。我之前的项目中用的软件模块I2C来做的。
 楼主| 培风 发表于 2015-11-16 15:36 | 显示全部楼层
gmm2015 发表于 2015-11-16 15:25
STM32的硬件I2C不怎么好用。我之前的项目中用的软件模块I2C来做的。

恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是先发送接收地址在发送数据,从机的地址设置好就行?我被从机地址和发送地址弄糊涂了
gmm2015 发表于 2015-11-16 16:07 | 显示全部楼层
培风 发表于 2015-11-16 15:36
恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是 ...

先看下IIC协议,了解这个总线到底是如何通讯的。协议里面有详细的介绍。可以边看协议边看代码,看下代码是如何一步一步实现IIC的。
蛋蛋的忧伤oo 发表于 2015-11-17 17:05 | 显示全部楼层
我们公司专业提供:方案选型→样片提供→开发工具→PCB印制→元器件采集→SMT焊接→组装调试的一站式电子产品采购    希望能帮助到各位朋友!
有需要的请加联系QQ:2850173406
蛋蛋的忧伤oo 发表于 2015-11-23 08:59 | 显示全部楼层
培风 发表于 2015-11-16 15:36
恩 STM32的我用的原子的那个模拟I2C的程序,但从机那个用PIC的硬件I2C,从机发送键值给STM32,从机是不是 ...

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

4

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部