主题中讨论的其他器件:PCF8574、 C2000WARE
工具/软件:
我尝试将 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);
}
请提供帮助