最简洁的LCD1602四线显示程序(仅需6个I/O口且为同一个p口)基于msp430
#include "io430.h"void LcdWriteCommand(char cmd);
void LcdWriteData( char data );
//P2.4--P2.7为数据口
#define CLR_RS P2OUT&=~BIT0; //RS = P2.0RW接地
#define SET_RS P2OUT|=BIT0;
#define CLR_EN P2OUT&=~BIT1; //EN = P2.1
#define SET_EN P2OUT|=BIT1;
void Delay(void)
{
int i=200;
while (i != 0)
{i--;}
}
void LCD_init(void)
{
P2SEL = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;
Delay();
LcdWriteCommand(0x38); //规定的复位操作
Delay();
LcdWriteCommand(0x38);
Delay();
LcdWriteCommand(0x38);
Delay();
LcdWriteCommand(0x28); //显示模式设置四线
LcdWriteCommand(0x80); //关闭显示
LcdWriteCommand(0x06); //写字符时整体不移动
LcdWriteCommand(0x0c); //显示开,不开光标,不闪烁
LcdWriteCommand(0x01); //显示清屏
}
void LcdWriteCommand(char cmd)
{
Delay();
CLR_RS;
P2OUT=(cmd & 0xF0); //清低四位
SET_EN; //产生使能脉冲信号
CLR_EN;
P2OUT=(cmd<<4) & 0xF0; //清高四位
SET_EN; //产生使能脉冲信号
CLR_EN;
}
void LcdWriteData( char data )
{
Delay();
SET_RS; //P2.0-->RS
P2OUT=(data & 0xF0) | BIT0 ; //清低四位
SET_EN; //产生使能脉冲信号
CLR_EN;
P2OUT=((data<<4) & 0xF0) | BIT0;
SET_EN; //产生使能脉冲信号
CLR_EN;
}
void main( void )
{
WDTCTL=WDTPW+WDTHOLD;
LCD_init();
LcdWriteCommand(0x80+0x00); //设置显示地址
LcdWriteData('t'); //地址自动累加
LcdWriteData('e');
LcdWriteData('a');
LcdWriteData('s');
LcdWriteData('h');
LcdWriteData('a');
LcdWriteData('r');
LcdWriteData('k');
while(1);
}
**********************************************************************************************************************
说明:以上程序已测,完全没问题。其中接线方法已经标注,P2口可换成其他P口,但应注意对应关系。 顶一个 MARK mark
页:
[1]