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]);
}
}
}
原理图和代码都有了,仿真的准备工作就完了,现在正式进入仿真。
将代码加载进单片机中,仿真结果如下图:
元器件清单
原件布局及效果图如下:
最后按照要求全部焊接好,上电烧程序测试就可以了。
应该写得够详细了吧,最后,如果有什么意见或者建议欢迎直接给我留言,让我们共同学习一起进步,如果需要完整的代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。
谢谢!
如果喜欢我的文章请评论转发加关注哦。
单片机入门-C51语言LCD12864液晶显示器的基本使用介绍
视频教程如下:
视频
一.LCD12864简介:
常用的人机交互显示界面中,除了数码管、LED,有一种12864液晶屏用的比较多。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108、T6963C,ST7920等等。
二.LCD12864主要参数
1、工作电压(VDD):3.3或5.5V(只支持一种电压)
2、逻辑电平:2.7~5.5V
3、LCD 驱动电压(Vo):0~7V
4、工作温度(TOP):0~55℃(常温)/-20~70℃(宽温)
保存温度(TST):-10~65℃(常温)/-30~80℃(宽温)
三. 常见LCD12864 引脚定义如下:
1 VSS - 模块的电源地
2 VDD - 模块的电源正端
3 V0 - LCD驱动电压输入端
4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号
5 R/W(SID) H/L 并行的读写选择信号;串行的数据口
6 E(CLK) H/L 并行的使能信号;串行的同步时钟
7 DB0 H/L 数据0
8 DB1 H/L 数据1
9 DB2 H/L 数据2
10 DB3 H/L 数据3
11 DB4 H/L 数据4
12 DB5 H/L 数据5
13 DB6 H/L 数据6
14 DB7 H/L 数据7
15 PSB H/L 并/串行接口选择:H-并行;L-串行
16 NC 空脚
17 /RET H/L 复位 低电平有效
18 NC 空脚
19 LED_A (LED+5V) 背光源正极
20 LED_K (LED-OV)背光源和负极
四、LCD12864使用方法总结
第一步:初始化,调用lcd_init(),lcd_clr();
第二步:根据具体情况调用相关的函数,
要显示汉字,调用dh(),要用字模转换软件先生存字模。
要显示单个字符,调用ds()。
要显示字符串,调用printchars()。
相关问答
郭天祥51 单片机 的 液晶显示 屏为什么只亮,却不显示数字,程序都是对的,请高人相助?首先确认一下液晶屏的对比度是否已调整正确,如果对比度调整正确,当没有程序的时候,液晶屏上会显示一些黑色的方块。如果调整正确后还不能亮,你需要去查看这...
自己制作的 单片机 最小 系统 1602 液晶 没有任何 显示 ,只有背光灯亮?怎么回事,求大神?在没有任何程序写入的情况下,液晶不会有显示。一般情况下,需要调整外接的滑动变阻器获得最佳对比度,对比度太低,会显示很浅。在没有任何程序写入的情况下,...
求 单片机 + 液晶 的多级菜单原理?采用树形的存储结构,如果用C语言实现的话,用结构体可以很方便地实现多级菜单,每个子菜单对应唯一的命令ID,在任务路由中调用不通的函数来处理即可。采用树形...
51 单片机 如何实现汉字 显示 ,如“龙”字,能否给程序和电路图?方案一:含字库的液晶,单片机给出相应指令即可显示。效果最好,成本较高,程序量小,难度适中。方案二:点阵液晶或LED点阵,以16*16分辨率,用汉字取模软件取...方...
51 单片机 lcd1602如何 显示 数字变量?1602是可以显示字符的,如'1','2'等,可以设置一个字符串,如charAA[]={'0123456789'}那么设置一个变量i,AA[i]就行...
英语翻译摘要目前家用的数字电子钟,多数只能 显示 小时、分钟...[最佳回答]AbstractAtpresentthenumberofhouseholdelectronicbell,themajoritycanonlydisplayhours,minut...
英语翻译 单片机 技术作为自动控制技术的核心之一,被广泛应用...[最佳回答]Asasingle-chipmicrocomputerautomaticcontroltechnologyinoneofthecore,arewidelyusedini...
单片机 12864 液晶屏 带字库和不带字库是什么意思-ZOL问答5条回答:【推荐答案】12864液晶带字库和不带字库液晶屏的区别在于:带字库的液晶内置汉字字符库调用对应的代码就行。不带字库的得自行编译所要显示的内容字库...
单片机 按键计数器的中断函数、 显示 函数怎么写?单片机按键计数器用外部中断每进一次中断,就加一个数,但是要防止重复进入中断,防止重复进入中断你可以把中断源设置成上升沿或者是下降沿。不要设置成高电平和...
开发板和 单片机 有什么区别?开发板与单片机的区别单片机是一个8位微控制器芯片,它是51开发板的核心设备。单片机开发板将单片机常用的外围设备集成到电路板上,并与单片机一起形成开发系...