采用四线驱动的方式:
#include<msp430g2553.h>
#define uchar unsigned char
#define uint unsigned int
const uchar tab_1[16]="Hello Msp430";
const uchar tab_2[16]=" 1602test ";
/*********函数声明区***********/
void lcd_dis(); // LCD显示函数
void lcd_init(); // LCD初始化函数
void write_com(uchar); // 写命令函数
void write_data(uchar); // 写数据函数
/*********主函数***********/
void main()
{
P1DIR|=BIT0+BIT1+BIT2;
P2DIR|=BIT0+BIT1+BIT2+BIT3;
lcd_init();
while(1)
{
lcd_dis();
}
}
/*********lcd显示函数******/
void lcd_dis()
{
uchar n;
write_com(0x80); // 设置光标位置
for(n=0;n<16;n++)
{
write_data(tab_1[n]);
}
write_com(0xc0); // 设置光标位置
for(n=0;n<16;n++)
{
write_data(tab_2[n]);
}
}
/*********LCD初始化函数****/
void lcd_init()
{
_delay_cycles(40000);
P1OUT|=BIT2; //LCDEN=1;
write_com(0x33); // 三次显示模式设置
_delay_cycles(5000);
write_com(0x32);
_delay_cycles(5000);
write_com(0x28); // 设置显示模式
write_com(0x08); // 关闭显示
write_com(0x01); // 显示清屏
write_com(0x06); // 地址指针及光标自动加1
write_com(0x0c); // 显示开及光标设置
_delay_cycles(5000);
}
/*********写命令函数开始*******/
void write_com(uchar com)
{
P1OUT&=~(BIT0+BIT1); //LCDRS=0; 低电平写命令
//LCDRW=0; 写有效
P1OUT|=BIT2; //LCDEN=1;
P2OUT&=~(BIT3+BIT2+BIT1+BIT0);
P2OUT|=(com>>4)&(BIT3+BIT2+BIT1+BIT0); // 命令字高4位
P1OUT&=~(BIT2); //LCDEN=0;LCD使能端置低电平
_delay_cycles(1); //delay(1);
P1OUT|=BIT2; //LCDEN=1;
P2OUT&=~(BIT3+BIT2+BIT1+BIT0);
P2OUT|=(com)&(BIT3+BIT2+BIT1+BIT0);//P2=com<<4; // 命令字低4位
P1OUT&=~(BIT2); //LCDEN=0; LCD使能端置低电平
_delay_cycles(1);
P1OUT|=BIT2; //LCDEN=1;
}
/*********写数据函数开始*******/
void write_data(uchar dat)
{
P1OUT|=BIT0; // LCDRS=1; 高电平写数据
P1OUT&=~(BIT1); // LCDRW=0; 写有效
P2OUT=dat; // 数据高4位
P1OUT&=~(BIT2); //LCDEN=0; LCD使能端置低电平
_delay_cycles(1);
P1OUT|=BIT2; //LCDEN=1;
P2OUT=dat<<4; // 数据低4位
P1OUT&=~(BIT2); // LCDEN=0; LCD使能端置低电平
_delay_cycles(1);
P1OUT|=BIT2; //LCDEN=1;
}
问题就是1602没有反应,怎么回事呢?
此帖出自
小平头技术问答
一周热门 更多>