产品选型

单片机lcd1602显示 5152单片机第10课:LCD1602显示实例

小编 2025-07-27 产品选型 23 0

5152单片机第10课:LCD1602显示实例

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

///////////////////////////////////////

uchar code table[]="http://shop36269";

uchar code table1[]="702.taobao.com/";

/////////////////////////////////////

sbit lcden=P1^2;

sbit lcdrs=P1^0;

sbit lcdrw=P1^1;

////////////////////////////////////

uchar num;

void delay_lcd(uint z);//延时程序声明

////////////////////////////////////

void delay_lcd(uint z)//延时程序

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com (uchar com)//写命令

{

lcdrs=0;

lcdrw=0;

P0=com;

delay_lcd(5);

lcden=1;

delay_lcd(5);

lcden=0;

}

void writedate(uchar date)//写数据

{

lcdrs=1;

lcdrw=0;

P0=date;

delay_lcd(5);

lcden=1;

delay_lcd(5);

lcden=0;

}

void chushihua()//初始化程序

{

lcden=0;

write_com (0x38);//显示模式设置

write_com (0x0e);//显示开/关光标

write_com (0x06);//光标加1

write_com (0x01);//清屏

write_com (0x80);//第一行 数据指针位置,如果是 0X83:表示空三格

}

void main()//主程序

{

chushihua();//调用初始化程序

for (num=0;num<16;num++)//以下程序显示 http://shop36269

{

writedate(table[num]);

delay_lcd(300);

}

write_com(0x80+0x40);// 第二行显示

for (num=0;num<15;num++)//以下程序显示 702.taobao.com/

{

writedate(table1[num]);

delay_lcd(300);

}

while(1);

}

51单片机驱动 LCD1602液晶显示 PROTEUS仿真 LCD指令解释

最近后台有小伙伴留言和我说老师给他们留了一个设计作业要用单片机去驱动LCD1602液晶显示任意字符,我利用空闲时间做了一个小实验,希望能帮到他做一个参考,更希望你们看后能有所收获。

51单片机驱动 LCD1602液晶显示系统 PROTEUS仿真及源代码设计

废话不多说先上实物图

LCD1602+51单片机最小系统应用仿真及制作

好了,接下来正式进入制作环节:

第一步:仿真

绘制好原理图,仿真时单片机最小系统只放一个单片机就可以了,但实际电路中需要加上电源模块、复位模块。如下图:

原理图文件请在附件中找。

原理图绘制好后,编写代码并生成hex文件。参考代码如下:

/*************************功能************************/

/*使用外部中断INTO改变LED状态,并且用1602显示出其状态*/

#include<reg51.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table[]=" HELLO 1602 ";

uchar code table0[]="1602 TEST ";

uchar code table1[]="RESULT: "; //空格是写到LCD了,即空格也是内容

uchar code table2[]="OK!";

uchar code table3[]="liang";

uchar code table4[]="mie";

uchar num;

sbit led=P1^7;

sbit lcden=P2^0; //液晶使能端

sbit lcdrs=P2^2; //液晶数据命令选择端选择写数据还是写命令

void delay(uint z) // 延时函数

{

uint i,j;

for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

void write_com(uchar com) //写入

{

lcdrs=0; //LCD 选择输入命令

P0=com; //向P0 口输入命令 39-32端口

delay(5); //延时

lcden=1; //打开LCD 使能

delay(5); //一个高脉冲

lcden=0; //关闭LCD 使能

}

void write_data(uchar date)

{

lcdrs=1; //设置为输入数据

P0=date; //将数据赋给P0 口

delay(5); //延时

lcden=1; //置高

delay(5); //高脉冲

lcden=0; //置低完成高脉冲

}

void init() //LED 初始化

{

lcden=0;

write_com(0x38);//设置16x2 显示5x7 点阵,8 位数据接口

write_com(0x0c); //设置开始显示不显示光标 (指令4)

write_com(0x06); //写一个字符后地址指针加1 (指令3)

write_com(0x01); //显示清零数据指针清零 (指令1)

}

void display(unsigned char *p)//按指针 地址写入数据

{

while(*p!='\0')

{

write_data(*p); //写数据

p++;

delay(1);

}

}

void main()

{

TCON=0x01; //设置中断为INTO

IE=0x81;

led=0;

init();

write_com(0x80); //将数据指针第一行第一个字处,

display(table); //调用函数的方式写入数据

delay(800);

write_com(0x80); //将数据指针第一行第一个字处,

display(table0); //调用函数的方式写入数据

write_com(0x80+0x40); //定义指针位置 将数据指针第二行第一个字处

for(num=0;num<7;num++)

{

write_data(table1[num]);

delay(5);

}

write_com(0x80+0x4c); //按1602的地址单个写入数据

write_data(table2[0]);

write_com(0x80+0x4d); //按1602的地址单个写入数据

write_data(table2[1]);

write_com(0x80+0x4e); //按1602的地址单个写入数据

write_data(table2[2]);

while(1);

}

void key_can() interrupt 0

{

delay(20); // 消除按键抖动

if(P3^3==0)

{

if(P3^3==0)

{

led=!led;

}

if(led==1)

{

write_com(0x80+0x4b);

display(table3);

}

else if(led==0)

{

write_com(0x80+0x4b); //按1602的地址单个写入数据

display(table4);

write_com(0x80+0x4f);

write_data(table1[8]); //按1602的地址单个写入数据

write_com(0x80+0x4e);

write_data(table1[8]);

}

}

}

原理图和代码都有了,仿真的准备工作就完了,现在正式进入仿真。

将代码加载进单片机中,仿真结果如下图:

元器件清单

原件布局及效果图如下:

最后按照要求全部焊接好,上电烧程序测试就可以了。

应该写得够详细了吧,最后,如果有什么意见或者建议欢迎直接给我留言,让我们共同学习一起进步,如果需要完整的代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

如果喜欢我的文章请评论转发加关注哦。

相关问答

51 单片机lcd1602 显示 ?

对于LCD1602不显示字符,一是先检查仿真电路对不对,再检查程序中定义的控制引脚与仿真图是否相符。因很多人都是从网上找的程序,与自己的仿真图并不相符,需要...

1602 液晶显示 单片机 为何屏幕亮但不 显示 数字-ZOL问答

根据我试验的结果,1602的3脚通过470~510欧左右的电阻接地就能得到最佳对比度了。现在新型的1602还不需要接电阻。电位器用来调节对比度,保证显示清晰,若不用电...

LCD1602 判忙函数原理( 单片机 )bitLCD_Check_Busy(void){Dat...

[最佳回答]这是针对51单片机的编写的程序吧?你的老师应该强调过,在读取一个端口状态之前必须先向这个端口写1,否则读回的状态可能不正确,这是51单片机的端口结...

C51 单片机 中,如何把一int型形参中的数值 显示 1602 液晶屏上?

在C51单片机中,要将一个int型形参中的数值显示在1602液晶屏上,可以通过以下步骤进行操作:1.首先,连接好C51单片机和1602液晶屏。确保液晶屏的VCC(正电源)...

LCD1602 在编写程序写指令用到OX80、OX30分别代表什么意思?

write_cmd(OX80+OX40);表示在第二行第一位显示write_cmd(OX80);表示在第一行第一位显示write_date(OX30+shi);中OX30+0,1,2,3~9是表示...

什么是 显示 缓冲区?

单片机中的显示缓冲区就是几个变量或者一个数组而已,用于保存需要显示出来的数据。程序将需要显示的数据计算出来后保存在这里面,然后当数码管扫描函数运行时...

单片机 一般用数码管还是 LCD1602 ?

单片机的显示设备可以选择使用数码管或LCD1602两种。数码管具有显示数字、字母、符号等的优势,而且价格便宜,电源消耗小,是一种比较常用的显示方式。但数码管...

求助,用24C04和 LCD1602 做的 单片机 密码锁设计的问题?

你意思是初始密码怎么写进去吗?会读写EEPROM就行,根本不需bin文件可以直接在程序里写,也可以先编写一个专门写24C04的程序你意思是初始密码怎么写进去吗?会...

51 单片机 字符液晶屏(LMC 1602 )输出端RS,RW还有E分别都有什么作用?

从左向右,1,2,3是电源和亮度(不同的1602型号对应也不同),4,5,6,是rs,rw,e,一般是这样的,就算接错了,在单片机里面重定义就行了从左向右,1,2,3是电源和亮度(不...

单片机 是怎么传给 1602 液晶数据的?

将数据传输给1602液晶显示器的典型方法是通过并行接口。下面是一个基本的步骤:1.连接硬件:将1602液晶显示器与单片机连接。使用导线将单片机的I/O引脚与液晶...

猜你喜欢