主题中讨论的其他器件:MSP-TS430PZ100E、 MSP-FET
工具/软件:Code Composer Studio
您好!
我使用以下代码通过 I2C 与 TDC1000-TDC7200 EVM (MS430F5528)成功地使用了纽黑文的 LCD。
我最近购买 了 MSP-TS430PZ100E、并尝试使用 P5.5和 P5.6实现相同的效果。 但它不起作用。 通过示波器测试时、LCD 不显示任何内容、引脚也不显示任何生命体征。 我缺少什么或做了什么错? 这是代码。 (我也使用 TI 的示例代码尝试了相同的方法、但似乎没有任何结果。)
/*
* lcd.c
*
*创建日期:2015年。 12. 9.
*作者:用户
*
#include
#include
#include "lcd.h"
uint8_t firstLiny[20];
uint8_t 第二行[20];
#define LCD_I2C_PxOUT P5OUT //Port5
#define LCD_I2C_Px_IN P5IN //Port5
#define LCD_I2C_PxDIR P5DIR //Port4
#define LCD_I2C_SDA_PIN BIT5 //P5.5
#define LCD_I2C_SCL_PIN BIT6 //P5.6
/********
* ST7036i 的初始化*
(三 /
unsigned int Slave= 0x78;
unsigned int Comsend = 0x00;
unsigned int Datasend=0x40;
/*粗延迟函数。 通过更改计数器值进行调优。 *
void delay( unsigned int n ){
volatile int i;
for (; n; n-){
for (i = 0;i < 50;i++);
}
}
void data_read (void){
LCD_I2C_PxDIR &=~LCD_I2C_SDA_PIN;//悬空以准备读取
}
void data_high (void){
LCD_I2C_PxDIR &=~LCD_I2C_SDA_PIN;//浮点引脚变为高电平
延迟(5);
}
void data_low (void){
LCD_I2C_PxOUT &=~LCD_I2C_SDA_PIN;//将低电平置为有效
LCD_I2C_PxDIR |= LCD_I2C_SDA_PIN;
延迟(5);
}
void clk_high (void){
LCD_I2C_PxDIR &=~LCD_I2C_SCL_PIN;//浮点引脚变为高电平
delay(10);
}
void clk_low (void){
LCD_I2C_PxOUT &=~LCD_I2C_SCL_PIN;//将低电平置为有效
LCD_I2C_PxDIR |= LCD_I2C_SCL_PIN;
延迟(5);
}
/********* /
/********
* I2C 开始*
(三 /
void I2C_Start (void)
{
_BIC_SR_register (GIE);
P5SEL0 &=~(BIT5 | BIT6);
P5SEL1 |= BIT5 | BIT6;
CLK_HIGH ();
DATA_HIGH ();
data_low ();
clk_low ();
_bis_SR_register (GIE);
/********* /
/********
* I2C 停止*
(三 /
void I2C_Stop (void)
{
_BIC_SR_register (GIE);
data_low ();
clk_low ();
CLK_HIGH ();
DATA_HIGH ();
_bis_SR_register (GIE);
}
/********* /
/********
*通过 I2C 输出命令或数据*
(三 /
void I2C_out (unsigned char d)//I2C 输出
{
_BIC_SR_register (GIE);
int n;
for (n = 0;n < 8;n++)
{
if (d & 0x80)
{
DATA_HIGH ();
}
其他
{
data_low ();
}
CLK_HIGH ();
clk_low ();
D <<= 1;//将下一个位移入位。
}
DATA_READ();//将数据线设置为接收。
CLK_HIGH ();//时钟变为高电平等待应答。
//从机将拉低数据线以进行应答。
//while (P1IN & I2C_SDA)
while (LCD_I2C_Px_IN 和 LCD_I2C_SDA_PIN)
{
//否则切换时钟线并再次检查
clk_low ();
DATA_HIGH ();
}
clk_low ();
_bis_SR_register (GIE);
}
void init_lcd()
{
I2C_Start();
I2C_OUT (0x78);// LCD 面板的从器件地址。
I2C_OUT (0x00);//控制字节:所有以下字节都是命令。
I2C_OUT (0x38);// 8位总线,2行显示,正常指令模式。
delay(10);
I2C_OUT (0x39);// 8位总线,2行显示,扩展指令模式。
delay(10);
I2C_OUT (0x14);//偏置设置为1/5。
I2C_OUT (0x78);//对比度设置。
I2C_OUT (0x5E);//图标显示在上,BOOSTER 打开,对比度设置。
I2C_OUT (0x6D);//跟随器电路打开,放大器=1?
I2C_OUT (0x0F);//显示打开,光标关闭。
I2C_OUT (0x01);//清除显示。
I2C_OUT (0x06);//进入模式设置为光标向右移动。
delay(10);
I2C_Stop ();
}
/*向 LCD 发送“清除显示”命令。 *
void clear_display (void)
{
I2C_Start();
I2C_OUT (0x78);//面板的从器件地址。
I2C_OUT (0x00);//控制字节:所有以下字节都是命令。
I2C_OUT (0x01);//清除显示。
I2C_Stop ();
}
/********* /
/********
*将 ASCII 数据字符串发送到 LCD *
(三 /
이건 내가 만든 것 μ s
空 *** (无符号字符*文本)
{
_BIC_SR_register (GIE);
I2C_Start();
I2C_OUT (0x78);
I2C_OUT (0x40);
I2C_OUT (*文本);
I2C_Stop ();
_BIC_SR_register (GIE);
}
空显示(无符号字符*文本)
{
//_BIC_SR_register (GIE);
int n;
I2C_Start();
I2C_OUT (0x78);//面板的从器件地址。
I2C_OUT (0x40);//控制字节:后跟数据字节,数据为 RAM 数据。
for (n = 0;n < 20;n++){
I2C_OUT (*文本);
text++;
}
I2C_Stop ();
//_BIC_SR_register (GIE);
}
void MoveCursor (uint8_t NPO)
{
//_BIC_SR_register (GIE);
I2C_Start();
I2C_OUT (0x78);//面板的从器件地址。
I2C_OUT (0x00);//控制字节:所有以下字节都是命令。
I2C_OUT (0x80 + NPO);
I2C_Stop ();
//_bis_SR_register (GIE);
}
void ShowBothLines (空 ShowBothLines)
{
//_BIC_SR_register (GIE);
MoveCursor (0x00);
show (firstLine);
MoveCursor (0x40);
show (secondline);
//_bis_SR_register (GIE);
//__delay_cycles (2500);
}
/********* /
/********* /
/********* /
请帮帮我。
Sukho