我要发布
仪器网/ 仪器社区/ 液晶/ LCD1602 从八位数据输出转四位数据输出 要做哪些改变

LCD1602 从八位数据输出转四位数据输出 要做哪些改变

了_q759312805    2012-07-05    液晶    浏览 440 次

C编写,具体是哪些函数需要改变?我就改了初始化函数和写命令、写数据函数,但是输出屏幕空白代码如下voidLCD_Init(void)//初始化的{LCD_CTRL_DIR=0x00;//LCD控制用寄存器置为输出LCD... C编写,具体是哪些函数需要改变?我就改了初始化函数和写命令、写数据函数,但是输出屏幕空白
代码如下
void LCD_Init(void) //初始化的

{
LCD_CTRL_DIR = 0x00; // LCD控制用寄存器置为输出
LCD_DATA_DIR = 0x00; //LCD数据用寄存器也置为输出

LCD_DATA = 0x00; //清数据寄存器

DelayMS(5); //数据手册要求大于4.1ms

// 开始输出软件复位序列
LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求等待时间大于100us

LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求等待时间大于40us

LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us

LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;

LCD_Write_CMD(0x28); //显示模式设为2行,8位数据模式
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us

LCD_Write_CMD(DISP_OFF); // 关显示
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us

LCD_Write_CMD(ENTRY_INC); //设定输入方式为地址增量
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us

LCD_Write_CMD(CLR_DISP); // 清空屏幕显示
DelayMS(1) ; //数据手册要求查忙信号或者等待时间超过40us
// 复位序列结束

LCD_Write_CMD(DISP_ON); // 开启LCD显示
DelayMS(1);

}

//向LCD写指令
void LCD_Write_CMD( unsigned char LCD_CMD)
{DelayMS(1);
LCD_RS=0;
LCD_DATA &= 0x0F;
LCD_DATA |= (LCD_CMD&0xF0);
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;

LCD_CMD=LCD_CMD<<4;
LCD_DATA &= 0x0F;
LCD_DATA |= LCD_CMD&0xF0;
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
}

//向LCD写数据
void LCD_Write_Data( unsigned char LCD_CMD)
{ DelayMS(1);
LCD_RS=0;
LCD_DATA &= 0x0F;
LCD_DATA |= (LCD_CMD&0xF0);
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;

LCD_CMD=LCD_CMD<<4;
LCD_DATA &= 0x0F;
LCD_DATA |= LCD_CMD&0xF0;
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
}

精彩问答
天空空留 发布日期:2016-10-08
可以写入COM的函数,要有两个:8位总线、4位总线。
1.硬件连接时选择高4位线。
2.初始化的diyi步,要按照8位线来写入;写入的命令字的高四位,即把LCD初始化成为4位总线。
3.后续的初始化、以及以后再写入数据,都按照4位总线来写入;即:先送原来一个字节的高4位,再送低4位。
工业字符型液晶,能够同时显示16x02即32个字符。注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
被采纳
dianchi2017 发布日期:2016-02-13
Initial Program Code Example For 8051 MPU(8 Bit Interface):
;---------------------------------------------------------------------------------
INITIAL_START:
CALL DELAY40mS
MOV A,#38H ;FUNCTION SET
CALL WRINS_NOCHK ;8 bit,N=1,5*7dot
CALL DELAY37uS
MOV A,#38H ;FUNCTION SET
CALL WRINS_NOCHK ;8 bit,N=1,5*7dot
CALL DELAY37uS
MOV A,#0FH ;DISPLAY ON
CALL WRINS_CHK
CALL DELAY37uS
MOV A,#01H ;CLEAR DISPLAY
CALL WRINS_CHK
CALL DELAY1.52mS
MOV A,#06H ;ENTRY MODE SET
CALL WRINS_CHK ;CURSOR MOVES TO RIGHT
CALL DELAY37uS
;---------------------------------------------------------------------------------
MAIN_START:
XXXX
XXXX
XXXX
XXXX
.
.
.
.
;---------------------------------------------------------------------------------
WRINS_CHK:
CALL CHK_BUSY
WRINS_NOCHK:
CLR RS ;EX:Port 3.0
CLR RW ;EX:Port 3.1
SETB E ;EX:Port 3.2
MOV P1,A ;EX:Port 1=Data Bus
CLR E
MOV P1,#FFH ;For Check Busy Flag
RET
;---------------------------------------------------------------------------------
CHK_BUSY: ;Check Busy Flag
CLR RS
SETB RW
SETB E
JB P1.7,$
CLR E
RET

Initial Program Code Example For 8051 MPU(4 Bit Interface):
;
-------------------------------------------------------------------
INITIAL_START:
CALL DELAY40mS
MOV A,#38H ;FUNCTION SET
CALL WRINS_ONCE ;8 bit,N=1,5*7dot
CALL DELAY37uS
MOV A,#28H ;FUNCTION SET
CALL WRINS_NOCHK ;4 bit,N=1,5*7dot
CALL DELAY37uS
MOV A,#28H ;FUNCTION SET
CALL WRINS_NOCHK ;4 bit,N=1,5*7dot
CALL DELAY37uS
MOV A,#0FH ;DISPLAY ON
CALL WRINS_CHK
CALL DELAY37uS
MOV A,#01H ;CLEAR DISPLAY
CALL WRINS_CHK
CALL DELAY1.52mS
MOV A,#06H ;ENTRY MODE SET
CALL WRINS_CHK
CALL DELAY37uS
;-------------------------------------------------------------------
MAIN_START:
XXXX
XXXX
XXXX
XXXX
.
.
.
.
.
.
.
.
.
.
;-------------------------------------------------------------------
WRINS_CHK:
CALL CHK_BUSY
WRINS_NOCHK:
PUSH A
ANL A,#F0H
CLR RS ;EX:Port 3.0
CLR RW ;EX:Port 3.1
SETB E ;EX:Port 3.2
MOV P1,A ;EX:Port1=Data Bus
CLR E
POP A
SWAP A
WRINS_ONCE:
ANL A,#F0H
CLR RS
CLR RW
SETB E
MOV P1,A
CLR E
MOV P1,#FFH ;For Check Bus Flag
RET
;-------------------------------------------------------------------
CHK_BUSY: ;Check Busy Flag
PUSH A
MOV P1,#FFH
$1
CLR RS
SETB RW
SETB E
MOV A,P1
CLR E
MOV P1,#FFH
CLR RS
SETB RW
SETB E
NOP
CLR E
JB A.7,$1
POP A
RET
你好像没写check busy这一段,4bits传输需要更多的时间,写延时有可能时间没达到,
被采纳
芮芮190 发布日期:2012-07-06
写入COM的函数,要有两个:8位总线、4位总线。

1.硬件连接时选择高4位线;

2.初始化的diyi步,要按照8位线来写入;
  写入的命令字的高四位,即把LCD初始化成为4位总线;

3.后续的初始化、以及以后再写入数据,都按照4位总线来写入;
  即:先送原来一个字节的高4位,再送低4位。

关键是diyi步,必须按照8位总线写入。
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控