C51单片机实验——LCD 1602液晶显示器

51单片机 | LCD12864 液晶显示实验 LCD12864 液晶显示实验 阅读详情
AI摘要

本文详细介绍了如何通过普中实验系统和KeilμVision4软件,利用单片机控制LCD1602液晶显示器实现数字时钟功能。步骤包括硬件连接、软件编程以及关键函数的实现,展示了字符显示、初始化设置和命令操作的过程。

实验名称:利用1602实现数字时钟

实验环境:普中实验系统;Keil μVision 4软件;
实验目的:
(1)掌握1602液晶显示器的工作原理和接口方法。
(2)利用本课程前面所学的知识,实现数字时钟功能。
硬件连线:
LCD1602的RS、R/W*和E这3个引脚分别接在P2.0、P2.1和P2.2引脚
数据口D0-D7接p3.0-3.7
实验主要代码:
Main.c

/**************************************************************************************
*		              LCD1602液晶显示实验												  *
实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。																				 
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

u8 Disp1[]="hello world 2021";
u8 Disp2[]="12 03 happyday";

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
	u8 i;
	LcdInit();
	if(i<40){
		LcdWriteCom(0x80);
	}
	else{
		LcdWriteCom(0xC0);
	}
	for(i=0;i<40;i++)
	{
		LcdWriteData(Disp1[i]);	
	}
	for(i=40;i<80;i++)
	{
		LcdWriteData(Disp2[i-40]);
	}

	while(1);				
}

Lcd.c

#include "lcd.h"

/*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能		   : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/

void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
	for (; c>0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }     
	}
    	
}

/*******************************************************************************
* 函 数 名         : LcdWriteCom
* 函数功能		   : 向LCD写入一个字节的命令
* 输    入         : com
* 输    出         : 无
*******************************************************************************/
#ifndef 	LCD1602_4PINS	 //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)	  //写入命令
{
	LCD1602_E = 0;     //使能
	LCD1602_RS = 0;	   //选择发送命令
	LCD1602_RW = 0;	   //选择写入
	
	LCD1602_DATAPINS = com;     //放入命令
	Lcd1602_Delay1ms(1);		//等待数据稳定

	LCD1602_E = 1;	          //写入时序
	Lcd1602_Delay1ms(5);	  //保持时间
	LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)	  //写入命令
{
	LCD1602_E = 0;	 //使能清零
	LCD1602_RS = 0;	 //选择写入命令
	LCD1602_RW = 0;	 //选择写入

	LCD1602_DATAPINS = com;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	 //写入时序
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;

	LCD1602_DATAPINS = com << 4; //发送低四位
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	 //写入时序
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能		   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/		   
#ifndef 	LCD1602_4PINS		   
void LcdWriteData(uchar dat)			//写入数据
{
	LCD1602_E = 0;	//使能清零
	LCD1602_RS = 1;	//选择输入数据
	LCD1602_RW = 0;	//选择写入

	LCD1602_DATAPINS = dat; //写入数据
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;   //写入时序
	Lcd1602_Delay1ms(5);   //保持时间
	LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)			//写入数据
{
	LCD1602_E = 0;	  //使能清零
	LCD1602_RS = 1;	  //选择写入数据
	LCD1602_RW = 0;	  //选择写入

	LCD1602_DATAPINS = dat;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	  //写入时序
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;

	LCD1602_DATAPINS = dat << 4; //写入低四位
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	  //写入时序
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能		 : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/		   
#ifndef		LCD1602_4PINS
void LcdInit()						  //LCD初始化子程序
{
 	LcdWriteCom(0x38);  //开显示
	LcdWriteCom(0x0c);  //开显示不显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //设置数据指针起点
	LcdWriteCom(0x28);

}
#else
void LcdInit()						  //LCD初始化子程序
{
	LcdWriteCom(0x32);	 //将8位总线转为4位总线
	LcdWriteCom(0x28);	 //在四位线下的初始化
	LcdWriteCom(0x0c);  //开显示不显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //设置数据指针起点
	LcdWriteCom(0x28);
}
#endif

实验结果与心得:
实验效果:LCD液晶显示器第一行显示hello world 2021,第二行显示12 03 happyday字样

心得:1.单片机控制LCD 1602显示字符,只需将待显示字符的ASCII码写入显示数据存储器(DDRAM),内部控制电路就可将字符在显示器上显示出来。
2.LCD 1602的引脚包括8条数据线、3条控制线和3条电源线。
3.让液晶显示器显示字符,首先对其进行初始化设置:对有、无光标、光标移动方向、光标是否闪烁及字符移动方向等进行设置,才能获得所需显示效果。
4.命令6:功能设置命令。N—显示器行数选择控制位。0:单行显示,1:两行显示。
5.命令8:DDRAM地址设置。命令格式:80H+地址码。第二行格式80H+40H+地址码即0xC0H为起始地址

【51单片机】1602 CGRAM、CGROM及DDRAM的作用 CGRAM : 允许用户自建字模区的空间。从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零(表上的高位)。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X 阅读详情

相关推荐

使用51单片机的矩阵键盘和LCD1602做一个密码锁

使用51单片机与LCD1602模块做了一个密码锁。

w736996104的博客 1万+

实验(四):LCD1602显示实验

《单片机原理及应用》实验报告(四)【zzuli】

心之所向 1万+

【51单片机系列】LCD1602液晶模块

51单片机中LCD1602液晶显示屏使用。

sinat_41752325的博客 1万+

基于C51的LCD1602编程(详解)

第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 16 脚:背光源负极。

weixin_51772979的博客 2108

基于proteus的51单片机仿真实例六十三、字符液晶LCD1602显示单个字符实例

本系列文章讲述了基于proteus仿真的51单片机学习,内容全面,不仅讲解电路原理,还讲解了单片机c语言,实例丰富,内容全面。

老马识途单片机 2万+

51单片机:STC_1602显示自己的名字与学号

#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define LcdBus P0 sbit LED1602_RS=P1^0; //LCD端口定义 sbit LED1602_RW=P1^1 ; sbit LED160...

Cyp1998_L的博客 1万+

电子万年历

电子万年历(C51)

qq_65101190的博客 2412

51单片机使用LCD1602和定时器,制作一个电子时钟

/显示函数,从第0行的第一个位置开始显示。设置显示屏光标位置和文字状态:写入新数据后光标向右移动、写入新数据后文字不动,根据指令3。0x06设置完屏幕参数后,清空屏幕上的内容,就可以显示数据了,使用指令1。显示屏给每一个字符分配了一个显存,显存地址与显示位置的对应关系如图。放到 对应字符的显存位置上,就能在该位置显示出对应的字符。这一步就是告诉显示屏,要在第几行第几列显示字符,使用的是指令。要在显示屏上显示一个字符,首先需要选择显示的位置,例如在第。个位置,然后根据字符的形状 点亮对应的像素点,如图。

m0_73928994的博客 2750

基于51单片机LCD1602显示

基于51单片机LCD1602显示 要在1602上显示字符,要大概明白1602液晶显示屏工作原理。 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。 LCD1602则是一种专门用于显示字母、数字、符号等点阵式LCD,每行可以显示16个字符,一共可以显示2行的字符型液晶显示模块。 一般1602一共有16位引脚。(引脚作用如下表) 编号 符号 引脚作用 编号 符号 引脚作用 1 VSS 电源正级 9

Lucifer_min的博客 5万+

4.11 51单片机-LCD1602显示屏

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。

5341

从理论到实践:利用FilterSolutions高效设计7阶椭圆低通滤波器

本文详细介绍了如何利用FilterSolutions软件高效设计7阶椭圆低通滤波器。文章从理论入手,对比了巴特沃斯、切比雪夫等经典滤波器特性,阐述了在要求高衰减陡度(如62dB抑制)和严格通带波纹(0.2dB)时,椭圆滤波器是最优选择。通过分步实战教程,指导读者完成从软件参数设置、性能验证到实际电路布局与调试的全过程,助力射频与高速数字信号处理工程师将理论转化为可靠设计。

jupi8的博客 559

51单片机LCD1602显示

1.原理: 1602 液晶也叫 1602 字符型液晶,它能显示 2 行字符信息,每行又能显示 16 个字符。 它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个 5x7 或者 5x10 的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点 距的间隔,每行之间也有间隔,起到了字符间距和行间距的作 用,正因为如此,所以它 不能很好的显示图片 (1)引脚: (2)其地址 和屏幕的对应关系如下: 要显示字符时 要先输入显示字...

weixin_46364710的博客 1万+

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

一、51单片机 使用Proteus掌握LCD1602显示屏的使用(仿真及代码)

proteus仿真,通过51单片机初步掌握LCD1602显示原理

m0_47235364的博客 2万+

Diffusion:如何从噪声中生成清晰图像

扩散模型是当前AI图像生成领域的核心基础,如Stable Diffusion、DALL·E等热门模型均采用该技术。其原理分为训练和推理两个阶段:训练时通过逐步加噪图片,让AI学习如何去除噪声;推理时则从随机噪声出发,结合文本提示逐步去噪生成清晰图像。模型架构通常包含文本编码器、生成模型(如U-Net)和解码器三部分,通过多轮迭代将低维潜在空间表示转化为最终图像。这种技术模拟了艺术家从混沌中雕琢作品的过程,实现了从随机噪声到目标图像的智能生成。

laumy的学习笔记 1276

【智驾与大模型】端到端与多模态大模型的精彩之旅

智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓!

仿生实验室:从0到1,制作人脸表情交互机器人,记录过程,软硬件全部开源,与君共襄盛举! 1319

C51单片机LCD1602驱动程序

C51单片机LCD1602驱动程序LCD1602简介1602的引脚操作时序写操作时序时序参数LCD1602关键性操作一、初始化二、清屏指令二、进入模式设置指令三、显示开关控制指令四、功能设定指令RAM地址映射图 LCD1602简介 LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个57或者510的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此

阿昌 1万+

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3258

51单片机入门——LCD1602

文章目录1.初识 LCD16021.1.1602 液晶的硬件接口1.2.1602 液晶的读写时序1.3.1602 液晶的指令2.实例2.1.显示字符2.2.整屏移动 1.初识 LCD1602 LCD ( Liquid Crystal Display 的简称)液晶显示器。 LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。 1.1.160

倾晨灬雨曦的博客 1万+

MOS管基础知识及应用电路Multisim仿真

本文系统介绍了MOS管的基础知识及其在电子电路中的典型应用。首先详细解析了MOS管的基本结构、分类和工作原理,包括NMOS、PMOS及CMOS的特性差异。重点阐述了MOS管的三种放大组态电路(共源、共漏、共栅)及其小信号模型分析。随后通过Multisim仿真验证了MOS管在防反接电路、开关电路、放大电路、逻辑门电路、电平转换电路和开关电源(BUCK、BOOST、BUCK-BOOST)等应用中的实际表现。文章还深入探讨了自给偏压和分压式偏置电路的设计要点。全文通过理论分析与仿真实验相结合的方式,全面展示了MO

XU157303764的博客 1483

利用PaddleOCR识别增值税发票平台验证码(开箱即用)

下面直接讲解利用paddleocr识别的思路,为什么使用paddleocr,因为paddle中集成了较好的ocr文字识别模型,开箱即用即可,废话不多说,剑指主题,识别思路步骤如下。

码王吴彦祖的博客 5544

基于51单片机的电子时钟

基于51单片机的电子时钟设计 目录 基于51单片机的电子时钟设计 一、需求分析 1.1前言 1.2研究价值及意义 1.3 任务目标 一、总体设计 2.1 设计思路 2.2 总体框架 2.3 主要元件说明 2.3.1AT89C51单片机 2.3.2 LCD1602液晶显示器 2.3.3 24C02C存储芯片 2.3.4 DS1302时钟芯片 三、详细设计 3.1 液晶显示模块设计 3.1.1 硬件设计 3.2 时间产生模块设计 3.2.1 硬件设计 3.2.2 软件..

m0_46537586的博客 4万+

BOSS直聘招聘端自动化识别策略调整(20250905)

2025年9月BOSS直聘调整账号登录策略,禁止使用辅助工具,违者将禁用PC端和网页端2个月。作者认为这一政策可能调整,因为AI辅助已成趋势,严格限制会影响付费客户。企业使用辅助工具的主要原因是平台推送的候选人匹配度低,导致沟通成本高。虽然部分企业滥用功能骚扰求职者,但BOSS直聘仍需依赖这些付费客户。新规可能得罪大客户,但只要有需求,市场总会找到应对方案。

企智软件 827

MCU-51:单片机LCD1602详解

MCU-51:LCD1602详解

立于皓月之边,不弱星光之势 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[单片机笔记]LCD1602模块(51单片机)

文章目录1 LCD1602概要1.1 介绍2 LCD1602功能2.1 引脚功能2.2 控制指令集2.3 连线方法3 程序设计3.1 头文件3.2 .c程序3.2.1 延迟函数3.2.2 写命令函数3.2.3 写数据函数3.2.4 1602初始化函数3.2.5 1602清屏函数3.2.6 打开1602背光函数3.2.7 获取1602背光函数3.2.8 设置1602位置函数3.2.9 制定位置显示函数3.2.10 指定位置显示字符函数3.2.11 指定位置显示字符串函数3.2.12 类Y的字模3.2.13 自

PurpleStrange的博客 9370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

51单片机 | LCD1602 液晶显示实验

LCD1602 液晶显示实验

F4_Family的博客 7199

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 关于eclipse编辑器汉化与英文界面的切换
下一篇: Linux操作系统
Answer_G
博客等级 码龄7年 170粉丝 56原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值