打印
[技术问答]

SC92f8003的单片机,用TM1650扩展按键,显示正常,按揵读不出

[复制链接]
1588|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
陈立业|  楼主 | 2020-6-9 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 陈立业 于 2020-6-9 12:29 编辑

sbit CLK = P1^4;        //时钟
sbit DIO = P1^5;        //数据

uchar Scan_Key(void)
        {  // 按键扫描
                uchar i;
                uchar rekey;
                Start1650();
                WrByte1650(0x49);        //读按键命令
                Ask1650();
                //DIO = 1;
                SET_SDA_IN_TM1650();        //切换为输入模式
                for(i=0;i<8;i++)
                {
                        CLK = 1;
                        rekey = rekey<<1;
                        if(DIO)
                                {
                                        rekey++;
                                }
                        Delay_5us();
                        CLK = 0;
                }
                SET_SDA_OUT_TM1650();        //切换为输出模式
                Ask1650();
                Stop1650();
                return(rekey);
        }


void SET_SDA_IN_TM1650(void)        //切换为输入模式
{
  P1CON=0x5c;  //设置为0101 1100输入模式
  P1PH=0x20;
}

void SET_SDA_OUT_TM1650(void)        //切换为输出模式
{                                                              
  P1CON=0x7c;  //设置为0111 1100强推挽模式
  P1PH=0x00;        //设置为0000 0000
}

使用特权

评论回复

相关帖子

沙发
taobaofarmer| | 2020-6-9 11:39 | 只看该作者
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读IO口高低状态的时候,首先需要置口线为输入状态然后再读,但问题就在这,转为了输入状态之后,根本就读不到从器件送出的数据位,其实对于IO应用来讲,这是一个非常重要的方面,但赛元对这个好像根本不重视,基本无视,给出的模拟I2C的例程我也用了,根本不好使,无奈之下但凡有这种应用的场合我只能仍然继续使用STM8,在IO只做输入或者只做输出的情况下才用赛元的8051,全天下的人都知道如果没有准双向模式,在读之前要转成输入模式,这个不用你告诉,问题是这个方法根本不好使,官方你就不用给出这例程那例程的,你用你的开发板,接AT24C02做个模拟I2C的读写实验,看看有没有问题,要能根据24C02给出的应答位和非应答位返回成功和失败结果的

使用特权

评论回复
板凳
陈立业|  楼主 | 2020-6-9 12:28 | 只看该作者
taobaofarmer 发表于 2020-6-9 11:39
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读I ...

我的很奇怪,外接一个导线,将其悬空。就可以了

使用特权

评论回复
地板
taobaofarmer| | 2020-6-9 13:16 | 只看该作者
这个现象你是怎么发现的?

使用特权

评论回复
评论
陈立业 2020-6-9 13:50 回复TA
示波器测波形的时候 
5
陈立业|  楼主 | 2020-6-9 13:59 | 只看该作者
taobaofarmer 发表于 2020-6-9 13:16
这个现象你是怎么发现的?

估计是芯片设计问题

使用特权

评论回复
6
陈立业|  楼主 | 2020-6-9 14:04 | 只看该作者
taobaofarmer 发表于 2020-6-9 11:39
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读I ...

赛元的技术支持也挺垃圾的,跟机器人一样。反正不管说什么都是程序的问题,更芯片无关。

使用特权

评论回复
7
taobaofarmer| | 2020-6-9 14:06 | 只看该作者
如果你说的情况属实的话,那应该是引脚上的分布电容太大

使用特权

评论回复
评论
陈立业 2020-6-9 14:56 回复TA
有什么办法可以解决这个问题吗 
8
陈立业|  楼主 | 2020-6-9 14:45 | 只看该作者
taobaofarmer 发表于 2020-6-9 14:06
如果你说的情况属实的话,那应该是引脚上的分布电容太大

是真的,导线太短都不行,

使用特权

评论回复
9
赛元MCU3| | 2020-6-9 17:50 | 只看该作者
您好,根据您的描述,我们这边无法定位问题所在,我这边私信您一个地址,您可以把板子寄过来我们这边实际测试一下。

使用特权

评论回复
10
赛元MCU3| | 2020-6-9 17:54 | 只看该作者
您好,根据您的描述,暂时无法定位问题所在,我这边私信您一个地址,您可以把板子寄过来我们这边实际测试一下。

使用特权

评论回复
11
赛元MCU3| | 2020-6-10 14:23 | 只看该作者
陈立业 发表于 2020-6-9 12:28
我的很奇怪,外接一个导线,将其悬空。就可以了

您好,如果外接一根导线就可以了,那问题可能是IO上拉能力不足导致的,您可以在TM1650的SDA口上外接一个上拉电阻试一下效果,另外通信速度可以改慢一点试试,如果方便的话最好还是把板子寄给我们,我们具体看一下,有板子的话我们比较好定位问题

使用特权

评论回复
评论
陈立业 2020-6-10 15:03 回复TA
上拉也不行 
12
qq986433936| | 2020-6-11 07:00 | 只看该作者
我用92f7250,模拟的HDQ单总线协议进行通讯,IO口也是需要不停转换状态的,批量没有任何问题。我估计你的程序问题。

使用特权

评论回复
评论
陈立业 2020-6-11 21:13 回复TA
我的是8003芯片不一样的 
13
赛元MCU3| | 2020-6-11 14:23 | 只看该作者
本帖最后由 赛元MCU3 于 2020-6-11 14:30 编辑

你好,由于手上没有TM1650,找到了一颗24C02芯片,所以写了一个SC92F8003模拟IIC主机读写24C02的程序,循环测试读写256byte数据都正常,TM1650和24C02都是IIC从机,通信方式一样,可以参考一下,如下是主循环程序和测试结果,程序功能是先将24C02地址0-255分别写入0-255,然后再读出来,第二个循环是将24C02地址0-255分别写入255-0,然后再读出来,读出来的数据通过UART发送到电脑串口助手上做显示;另外赛元全部的芯片Flash ROM都可以进行IAP操作,可以掉电保存,IAP的范围可以设置不同的大小,可以根据程序大小和需要存储的数据多少设置不同的大小,一般情况下不需要外接EEPROM,直接用赛元MCU内部的Flash ROM做EEPROM用就可以了

92F8003读写24C02.rar (95.16 KB)




使用特权

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

本版积分规则

6

主题

31

帖子

0

粉丝