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]);
}
}
}
原理图和代码都有了,仿真的准备工作就完了,现在正式进入仿真。
将代码加载进单片机中,仿真结果如下图:
元器件清单
原件布局及效果图如下:
最后按照要求全部焊接好,上电烧程序测试就可以了。
应该写得够详细了吧,最后,如果有什么意见或者建议欢迎直接给我留言,让我们共同学习一起进步,如果需要完整的代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。
谢谢!
如果喜欢我的文章请评论转发加关注哦。
A24基于51单片机汇编语言8X8点阵显示器proteus设计,keil程序
Eir4基于51单片机汇编语言8X8点阵显示器。
哈喽大家好!今天使用51单片机设计一个8X8点阵显示数字的显示器,它的要求如下:
·1、使用汇编语言进行程序设计。
·2、要求使用一位8*8点阵循环显示数字0-9。
这是以上的要求。
·同样还是打开仿真软件,双击单片机,从这里载入程序。
·原制图的构成,中间是单片机最小系统,左上角是晶振电路、复位电路,右上角是点阵的驱动电路。
·点开始,此时可以看到点阵上电就开始显示0-9的数字。
·显示完之后重新从0到9循环显示。
这就是以上的仿真,谢谢大家。
相关问答
郭天祥 51单片机 的液晶显示屏为什么只亮,却不显示数字,程序都是对的,请高人相助?首先确认一下液晶屏的对比度是否已调整正确,如果对比度调整正确,当没有程序的时候,液晶屏上会显示一些黑色的方块。如果调整正确后还不能亮,你需要去查看这...
51单片机 温度测量选哪个元器件?在51单片机温度测量中,最常用的元器件是温度传感器。其中,最经济实用的是NTC热敏电阻,它可以通过测量电阻值来反映温度变化。此外,还有PT100、热电偶等传感器...
51单片机 和c语言关系?单片机和C语言的关系,可以比如你手中的电脑和你使用的高级编程语言的关系,当然,你用你的电脑加汇编语言也能编出你要的东西。它们的语法、运算符和变量规则都...
51单片机 运行需要多少伏电源-ZOL问答有3种,5V,3.3V,1.8V其中5V和3.3V单片机较常用,不能通用,如果你部明确你手上的单片机是几伏的,可以下载芯片资料,写的很清楚因单片机芯片而异。具体要看芯片资...
单片机 显示屏引脚定义?单片机显示屏通常包括LCD显示屏和LED数字管显示屏。LCD显示屏通常需要16个引脚,其中8个用于数据传输,3个用于控制,1个用于背光控制,4个用于电源和地线。LED...
51单片机 有用吗?51单片机作为学习单片机的过程中必须要经过的一个过程来讲是非常重要的,原因在于51单片机从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象...
有关 51单片机 的电源电路设计(下图是我画的电源电路,分别采用...ALIENWARE外星人AW2725QF双模游戏显示器评测:打造极致视觉体验评论0DIY从入门到放弃:买二手显卡如何避坑?评论8千元大屏电视大揭秘!选购攻略全在这里评...
51单片机 秒表程序[回答]这个程序写的太乱了执行的顺序是先定义秒等一些寄存器,然后清零,并定义定时初值,开显示。再打开定时器中断,定时到,中断秒寄存器加1,加到10时清...
这个TM1638按键数码显示模块可以用来为 51单片机 编程吗?TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动、键盘扫描等电路。主要应用于冰箱、空...
单片机 音乐设计目的与意义?它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S...