找回密码
 立即注册
查看: 305|回复: 2

求助帖——软件屏幕I2C应答实验

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-03-14 12:08:00
已绑定手机

5

主题

48

回帖

277

积分

中级会员

积分
277
发表于 2024-12-31 08:40:40 | 显示全部楼层 |阅读模式
书接上回
求助帖—如何使用擎天柱AI8051最小系统板驱动iic0.96OLED屏幕 - OLED12864,DMA-SPI/I2C 自动刷屏,GUI/U8g2,科学计算器,红外遥控 国芯技术交流网站 - AI32位8051交流社区

之后学习了I2C通信协议,想做一个应答实验,
初始化I2C-起始-发送从机地址-接收应答并分析-指定led灯亮灭
但是不能达到效果,想不通为啥应答信号总是高电平
屏幕芯片是1315,***从机地址为0x78(不确定)***,
芯片为擎天柱AI8051u
因为目的是20届智能车竞赛,使用逐飞开源库
以下是代码,随后附上源代码

#include "zf_common_headfile.h"
#define MyI2C_SCL IO_P21
#define MyI2C_SDA IO_P20
uint8 Ack;
void MyI2C_W_SCL(uint8 Bitvalue)
{
         gpio_set_level(MyI2C_SCL,Bitvalue);
         system_delay_us(10);
}
void MyI2C_W_SDA(uint8 Bitvalue)
{
         gpio_set_level(MyI2C_SDA,Bitvalue);
         system_delay_us(10);
}
uint8 MyI2C_R_SDA(void)
{
         uint8 Bitvalue;
         Bitvalue = gpio_get_level(MyI2C_SDA);
         return Bitvalue;
}
void MyI2C_Init(void)
{
        system_delay_us(200);
        gpio_init(MyI2C_SDA, GPO, 1, GPO_OPEN_DTAIN);
        gpio_init(MyI2C_SCL, GPO, 1, GPO_OPEN_DTAIN);   
}
void MyI2C_Start(void)
{
        MyI2C_W_SDA(1);
        MyI2C_W_SCL(1);
        MyI2C_W_SDA(0);
        MyI2C_W_SCL(0);
}
void MyI2C_Stop(void)
{
        MyI2C_W_SDA(0);
        MyI2C_W_SCL(1);
        MyI2C_W_SDA(1);
}
void MyI2C_SendByte(uint8 Byte)
{
        uint8 i;
        for(i= 0;i<8;i++)
        {
                if(Byte & (0x80 >> i) == 0) MyI2C_W_SDA(0);
                else MyI2C_W_SDA(1);
                MyI2C_W_SCL(1);
                MyI2C_W_SCL(0);
        }
}
uint8 MyI2C_ReceiveByte(void)
{
        uint8 i,Byte = 0x00;
        MyI2C_W_SDA(1);
        for(i = 0; i<8 ; i++)
        {
                MyI2C_W_SCL(1);
                if(MyI2C_R_SDA() == 1) {Byte |= (0x80 >> i);}
                MyI2C_W_SCL(0);
        }
        return Byte;
}
void MyI2C_SendAck(uint8 AckBit)
{
                MyI2C_W_SDA(AckBit);
                MyI2C_W_SCL(1);
                MyI2C_W_SCL(0);
}
uint8 MyI2C_ReceiveAck(void)
{
        uint8 AckBit;
        MyI2C_W_SDA(1);
        MyI2C_W_SCL(1);
        AckBit = MyI2C_R_SDA();
        MyI2C_W_SCL(0);
        return AckBit;
}


void main()
{
    clock_init(SYSTEM_CLOCK_40M);                                // 务必保留
        debug_init();                                                                // 务必保留

    // 此处编写用户代码 例如外设初始化代码等
        MyI2C_Init();
        MyI2C_Start();
        MyI2C_SendByte(0x78);
        Ack = MyI2C_ReceiveAck();
        MyI2C_Stop();
        
        if(Ack == 0)
        {
                gpio_set_level(IO_P24,0);
        }
        else if(Ack == 1)
        {
                gpio_set_level(IO_P25,0);
        }
        else
        {
                gpio_set_level(IO_P26,0);
        }

    while(1)
        {
               
                // 此处编写需要循环执行的代码
               
    }
}



接线及实验现象

接线及实验现象

接线及实验现象



AI8051U.zip

1.63 MB, 下载次数: 28

源代码

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-12-31 09:31:26 | 显示全部楼层
从机地址不确定是不是0x78的话,试试0x7A。
先保证发送从机地址能够收到ACK信号。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-03-14 12:08:00
已绑定手机

5

主题

48

回帖

277

积分

中级会员

积分
277
发表于 2024-12-31 09:43:37 | 显示全部楼层
乘风*** 发表于 2024-12-31 09:31
从机地址不确定是不是0x78的话,试试0x7A。
先保证发送从机地址能够收到ACK信号。 ...

你好,还是不行
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:31 , Processed in 0.180570 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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