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.

[参考译文] CCS:LCD 接口缺失字符

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/607577/ccs-lcd-interfacing-missing-characters

主题中讨论的其他器件:MSP430F2616

工具/软件:Code Composer Studio

在下面的代码中、LCD 以8位模式连接到端口4、并按照定义在中提供控制。 现在、我在这里使用了8x2 LCD 模块。 每次打开模块电源时、显示屏都会发生变化。 此外、由于 LCD 数据处于 while 循环中、现在显示屏每次都会更改。 因此、似乎存在同步损失。 代码本身似乎存在问题。 请参阅指南以减少液晶屏的随机性。

#include
#define DR P5OUT = P5OUT | BIT7 //将 RS 定义为高电平
#define CWR P5OUT = P5OUT &(~BIT7)//将 RS 定义为低电平
#define READ P5OUT = P5OUT | BIT5 //定义用于读取的读取信号 R/W = 1
#define WRITE P5OUT = P5OUT &(~BIT5)//定义写入信号 R/W = 0进行写入
#define ENABLE_HIGH P5OUT = P5OUT | BIT6 //定义使能高电平信号
#define ENABLE_LOW P5OUT = P5OUT &(~BIT6)//定义使能低电平信号

void delay (unsigned char wt);
void init (void);
void init_lcd (void);
void wr_lcd_cw (unsigned char lcd_cmd);
void wr_lcdw (unsigned char lcd_data);
void lcd_msg (unsigned char *ch);
int s;
//PIN R/W =
/*
* main.c
*

int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
init();
init_lcd();

while (1)

volatile unsigned int i;
WR_LCD_CW (0x80);
LCD_msg ("ABCDE");
WR_LCD_CW (0xC0);
LCD_msg ("Aefgh");

P1OUT ^= BIT5|BIT6|BIT7;//使用异或切换 P1.0
for (i = 0;i <= 50000;i++);


空延迟(无符号字符 wt)

unsigned int k、j;
for (k=0;k<=wt;k++)

for (j=0;j<=3000;j++);


void lcd_msg (无符号字符*ch)

while (*ch!='0')

WR_LCD_dw (*通道);
CH++;


void wr_lcd_cw (unsigned char lcd_cmd){
延迟(10);
CWR;
写入;
P4OUT=LCD_cmd;
ENABLE_HIGH;//EN=1
延迟(3);
ENABLE_LOW;//EN=0

void wr_lcdw (unsigned char lcd_data){
延迟(10);
博士;
写入;
P4OUT=LCD_DATA;
ENABLE_HIGH;//EN=1
延迟(3);
ENABLE_LOW;//EN=0

void init_lcd (void)

对于(s=0;s<=5000;s++);
WR_LCD_CW (0x30);延迟(10);// 8位模式下的 LCD
WR_LCD_CW (0x30);延迟(160);// 8位模式下的 LCD
WR_LCD_CW (0x30);延迟(160);// 8位模式下的 LCD
WR_LCD_CW (0x02);延迟(12);// 8位模式下的 LCD
WR_LCD_CW (0x38);延迟(10);// 8位模式下的 LCD
WR_LCD_CW (0x0C);延迟(10);//显示打开和光标关闭
WR_LCD_CW (0x14);延迟(10);//将数据右移1个字符
WR_LCD_CW (0xc0);延迟(10);
WR_LCD_CW (0x01);延迟(160);//清除屏幕
//lcd_content (0x02);//返回主页位置

空 init (空)

BCSCTL1 = 0xC7;
BCSCTL2 = 0x00;
BCSCTL3 = 0x20;

P1SEL=0;
P5SEL=0;
P4SEL=0;

P1DIR=0xff;
P4DIR=0xff;
P5DIR=0xff;

P1DIR |= BIT5|BIT6;//将 P1.0设置为输出方向
P4DIR = 0xFF;//将端口4设置为输出
P5DIR = 0xFF;//将端口5设置为输出
P4OUT = 0x00;
P5OUT = 0x00;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、耐受、
    如果您在 LCD 写入之间设置延迟、或在写入函数中扩展延迟、会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Cameron:

    问题再次出现。 在写之前 LCD 似乎一直很忙、但这里的延迟应该足够了、这对我来说是一个问题吗?

    void wr_lcdw (unsigned char lcd_data){
    延迟(10);//此处
    博士;
    写入;
    P4OUT=LCD_DATA;
    ENABLE_HIGH;//EN=1
    延迟(3);
    ENABLE_LOW;//EN=0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    苛刻、
    您能否分享您正在使用的 LCD /驱动器、以及如何连接它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,哈!

    如果您没有使其运行、您还可以尝试我为 HD44780编写的库。 只需单击我帖子底部的横幅。

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

    我知道延迟是问题所在。 编译器运行缓慢、有时速度快、我不知道原因是什么。  

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