工具/软件: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;
}