设计与开发

单片机液晶lcd 单片机快速入门:12864液晶屏实现多功能数字时钟

小编 2024-10-12 设计与开发 23 0

单片机快速入门:12864液晶屏实现多功能数字时钟

想要快速入门单片机,就要多动手实践。也许你的手上有不止一块的单片机开发板,但是你有没有亲自动手实现自己的想法?单片机实现数字时钟是一个不错的想法。有12864液晶显示屏、有按键、有DS18B20。最关键的,你能从一个小的实验设计中获得设计经验,熟悉产品开发的流程,你会慢慢爱上这一行。

文末会有原理图和hex程序文件的下载方式,可以更好的帮助你学习,感谢杜洋工作室。

器件清单

1.元器件清单

首先来看看所需要的清单:51单片机STC12C5A60S2、12864液晶屏、温度传感器DS18B20、时钟芯片DS1302、光敏电阻、四腿按键等。

STC12C5A60S2

所用单片机为国产51单片机,型号为STC12C5A60S2,DIP40封装。

12864液晶屏

显示器件为12864液晶屏。

时钟芯片DS1302

时钟采用DS1302芯片,配电池、32.768K的晶振。

温度传感器DS18B20

环境温度的检测用DS18B20来实现。

光敏电阻

光敏电阻用于感知白天和晚上。

四腿机械按键实现时钟调整、闹钟设置等功能。

2.实现原理图

这是整体的原理图。

3.整体外观和显示

未来时钟背面

焊接完成后的未来时钟背面。

闹钟调整界面

可以实现时间的显示,闹钟的设置,关键还有重要节气的显示。

正常显示界面

私信回复关键字:

未来时钟 。即可获取原理图和hex文件。感谢杜洋工作室。

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]);

}

}

}

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

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

元器件清单

原件布局及效果图如下:

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

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

谢谢!

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

相关问答

单片机 中的 LCD -ZOL问答

单片机中的LCD显示器讨论回答(7)看你的程序,大概猜出应该是在液晶第二行显示时分秒信息Voidwrite_sfm(ucharadd,uchardate),add看程序是指LCD第二...

单片机 用oled和 lcd 显示有什么不同-ZOL问答

lcd分单色屏和彩屏,单色屏分为段式结构和点阵结构,段式结构只能显示简单字符,点阵结构可显示简单图形。1602是最常见的LCD显示器了,属于STN,OLED无偏光片它与...

51 单片机 sr041602 液晶 屏显示原理?

51单片机是一种广泛应用于嵌入式系统的微控制器,SR041602是一种常见的液晶屏模块。液晶屏的显示原理是利用液晶分子的电光特性来实现显示。液晶分子具有两种稳...

单片机lcd 名词解释?

单片机LCD是一种用于单片机显示的液晶显示器,它具有低功耗、高分辨率、清晰的图像等特点。其中,液晶是一种类似于晶体的物质,具有一定的电学性质。LCD采用的是...

自带 LCD 驱动的 单片机 ?

这种现象很正常,可能是每一个嵌入式从业者都可能遇到,因为嵌入式软件的难度不是线性增加,而是陡然提升的。对于接触过51单片机的开发者来说,在学习STM过程中...

单片机 程序中lcdrs是什么意思?有什么作用?

是液晶的数据/命令选择端,一般高电平代表传输的是数据,低电平代表传输的是命令。液晶资料上面有详细介绍是液晶的数据/命令选择端,一般高电平代表传输的是数...

单片机 LCD 段码屏COM公共段的引脚(COM0~COM3)可以复用吗?用来做按键扫描?

这个最好不要复用吧,要不扫描按键时,数码管会闪....这个最好不要复用吧,要不扫描按键时,数码管会闪....

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

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

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

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

单片机 怎样用C语言实现二进制转十进制并在 LCD 中显示 - 人生...

把二进制转换为ascii码,自然在LCD显示假设被转换的二进制数为tempunsignedchari=0;unsignedchardis_buf[3];for(i=0;i<3;i++){dis...

猜你喜欢