51单片机-LCD液晶显示

发布于:2024-05-21 ⋅ 阅读:(174) ⋅ 点赞:(0)

需要用的LCD1602;

一.LCD1602模块简介

        是一种工业字符型液晶,16列2行.

        引脚:VSS为电源地GND;VDD为电源正极5V;RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器;R/W为读写信号线,高电平时进行读操作,低电平时进行写操作.当RS和R/W共同 为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当 RS为高电平R/W为低电平时可以写入数据;E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;D0~D7为8位双向数据线;

二. 代码功能实现

lcd.h

#include "lcd.h"

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

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;
}

	   
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;
}


void LcdInit()			
{
 	LcdWriteCom(0x38);  //开显示
	LcdWriteCom(0x0c);  //开显示不显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0xC0);  //设置数据指针起点
}

lcd.h

#ifndef __LCD_H_
#define __LCD_H_

#include<reg52.h>

//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint 
#define uint unsigned int
#endif


#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^6;
sbit LCD1602_RS=P2^5;


void Lcd1602_Delay1ms(uint c); 

void LcdWriteCom(uchar com);

void LcdWriteData(uchar dat);
	
void LcdInit();						  

#endif

main.c


#include "reg52.h"			 
#include "lcd.h"

typedef unsigned int u16;	  
typedef unsigned char u8;

u8 Disp[]=" hello work!     ";
u8 Disp2[]=" 2024-05-20     ";

void main(void)
{
	u8 i,j;
	LcdInit();
	LcdWriteCom(0x80);  //设置数据指针起点
	for(i=0;i<16;i++)
	{
		LcdWriteData(Disp[i]);	
	}
	LcdWriteCom(0xC0);  //设置数据指针起点
	for(j=0;j<16;j++)
	{
		LcdWriteData(Disp2[j]);	
	}	
	while(1);				
}

三.总结

        以上就是液晶屏的功能实现.