您的位置:首页 > 科技 > 能源 > 51单片机-LCD1602显示屏

51单片机-LCD1602显示屏

2024/10/6 14:28:20 来源:https://blog.csdn.net/m0_74380601/article/details/141226101  浏览:    关键词:51单片机-LCD1602显示屏

简介

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

能够同时显示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();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com