This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-F280049C:LCD I2C 接口

Guru**** 2391215 points
Other Parts Discussed in Thread: PCF8574, C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1500046/launchxl-f280049c-lcd-i2c-interfacing

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:PCF8574C2000WARE

工具/软件:

我尝试将 I2C LCD 与 TI LaunchPad 连接。 有几次尝试使用例子、但似乎没有任何效果。 请查看我的代码并指导我。 我是这个领域的初学者。  我甚至不能做 LCD 背光 关和开。

#include "driverlib.h"
#include "device.h"
#include "i2c.h"
#include "i2cLib_FIFO_Polling.h"

// LCD 和 I2C 定义
#define SLAVE_ADDR 0x27 // PCF8574 I2C LCD 背包的通用地址
#define LCD_BACKGROUND 0x08 //背光控制位
#define ENABLE 0x04 // Enable 位
#define RS_DATA 0x01 //数据寄存器选择位
#define RS_command 0x00 //命令的寄存器选择位

//全局变量
uint16_t AvailableI2C_Slave[20];
uint16_t 状态;

//函数原型
void I2C_GPIO_init (void);
void I2Cinit (void);
void I2C_sendByte (uint16_t 数据);
void LCD_backlightOn (void);
void LCD_backlightOff (void);
void delay_us (uint32_t us);

void main (void)

//初始化器件时钟和外设
设备初始化();

//禁用引脚锁定并启用内部上拉电阻
device_initGPIO();

//初始化 I2C 引脚
I2C_GPIO_init ();

//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断
interrupt_initModule();

//初始化 PIE 矢量表
Interrupt_initVectorTable();

//初始化 I2C 外设
I2Cinit();

//可选:扫描 I2C 总线
uint16_t *pAvailableI2C_Slave = AvailableI2C_Slave;
状态= I2CBusScan (I2CA_BASE、pAvailableI2C_Slave);

//主循环:每1秒闪烁一次背光
while (1)

lcd_backlightOn ();
DEVICE_DELAY_US (1000000);// 1秒延迟

lcd_backlightOff ();
DEVICE_DELAY_US (1000000);// 1秒延迟
}
}

void I2C_GPIO_init (void)

GPIO_setDirectionMode (35U、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (35U、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (35U、GPIO_QUAL_ASYNC);

GPIO_setDirectionMode (37U、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (37U、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (37U、GPIO_QUAL_ASYNC);

GPIO_setPinConfig (GPIO_35_I2CA_SDA);
GPIO_setPinConfig (GPIO_37_I2CA_SCL);
}

void I2Cinit (void)

I2C_disableModule (I2CA_BASE);
I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、100000、I2C_DUTYCYCLE_50);
I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
I2C_setSlaveAddress (I2CA_BASE、SLAVE_ADDR);
I2C_setOwnSlaveAddress (I2CA_BASE、96);
I2C_disableLoopback (I2CA_BASE);
I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8);
I2C_setDataCount (I2CA_BASE、1);
I2C_setAddressMode (I2CA_BASE、I2C_ADDR_MODE_7BITS);
I2C_enableFIFO (I2CA_BASE);
I2C_clearInterruptStatus (I2CA_BASE、I2C_INT_ARB_LOST | I2C_INT_NO_ACK);
I2C_setFIFO InterruptLevel (I2CA_BASE、I2C_FIFO_TXEMPTY、I2C_FIFO_RX2);
I2C_enableInterrupt (I2CA_BASE、I2C_INT_ADDR_SLAVE | I2C_INT_ARB_LOST | I2C_INT_NO_ACK | I2C_INT_STOP_Condition);
I2C_setEmulationMode (I2CA_BASE、I2C_EMULATION_FREE_RUN);
I2C_enableModule (I2CA_BASE);
}

void I2C_sendByte (uint16_t 数据)

while (I2C_isBusy (I2CA_BASE)));//等待总线空闲

I2C_setDataCount (I2CA_BASE、1);//发送一个字节
I2C_putData (I2CA_BASE、DATA);//将数据放入 TX FIFO 中
I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
I2C_sendStartCondition (I2CA_BASE);// START

while (I2C_getStatus (I2CA_BASE)和 I2C_STS_BUS_BUSY);//等待传输

IF (I2C_getStatus (I2CA_BASE)和(I2C_STS_NO_ACK | I2C_STS_ARB_LOST))

I2C_clearStatus (I2CA_BASE、I2C_STS_NO_ACK | I2C_STS_ARB_LOST);
}

I2C_sendStopCondition (I2CA_BASE);//停止
while (I2C_isBusy (I2CA_BASE)));//等待总线清除

delay_us (50);//小延迟
}

void LCD_backlightOn (void)

//在背光打开的情况下发送虚拟数据
I2C_sendByte (0x00 | LCD_BACKGROUND | ENABLE);
delay_us (1);
I2C_sendByte (0x00 | LCD_BACKGROUND);// EN 为低电平
}

void LCD_backlightOff (void)

//在背光关闭的情况下发送虚拟数据
I2C_sendByte (0x00 | ENABLE);// EN 处于高电平
delay_us (1);
I2C_sendByte (0x00);// EN 低电平、背光关闭
}
void delay_us (uint32_t us)

DEVICE_DELAY_US (us);
}

请提供帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    高 T、

    虽然我无法查看该代码、但我可以帮助解答您可能遇到的任何具体问题。 作为起点、请使用 C2000WARE I2C 示例来验证您的软件 I2C 和 GPIO 配置 以及应用代码。  我不熟悉此特定 LCD、但请确保物理连接与两款器件的数据表相匹配。

    此致、

    Aishwarya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试查看 SCL 线是否包含 LCD 数据而不包含 LCD 数据...在使用环回时、它能够生成 CLK、该 CLK 可在 DSO 上看到、传输 LCD 数据时、CLK 不会被反射。 我需要一些帮助或链接来连接 F280049C 的 I2C LCD

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    T、

    我们没有任何专门与 LCD 连接的示例、但我们提供了可根据您的使用情况进行修改的 I2C EEPROM 示例。 快速 Google 搜索会显示有关如何 将 C2000与 LCD 配合使用的资源。 以下是一些资源(第3代 MCU 的 I2C 类似):

    CCS/TMS320F28379D:I2C 与 LCD 显示屏通信(PCF8574)

    此致、

    Aishwarya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢。 共享线程非常有用、最后我可以将数据发送到 LCD 显示屏。 请在此处找到完整的工作代码。

    //###########################################################################

    //
    //包含的文件
    //
    #include "driverlib.h"
    #include "device.h"
    #include "lcd_i2c.h"
    #include "i2cLib_FIFO_Polling.h"

    //
    //全局
    //
    #define I2C_SLAVE_ADDR 0x27
    #define I2C_NUMBYTES 1.

    uint16_t 延迟;
    uint16_t connt = 35;
    uint16_t TEN、单位;

    //将数字转换为 ASCII
    uint16_t convert (uint16_t a){
    返回 A +"0";
    }

    //将数字拆分为十位数和单位
    void dec_unID_convert (uint16_t a){
    TEN = A/10;
    单位= A % 10;
    }

    //微秒延迟
    void usDelay (uint32_t count){
    DEVICE_DELAY_US (count);
    }

    //通过 I2C 将一个字节的数据发送到 LCD
    void I2C_OUT (uint16_t DATA){
    I2C_setSlaveAddress (I2CA_BASE、I2C_SLAVE_ADDR);
    I2C_putData (I2CA_BASE、DATA);
    I2C_sendStartCondition (I2CA_BASE);
    while (!I2C_isBusBusy (I2CA_BASE));
    I2C_sendStopCondition (I2CA_BASE);
    usDelay (2000);
    }

    void LCD_command (uint16_t cmd){
    uint16_t upper =(cmd 和0xF0);
    uint16_t LOWER =((cmd << 4)& 0xF0);

    I2C_OUT (上部| 0x0C);
    I2C_OUT (上部| 0x08);
    I2C_OUT (下部| 0x0C);
    I2C_OUT (低位| 0x08);
    }

    void LCD_write (uint16_t val){
    uint16_t upper =(val 和0xF0);
    uint16_t LOWER =((val << 4)& 0xF0);

    I2C_OUT (UPPER | 0x0D);
    I2C_OUT (上部| 0x09);
    I2C_OUT (下部| 0x0D);
    I2C_OUT (下部| 0x09);
    }

    void LCD_setCursor (uint16_t row、uint16_t col){
    uint16_t addr =(row == 0)? (0x80 + col):(0xC0 + col);
    LCD_command (addr);
    }

    void init_lcd (){
    usDelay (50000);
    LCD_COMMAND (0x33);
    LCD_command (0x32);
    LCD_command (0x28);
    LCD_command (0x0C);
    LCD_command (0x06);
    LCD_command (0x01);
    usDelay (2000);
    }

    void intro(){
    LCD_setCursor (0、0);
    LCD_write ('W');LCD_write ('E');LCD_write ('L');LCD_write ('C');LCD_write ('O'); LCD_WRITE ("M");LCD_WRITE ("E");
    LCD_setCursor (1、0);
    LCD_write ("F");LCD_write ("2");LCD_write ("8");LCD_write ("0");LCD_write ("0"); LCD_write ('4');LCD_write ('9');
    LCD_setCursor (0、13);
    LCD_WRITE ('Y');LCD_WRITE ('E');LCD_WRITE ('S');
    LCD_setCursor (1、13);
    LCD_write ('N');LCD_write ('O');LCD_write ('O');
    }

    void main (void)

    //
    //初始化器件时钟和外设
    //
    设备初始化();

    //
    //禁用引脚锁定并启用内部上拉电阻。
    //
    device_initGPIO();

    GPIO_setPinConfig (GPIO_35_I2CA_SDA);
    GPIO_setPadConfig (35、GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode (35、GPIO_QUAL_ASYNC);

    GPIO_setPinConfig (GPIO_37_I2CA_SCL);
    GPIO_setPadConfig (37、GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode (37、GPIO_QUAL_ASYNC);

    I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、100000、I2C_DUTYCYCLE_33);
    I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
    I2C_enableModule (I2CA_BASE);

    init_lcd ();
    intro();

    while (1){
    DELAY++;
    如果(延迟> 20000){
    DEC_UNID_CONVERT (连续);
    LCD_setCursor (0、10);
    LCD_write (convert (ten));
    LCD_write (convert (unit));

    LCD_setCursor (1、10);
    LCD_write (convert (unit));
    LCD_write (convert (ten));

    延迟= 0;
    connt--;
    if (connt =0) connt = 35;
    }
    }
    }