我用MSP430F149控制12864的显示,当程序写进去后,只有背光亮,就是不显示要显示内容,有没有谁遇到过类似的问题,给我帮帮忙,在这里谢过了!
我刚接触单片机的时候遇到过,那时候是没给IO口加上拉电阻导致的
应该是I/O初始化错误。找个例程比较一下正确的I/O初始化
应该不是那些问题,找到了TI所给的例程,有完整的程序,但是还是不行,不知道是什么问题!
如果不是程序的问题就是硬件电路的问题了
看看IO口设置是不是正确的,MSP430F149是不是工作正常
初步怀疑时序问题,楼主你要贴代码出来,别人才能帮你,而且你要确定硬件没有接错,多检查硬件,顺便说说你硬件怎么接的,那么很容易判断问题的,不是硬件问题,就是IO设置问题,还有就是时序问题,初始化问题。
128*64的LCD有很多種,有的pin腳是不相容的,需詳細的看看LCD的Datasheet^
#include
typedef unsigned char uchar;
typedef unsigned int uint;
extern const unsigned char shuzi_table[];
#define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入
#define LCD_DataOut P4DIR=0xff //数据口方向设置为输出
#define LCD2MCU_Data P4IN
#define MCU2LCD_Data P4OUT
#define LCD_CMDOut P3DIR|=0x07 //P3口的低三位设置为输出
#define LCD_RS_H P3OUT|=BIT0 //P3.0
#define LCD_RS_L P3OUT&=~BIT0 //P3.0
#define LCD_RW_H P3OUT|=BIT1 //P3.1
#define LCD_RW_L P3OUT&=~BIT1 //P3.1
#define LCD_EN_H P3OUT|=BIT2 //P3.2
#define LCD_EN_L P3OUT&=~BIT2 //P3.2
/*******************************************
函数名称:Delay_1ms
功 能:延时约1ms的时间
参 数:无
返回值 :无
********************************************/
void Delay_1ms(void)
{
uchar i;
for(i = 120;i > 0;i--) _NOP();
}
/*******************************************
函数名称:Delay_Nms
功 能:延时N个1ms的时间
参 数:n--延时长度
返回值 :无
********************************************/
void Delay_Nms(uint n)
{
uint i;
for(i = n;i > 0;i--) Delay_1ms();
}
/*******************************************
函数名称:Write_Cmd
功 能:向液晶中写控制命令
参 数:cmd--控制命令
返回值 :无
********************************************/
void Write_Cmd(uchar cmd)
{
uchar lcdtemp = 0;
LCD_RS_L;
LCD_RW_H;
LCD_DataIn;
do //判忙
{
LCD_EN_H;
_NOP();
lcdtemp = LCD2MCU_Data;
LCD_EN_L;
}
while(lcdtemp & 0x80);
LCD_DataOut;
LCD_RW_L;
MCU2LCD_Data = cmd;
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/*******************************************
函数名称:Write_Data
功 能:向液晶中写显示数据
参 数:dat--显示数据
返回值 :无
********************************************/
void Write_Data(uchar dat)
{
uchar lcdtemp = 0;
LCD_RS_L;
LCD_RW_H;
LCD_DataIn;
do //判忙
{
LCD_EN_H;
_NOP();
lcdtemp = LCD2MCU_Data;
LCD_EN_L;
}
while(lcdtemp & 0x80);
LCD_DataOut;
LCD_RS_H;
LCD_RW_L;
MCU2LCD_Data = dat;
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/*******************************************
函数名称:Ini_Lcd
功 能:初始化液晶模块
参 数:无
返回值 :无
********************************************/
void Ini_Lcd(void)
{
LCD_CMDOut; //液晶控制端口设置为输出
Delay_Nms(50);
Write_Cmd(0x30); //基本指令集
Delay_1ms();
Write_Cmd(0x02); // 地址归位
Delay_1ms();
Write_Cmd(0x0c); //整体显示打开,游标关闭
Delay_1ms();
Write_Cmd(0x01); //清除显示
Delay_Nms(2);
Write_Cmd(0x06); //游标右移
Delay_1ms();
Write_Cmd(0x80); //设定显示的起始地址
}
/*******************************************
函数名称:Disp_HZ
功 能:控制液晶显示汉字
参 数:addr--显示位置的首地址
pt--指向显示数据的指针
num--显示字符个数
返回值 :无
********************************************/
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
uchar i;
Write_Cmd(addr);
for(i = 0;i < (num*2);i++)
Write_Data(*(pt++));
}
上面是12864的驱动程序
各位帮我看看是什么问题!
电路连接没有问题!
所用液晶是KYDZ12864M这个型号的,不过就是不显示,液晶确定是好的
我用HS12864 这个型号的液晶都可以显示,没有问题,但是换上KYDZ12864M就不行了
初步怀疑是你的延时函数的问题,造成你的时序延时很多都达不到要求。不知道楼主你的mcu的主频多少?也就是你的机器周期是多少?
你的延时函数,是for下面只有120个NOP空指令,这样就有1ms了?我很怀疑。所以楼主你将具体的机器周期多大,计算一下。
液晶对延时的要求很严格,你的延时好像有问题,或者两款液晶的硬件环境不一样,我曾经也碰到过这种现象,后来我是改的延时以及程序的时序
12864有的液晶驱动有并口方式和串口方式的选择管脚,你看看说明!
恩,可以逐个函数的输出,用示波器测试下时序是否和pdf上面说的一致,有时候计算的不准确,造成延时不够。
这中液晶屏的使用延时很重要,写命令的时候后面严一点时 这样你再试试
我用过132*65的液晶 如果写命令函数/写数据函数不对的话 也会无法显示
建议你再把这两个函数逐句执行以下 执行的命令 是不是你写的那样的