【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)

1.LCD1602概述

        LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
 【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第1张图片

 //硬件接线

 //电源

           VSS -- GND

           VDD -- 5V

//对比度

           VO -- GND

//控制线

           RS -- P1.0

           RW -- P1.1

            E  -- P1.4

//背光灯

           A  -- 5V

           K  -- GND

//数据

           D0到D7 -- P0.到P0.7

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第2张图片

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第3张图片 

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第4张图片 

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第5张图片 

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)_第6张图片 

#include "reg52.h"
#include "intrins.h"
#define databuffer P0
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;

void check_busy()
{
	char tmp = 0x80;
	databuffer = 0x80;
	
	while(tmp & 0x80){
		RS = 0;
		RW = 1;
		EN = 0;
		_nop_();
		EN = 1;
		_nop_();
		_nop_();
		tmp = databuffer;
		EN = 0;
		
		_nop_();
	}
}

void Write_Cmd(char cmd)
{
	check_busy();
	RS = 0;
	RW = 0;
	
	EN = 0;
	_nop_();
	databuffer = cmd;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
	
}

void Write_Data(char datashow)
{
	check_busy();
	RS = 1;
	RW = 0;
	
	EN = 0;
	_nop_();
	databuffer = datashow;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
}

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

	i = 27;
	j = 226;
	do
	{
		while (--j);
	} while (--i);
}
void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 9;
	j = 244;
	do
	{
		while (--j);
	} while (--i);
}


void LCD1602_init()
{
	//(1)延时 15ms 
	Delay15ms();
	//(2)写指令 38H(不检测忙信号) 
	Write_Cmd(0x38);
	//(3)延时 5ms 
	Delay5ms();
	//(4)以后每次写指令,读/写数据操作均需要检测忙信号 
	//(5)写指令 38H:显示模式设置 
	Write_Cmd(0x38);
	//(6)写指令 08H:显示关闭 
	Write_Cmd(0x08);
	//(7)写指令 01H:显示清屏
	Write_Cmd(0x01);
	//(8)写指令 06H:显示光标移动设置
	Write_Cmd(0x06);
	//(9)写指令 0CH:显示开及光标设置
	Write_Cmd(0x0c);
 
}

void LCD1602_showLine(char row,char col, char *string)
{
	switch(row)
	{
		case 1:
			Write_Cmd(0x80+col);
			while(*string){
				Write_Data(*string);
				string++;
			}
			break;
		case 2:
			Write_Cmd(0x80+0x40+col);
			while(*string){
				Write_Data(*string);
				string++;
				}
			break;
	
}
}

void main()
{
	char cmd = 0x80 + 0x05;
	char datashow = 'C';
	LCD1602_init();
	//Write_Cmd(cmd);
	//Write_Data(datashow);
	LCD1602_showLine(1,5,"NO 2");
	LCD1602_showLine(2,1,"CLC homesome");
}

 

你可能感兴趣的:(单片机,嵌入式硬件)