C51单片机怎么让lcd1602显示两行? 5

 我来答
硬件开发88
推荐于2017-05-16 · TA获得超过8675个赞
知道大有可为答主
回答量:1757
采纳率:84%
帮助的人:591万
展开全部
我给你写个测试程序,第一行显示A,第二行显示B

/*******************************************************************************************
* LCD1602液晶显示程序 51&AVR实验程序
*
* LCD1602液晶: 写指令;
*
* LCD1602液晶: 写数据;
*
* LCD1602液晶: 写指令和据;
********************************************************************************************/

#include "reg52.h"

sbit LCD_RS=P3^5;
sbit LCD_EN=P3^4;

#define Data_addr P0 //定义LCD1602液晶数据I口

void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/*********************************************************************************************
* 函数名称: Write_lcd1602_com(unsigned char com);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶写入指令*********************************************************************************************/
void Write_lcd1602_com(unsigned char com)
{
LCD_RS=0;
Data_addr=com;
Delay_1ms(5);
LCD_EN=1;
Delay_1ms(5);
LCD_EN=0;
}
/**********************************************************************************************
函数名称: Write_lcd1602_data(unsigned char date);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶写数据*********************************************************************************************/
void Write_lcd1602_data(unsigned char date)
{
LCD_RS=1;
Data_addr=date;
Delay_1ms(5);
LCD_EN=1;
Delay_1ms(5);
LCD_EN=0;
}
/*********************************************************************************************
* 函数名称: Init_lcd1602(void);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶指令初始化*********************************************************************************************/
void Init_lcd1602(void)
{
LCD_RS=0;
LCD_EN=0;
Write_lcd1602_com(0x38);
Write_lcd1602_com(0x0C);
Write_lcd1602_com(0x06);
Write_lcd1602_com(0x01);
}

int main(void)
{
Init_lcd1602();
Write_lcd1602_com( 0x80); //第一行显示A
Write_lcd1602_data("A");
Delay_1ms(5);
Write_lcd1602_com( 0x80 + 0x40); //第二行显示B
Write_lcd1602_data("B");
while(1);
}
做而论道
高能答主

2012-12-22 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
LCD1602,都是显示两行的。
不需要什么特殊的操作,就能显示两行。

楼主提出这样的问题,也不给出电路和语言的要求,很难回答的。

看看我的百度空间吧,有这样的程序和电路。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wrlsohu
2012-12-18 · TA获得超过139个赞
知道小有建树答主
回答量:264
采纳率:100%
帮助的人:134万
展开全部
好像是在指令六:DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心静气沉
2020-09-21
知道答主
回答量:2
采纳率:0%
帮助的人:1073
展开全部
主函数:
#include "reg52.h"
#include "lcd.h"

typedef unsigned int u16;
typedef unsigned char u8;

u8 Disp1[]="zhao meng sha bi";
u8 Disp2[]="ha ha ha ha ha ";

void main(void)
{
u8 i;
LcdInit();
if(i<40)
{
LcdWriteCom(0x80);
}
else
{
LcdWriteCom(0xc0);
}

for(i=0;i<40;i++)
{
LcdWriteData(Disp1[i]);
Lcd1602_Delay1ms(50);
}
for(i=40;i<80;i++)
{
LcdWriteData(Disp2[i-40]);
Lcd1602_Delay1ms(50);
}
while(1)
{
}

}
lcd函数:
#include "lcd.h"

void Lcd1602_Delay1ms(uint c)
{
uchar a,b;
for(;c>0;c--)
{
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}

#ifndef LCD1602_4PINS
void LcdWriteCom(uchar com)
{
LCD1602_E=0;
LCD1602_RS=0;
LCD1602_RW=0;

LCD1602_DATAPINS=com;
Lcd1602_Delay1ms(1);

LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#else
void LcdWriteCom(uchar com)
{
LCD1602_E=0;
LCD1602_RS=0;
LCD1602_RW=0;

LCD1602_DATAPINS=com;
Lcd1602_Delay1ms(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;

LCD1602_DATAPINS=com<<4;
Lcd1602_Delay1ms(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#endif

#ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)
{
LCD1602_E=0;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DATAPINS=dat;
Lcd1602_Delay1ms(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#else
void LcdWriteData(uchar dat)
{
LCD1602_E=0;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DATAPINS=dat;
Lcd1602_Delay1ms(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
LCD1602_DATAPINS=dat<<4;
Lcd1602_Delay1ms(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#endif

#ifndef LCD1602_4PINS
void LcdInit()
{
LcdWriteCom(0x38);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
//LcdWriteCom(0xc0);

}
#else
void LcdInit()
{
LcdWriteCom(0x32);
LcdWriteCom(0x28);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
#endif
头文件:
#ifndef _LCD_H_
#define _LCD_H_

//#define LCD1602_4PINS

#include "reg52.h"

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

void Lcd1602_Delay1ms(uint c);
void LcdWriteCom(uchar com);
void LcdWriteData(uchar dat);
void LcdInit();
#endif
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大漠鹰判官
2012-12-18
知道答主
回答量:55
采纳率:100%
帮助的人:24.9万
展开全部
定位指令时,一个是0x80,第二行是0x80+0x40
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式