51单片机 1602液晶显示


1602的第1个管脚为VSS,VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压。

15管脚为背光电源正极,为防止加5v电压烧坏背光灯,通常串接1个10Ω电阻限流。



/*		1602静态显示 基本程序 		*/
#include <reg51.h>
#define LCD1602_DATAPINS P0
#define uchar unsigned char
#define uint unsigned int
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

unsigned char table[]=" Lululu";
void Lcd1602_Delay1ms(uint c);
void LcdWriteCom(uchar com);
void LcdInit();
void LcdWriteData(uchar dat);

void main(void)
{
	unsigned char i;
	LcdInit();
	LcdWriteCom(0x80+0x06);		  //定位数据指针,若从第一行第一位开始显示,可删去此句。(0x80+0x40):定位至第二行
	for(i=0;i<7;i++)
	{	
		LcdWriteData(table[i]);	
	}
	while(1)
	{
	}				
}


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 LcdInit()						  //LCD初始化子程序
{
 	LcdWriteCom(0x38);  //开显示
	LcdWriteCom(0x0c);  //开显示不显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //设置数据指针起点
}


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




原文地址:https://www.cnblogs.com/l20902/p/10610969.html