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

C51单片机怎么让lcd1602显示两行?,第1张

我给你写个测试程序,第一行显示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 = Timex >0x--)

for(y = 120y >0y--)

}

/*********************************************************************************************

* 函数名称: 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)

}

#include <string.h>

sbit RS=P1^0

sbit RW=P1^1

sbit EN=P1^2

sbit DATA=P2  //定义LCD1602管脚

void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[]) //x:列 0-15 y:行 0-1 dat写入的东西

void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)

void lcd1602_init()

void lcd1602_write(bit sign, unsigned char dat)    //sign=0 :写入命令   sign=1:写入数据

{

 delay_1ms(1)

 RS=sign

 RW=0

 EN=0

 DATA=dat

 EN=1

 delay_1ms(1)

 EN=1

 RS=0

}

void lcd1602_init()

{

delay_1ms(10)

lcd1602_write(0,0x38)

lcd1602_write(0,0x38)

lcd1602_write(0,0x38)

lcd1602_write(0,0x0c)

lcd1602_write(0,0x01)

}

void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[])

{

 unsigned char point=0x80+x

 unsigned char len=16

 unsigned char j=0

 if(y)

 {point+=0x40}

 lcd1602_write(0,point)

 len=strlen(dat)

 for(j=0j<lenj++)

 {

  lcd1602_write(1,dat[j])

 }

}

void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)

{

 unsigned char point=0x80+x

 if(y)

 {point+=0x40}

 lcd1602_write(0,point)

 lcd1602_write(1,ascll)

}

以上是基础程序,也就是LCD1602的工作程序(注意我的延时函数未写出,请根据实际芯片的速度写延时函数)

unsigned char  table[]="  Hello,World   " 

 lcd1602_init() 

lcd1602_display_str(0,1,table)

以上是工作程序(显示字符串),注意的是LCD一行最多16个字符,而且不支持中文,这是在第一列第二行输出的Hello,World,包括空格,一共16个字符。

如果是STC89C52的话,可以使用以下的延时函数

void delay_1ms(unsigned int n)

{

unsigned int i=0,j=0

 for(i=0i<ni++)

   for(j=0j<110j++)

}

加上这些东西,将显示语句换成1602_display(i)即可,

当然你可以将其改为只显示2个数字

sbit rw=P1^4

sbit rs=P1^3

sbit lcden=P1^5

#define db P2

void write_com(uchar com)//液晶屏写命令

{

db=com

rs=0

rw = 0

lcden=0

Delay1ms(12)

lcden=1

Delay1ms(12)

lcden=0

}

void write_date(uchar date)//液晶屏写数据

{

db=date

rs=1

rw = 0

lcden=0

Delay1ms(12)

lcden=1

Delay1ms(12)

lcden=0

}

void init2()//液晶屏初始化

{

rw=0

write_com(0x38)

Delay1ms(12)

write_com(0x0f)

Delay1ms(12)

write_com(0x06)

Delay1ms(12)

write_com(0x01)

Delay1ms(12)

}

void 1602_display(uchar temp) //液晶显示一个8 位二进制数

{

uchar A1,A2,A3

A1=temp/100//分离百位、十位、个位

A2=temp/10%10

A3=A2t%10

write_com(0x80)//第1行,第1字

write_date(A1+0x30)

Delay1ms(1)

write_date( A2+0x30)

Delay1ms(1)

write_date(A3+0x30)

Delay1ms(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11360840.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存