51单片机-LCD1602显示屏

news2024/11/14 18:35:08

简介

是一个液晶显示屏,通过电压对显示区域进行控制,有电就显示。

能够同时显示32个字符,分为两行,一行显示16个字符。可以显示的内容只能是字母、数字或者一些特殊符号。

使用ASCII码来让LCD1602来显示对应的字符。

电路图

图示:

引脚说明

第1引脚:GND是接地引脚。

第2引脚:VCC是电源引脚。

第3引脚:VO/VL是液晶显示器的对比度调整,接正电源时对比度比较高, 接地的时候对比度比较低。

第4引脚:RS为寄存器选择,高电平选择的是数据寄存器,低电平选择的是指令寄存器。(高数低命)

第5引脚:RW读写信号线,高电平代表进行读操作,低电平代表进行写操作。

                RS低电平,RW为高电平:读命令

                RS高电平,RW为低电平:写数据

第6引脚:E端使能端,当E由高电平变为低电平,液晶模块就不再输出显示了,而是执行命令或者写入数据。

第7~14引脚:D0~D7为8位的双向数据线。

第15引脚:背光源正极。

第16引脚:背光源负极。

LCD1602的显示方式

图示:

LCD1602的基本操作方式

图示:

读状态:输入RS=0,RW=1,E=1.输出D0~D7为状态字,读忙信号,D7引脚为标志位(BF), 高电平表示忙,低电平表示不忙。

读数据:输入RS=1,RW=1,E=1.输出D0~D7的八位数字为数据。

写命令:输入RS=0,RW=0,E=0.输出:无。将指令或者显示地址写入到LCD1602中。

写数据:输入RS=1,RW=0,E=0 输出:无。写入数据。

LCD1602的时序图

图示:

由于DS18B20是单总线设计,只能通过一个引脚来读取和写入命令或数据,但是LCD1602是由8个引脚来传输数据,所以不需要像DS18B20一样有严格的时序时间要求。

练习:

1、将DS18B20的温度显示到LCD1602中;

2、使用按键来改变DS18B20的报警阈值,并更新显示在LCD1602中。报警时机会根据阈值的改变而改变,可以对报警的频率进行不同的设置,比如20度报警音调低,30度稍高,40度更高。

#include <reg51.h>
#define uchar unsigned char
#define DataPort  P2	
sbit RS =P0^7;
sbit RW =P0^6;
sbit E =P0^5; //lcd显示屏

sbit DQ=P3^7; //温度
sbit BEE = P3^6;//蜂鸣器

sbit KEY1=P3^5; //按键
sbit KEY2=P3^4;
sbit KEY3=P3^3;


//unsigned char arr1[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
  unsigned char arr1[10] = {'0','1','2','3','4','5','6','7','8','9'};
	
//unsigned char arr2[10] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};

unsigned char tempL = 0;
unsigned char tempH = 0;
 

unsigned char flag=1;

unsigned int sdata;
 

unsigned char xiaoshu1;
unsigned char xiaoshu2;

void delay(unsigned char i)
{
	for(i; i > 0; i--);
}

void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}

unsigned char Init_DS18B20()
{
	unsigned char x = 0;
	DQ=1; 
	delay(8); 
	DQ=0; 
	delay(80); 
	DQ=1; 
	delay(5); 
	x = DQ; 
	delay(30); 
	return x;
}
 
// 写函数

void writeOneChar(unsigned char dat)
{
	unsigned char i=0;
	for(i = 8;i > 0;i--) 
	{
		DQ=0; 
		DQ=dat&0x01;
		delay(5); 
		DQ=1; 
		dat>>=1; 
		delay(2); 
	}
}
 
 
// 读函数

unsigned char readOneChar()
{
	unsigned char dat=0; 
	unsigned int i ;
	for(i = 0; i < 8 ;i++)
	{
		DQ=1;
		delay(1); 
		DQ=0;
		delay(1); 
		
		
		dat>>=1; 
		DQ=1; 
		
		if(DQ)
		{	
			dat|=0x80;
		}
		delay(4);
	}
	return dat;
}
 
// 读取温度值
void readTemperature()
{
	
	while(Init_Ds18B20()); 
	writeOneChar(0xcc); 
	writeOneChar(0x44); 
	delay(124); 
	while(Init_Ds18B20());
	writeOneChar(0xcc); 
	writeOneChar(0xbe); 
	tempL = readOneChar(); 
	tempH = readOneChar(); 
	
	if(tempH>0x7f)
	{
		tempL = ~tempL + 1;
		tempH = ~tempH;
		flag = 0;
	}
	sdata = (float)(tempH << 8 | tempL) / 16.0; 

	xiaoshu1 = (tempL&0x0f)*10/16;
	
	xiaoshu2 = (tempL&0x0f)*100/16%10;
	
}


//检测LCD是否忙
void BusyCheck()
{
	uchar sta;
	DataPort = 0xff;
	RS=0;
	RW=1;
	
	do
	{
		E=1;
		sta=DataPort;
		E=0;
	}
	while(sta&0x80);
}

//写数据
void WriteData(uchar dat)
{
	BusyCheck();	
	RS = 1;
	RW = 0;
	DataPort = dat;
	E=1;
	E=0;
	
}
//写命令
void WriteCMD(uchar cmd)
{
	BusyCheck();	
	RS=0;
	RW=0;
	DataPort = cmd;
	E=1;
	E=0;
}
//lcd屏幕
void lcd()
{
	
	
	WriteCMD(0x06);
	WriteCMD(0x0c);
	WriteCMD(0x38);
	WriteCMD(0x80);
	WriteData(arr1[sdata/10]);
	WriteData(arr1[sdata%10]);
	WriteData('.');
	WriteData(arr1[xiaoshu1]);
	WriteData(arr1[xiaoshu2]);
	WriteData(' ');
	WriteData(' ');
}

蜂鸣器
//void beef()
//{
//	BEE=1;
//	if(sdata >= 50)
//	{
//		BEE = !BEE;
//	}
//	else
//	{
//		BEE = 1;
//	}
//}
//	
//按键
void key()
{
	//定义两个字符
	unsigned char ch1='0';
	unsigned char ch2='0';
	
	int i;
	if(KEY1==0)//20-30
	{
		KEY1=0;
		KEY2=1;
		KEY3=1;
		Delay10ms();
		ch1='2';
		ch2='0';
		if(sdata>=20 && sdata <30)
		{
			for(i=0;i<300;i++)
			{
			BEE = !BEE;
			delay(100);
			}
		}
	}
	if(KEY2==0)//30-40
	{
		KEY1=1;
		KEY2=0;
		KEY3=1;
		Delay10ms();
		ch1='3';
		ch2='0';
		if(sdata>=30 && sdata <40)
		{
			for(i=0;i<300;i++)
			{
			BEE =! BEE;
			delay(300);
			delay(300);
			}
		}
	}
	if(KEY3==0)//大于40
	{
		KEY1=1;
		KEY2=1;
		KEY3=0;
		Delay10ms();
		ch1='4';
		ch2='0';
		if(sdata>=40)
		{
			for(i=0;i<300;i++)
			{
			BEE =! BEE;
			delay(300);
			delay(300);
			delay(300);
			}
		}
	}
	WriteData(ch1);
	WriteData(ch2);
	
}


void main()
{
	WriteCMD(0x01);
	
	while(1)
	{
	 readTemperature();
	 lcd();
	// beef();
	 key();
	}
		
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS应用三之组件生命周期和参数传递

目录&#xff1a; 1、生命周期的执行顺序2、页面数据传递3、图片的读取4、数据的备份和恢复5、轮播图6、页面布局图 1、生命周期的执行顺序 /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* yo…

OpenSSL源码编译及Debug

** 1. 环境 Linux 5.19.0-14-generic 22.04.1-Ubuntu 2. 所需工具 gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04) cmake version 3.22.1 3. 步骤 3.1 获取openssl源码 方法可以git clone获得源码&#xff0c;或者直接去GitHub上下载压缩包&#xff0c;GitHub网址&#xf…

4 C 语言变量、printf 基本输出、scanf 基本输入、关键字、标识符及其命名规则

目录 1 为什么需要变量 2 变量的概念 3 变量的声明和使用 3.1 vscode 管理代码 4 printf 输出变量 5 scanf 输入数据赋值给变量 6 标识符 6.1 标识符命名规范 6.1.1 强制规范 6.1.2 建议规范 6.2 关键字 7 案例&#xff1a;求从键盘输入整数的和 8 测试题 1 为什么…

如何用20块钱创建一个国际网站 VC编程网站 www.vcbcw.top

我一直想弄一个网站。 但是网页设计这一块一直没有精力学习。 所以打算先用最少的投入创建一个属于自己的网站。 第一步&#xff1a; 到万网www.net.cn上申请一个域名&#xff0c;8块钱的&#xff0c;10块钱的都有&#xff0c;自己好好想一个名称就行了。 新手&#xff0c…

【重新定义matlab强大系列二十】Matlab显示地球地貌数据

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

探索Java Stream API:高效处理集合的利器

文章目录 一、Stream API简介1.1 什么是Stream&#xff1f;1.2 Stream的特点 二、Stream API的基本操作2.1 创建Stream2.2 中间操作2.3 终端操作 三、Stream API的高级应用3.1 并行Stream3.2 复杂数据处理3.3 Stream与Optional 四、最佳实践例子 1: 筛选和映射例子 2: 排序和收…

【Linux修行路】进程控制——程序替换

目录 ⛳️推荐 一、单进程版程序替换看现象 二、程序替换的基本原理 三、程序替换接口学习 3.1 替换自己写的可执行程序 3.2 第三个参数 envp 验证 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

Dify 开源大语言模型(LLM) 应用开发平台如何使用Docker部署与远程访问

目录 ⛳️推荐 前言 1. Docker部署Dify 2. 本地访问Dify 3. Ubuntu安装Cpolar 4. 配置公网地址 5. 远程访问 6. 固定Cpolar公网地址 7. 固定地址访问 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享…

Vue3列表(List)

效果如下图&#xff1a;在线预览 APIs List 参数说明类型默认值bordered是否展示边框booleanfalsevertical是否使用竖直样式booleanfalsesplit是否展示分割线booleantruesize列表尺寸‘small’ | ‘middle’ | ‘large’‘middle’loading是否加载中booleanfalsehoverable是否…

mysql写个分区表

因为表量已经达到1个亿了。现在想做个优化&#xff0c;先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…

Unity如何使用Spine动画导出的动画

Unity如何使用Spine动画导出的动画 介绍使用版本Spine导出源文件修改Spine3.8.75版本导入Unity的3.8版本Spine的报错Unity辅助修改Json中版本号方式总结 介绍 最近公司在做抖音小程序的小游戏&#xff0c;我们这边动画部分使用的是spine动画&#xff0c;所以会有spine导入的问…

IDEA使用LiveTemplate快速生成方法注释

本文目标&#xff1a;开发人员&#xff0c;在了解利用Live Template动态获取方法输入输出参数、创建日期时间方法的条件下&#xff0c;进行自动生成方法注释&#xff0c;达到自动添加方法注释的程度&#xff1b; 文章目录 1 场景2 要点2.1 新增LiveTemplate模版2.2 模版内容填写…

FFMPEG推流器讲解

FFMPEG重要结构体的讲解 FFMPEG中有六个比较重要的结构体&#xff0c;分别是AVFormatContext、AVOutputFormat、 AVStream、AVCodec、AVCodecContext、AVPacket、AVFrame、AVIOContext结构体&#xff0c;这几个结构体是贯穿着整个FFMPEG核心功能。 AVFormatContext 这个结构…

基于web的大学生一体化服务平台的设计与实现

TOC springboot209基于web的大学生一体化服务平台的设计与实现 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人…

1、.Net UI框架:WinUI - .Net宣传系列文章

WinUI(Windows UI Library)是微软提供的一个用于构建Windows应用程序的本机UI平台组件。它与Windows应用SDK紧密相关&#xff0c;允许开发者创建适用于Windows 10及更高版本的应用程序&#xff0c;并且可以发布到Microsoft Store。WinUI 3是最新的一代&#xff0c;它提供了与操…

C# 中 Tuple 与 ValueTuples 之间的区别

在 C# 中&#xff0c;元组和值元组都用于在单个变量中存储多个值。但它们在语法、功能和性能方面存在一些关键差异。 一.Tuples(元组) 元组是一种引用类型&#xff0c;长期以来一直是 .NET 的一部分。它们是使用 System.Tuple 类创建的。 例子 using System; class Program…

养猫家庭必备好物?希喂、霍尼韦尔宠物空气净化器真实测评

随着宠物空气净化器的讨论度越来越高&#xff0c;我也被种草了这款产品。对养宠家庭来说&#xff0c;十分需要这样一款转专门针对宠物毛发清理的工具。准备入手前我在网上做了许多功课&#xff0c;经过一番筛选后&#xff0c;最后希喂、霍尼韦尔两个品牌成功晋级决赛。 在对比…

代理IP为什么不能使用免费代理IP地址?

在跨境业务中&#xff0c;营销人员、广告投手经常利用代理IP防止账号关联与封禁&#xff0c;并且在访问网站时可以隐匿真实 IP 地址&#xff0c;定位目标市场。代理服务器充当中间人掩盖真实的数字足迹&#xff0c;这不仅增强了隐私&#xff0c;也会跨境业务提效提供保障。但是…

基于STM32开发的智能语音助手系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 智能家居控制个人语音助理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人工智能技术的发展&#xff0c;智能语音助手已经逐渐进入了人们的日常生活。…

【轨物推荐】创新有规律,发明有方法

原创 赵敏 发明方法研究 2020年03月11日 10:38 各位业内朋友&#xff0c;大家好&#xff01; 今年的疫情&#xff0c;对所有的企业都会有冲击&#xff0c;给企业的业务开展带来很多困扰。详细很多企业都在出主意、想办法&#xff0c;设法把疫情造成的损失降到最低。即使在平时…