单片机LCD1602

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

一直用LED和数码管显示,LED显示数据不够明显,数码管需要动态扫描,都不方便,那还有什么更方便的显示模块的。最简单的就是LCD1602。


提示:以下是本篇文章正文内容,下面案例可供参考

一、LCD1602是什么?

LCD1602是一种字符型液晶显示模块,通常由字符型液晶显示屏、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。

二、LCD1602 原理

在这里插入图片描述

三、显示一个字符

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

在这里插入图片描述

在这里插入图片描述

四、如何显示四位数

在这里插入图片描述

在这里插入图片描述

五、参考历程



 #include <reg52.h> 

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

#ifndef uint 
#define uint unsigned int
#endif

/**********************************
PIN口定义
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

/**********************************
函数声明
**********************************/
/*在51单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c);   //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/	
void LcdWriteData(uchar dat);
/*LCD1602初始化子程序*/		
void LcdInit();	

unsigned int a=0;

main
 
void main()
 {
   
	// 初始化LCD1602 
	LcdInit();	
	 
	LcdWriteCom(0x80);
	 LcdWriteData('a'); 
	LcdWriteData('1'); 	 
	LcdWriteData('2'); 
	LcdWriteData('3'); 
	LcdWriteData('4'); 	 
	 // WUZHOU   1234      第一行
	 // 0123456789123456   第二行
	while(1)
	{
   
			a++;
			if(a==10000)
			{
   
				a=0;
			}
			LcdWriteCom(0x80);
		    LcdWriteData('a'); 
			LcdWriteData(a/1000%10+0x30); 	 //+0x30 将数字转换成字符  acii表
			LcdWriteData(a/100%10+0x30); 
			LcdWriteData(a/10%10+0x30); 
			LcdWriteData(a%10+0x30); 
			
			Lcd1602_Delay1ms(2000);  
		   
		
	}
 }
 
 /*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能		   : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/

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

/*******************************************************************************
* 函 数 名         : LcdWriteCom
* 函数功能		   : 向LCD写入一个字节的命令
* 输    入         : com
* 输    出         : 无
*******************************************************************************/
 
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;
}

/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能		   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/		   

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

/*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能		 : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/		   

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

六、封装成一个显示 字符和一个显示任意四位数的函数

思考

在指定地址显示任意四位数

void lcd_4num(unsigned char dizhi,unsigned int num)
{
   
			LcdWriteCom(dizhi);
		 //   LcdWriteData('a'); 
			LcdWriteData(num/1000%10+0x30); 	 //+0x30 将数字转换成字符  acii表
			LcdWriteData(num/100%10+0x30); 
			LcdWriteData(num/10%10+0x30); 
			LcdWriteData(num%10+0x30); 
	
}

调用

lcd_4num(0xc0,a);

在这里插入图片描述
完整程序

 #include <reg52.h> 

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

#ifndef uint 
#define uint unsigned int
#endif

/**********************************
PIN口定义
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

/**********************************
函数声明
**********************************/
/*在51单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c);   //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/	
void LcdWriteData(uchar dat);
/*LCD1602初始化子程序*/		
void LcdInit();	
/*LCD1602 指定地址显示任意四位数*/		
void lcd_4num(unsigned char dizhi,unsigned int num);

unsigned int a=0;

main
 
void main()
 {
   
	// 初始化LCD1602 
	LcdInit();	
	 
	LcdWriteCom(0x80);
	 LcdWriteData('a'); 
	LcdWriteData('1'); 	 
	LcdWriteData('2'); 
	LcdWriteData('3'); 
	LcdWriteData('4'); 	 
	 // WUZHOU   1234      第一行
	 // 0123456789123456   第二行
	while(1)
	{
   
			a++;
			if(a==10000)
			{
   
				a=0;
			}
//			LcdWriteCom(0x80);
//		    LcdWriteData('a'); 
//			LcdWriteData(a/1000%10+0x30); 	 //+0x30 将数字转换成字符  acii表
//			LcdWriteData(a/100%10+0x30); 
//			LcdWriteData(a/10%10+0x30); 
//			LcdWriteData(a%10+0x30); 
			
			
			lcd_4num(0xc0,a);
			Lcd1602_Delay1ms(2000);  
		   
		
	}
 }
 
 /*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能		   : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/

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

/*******************************************************************************
* 函 数 名         : LcdWriteCom
* 函数功能		   : 向LCD写入一个字节的命令
* 输    入         : com
* 输    出         : 无
*******************************************************************************/
 
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;
}

/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能		   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/		   

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

/*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能		 : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/		   

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

void lcd_4num(unsigned char dizhi,unsigned int num)
{
   
			LcdWriteCom(dizhi);
		 //   LcdWriteData('a'); 
			LcdWriteData(num/1000%10+0x30); 	 //+0x30 将数字转换成字符  acii表
			LcdWriteData(num/100%10+0x30); 
			LcdWriteData(num/10%10+0x30); 
			LcdWriteData(num%10+0x30); 
	
}

思考字符串:

总结

相关推荐

  1. 51单片机控制1602LCD字符滚动三

    2023-12-21 22:06:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 22:06:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 22:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 22:06:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 22:06:01       20 阅读

热门阅读

  1. dart 学习抽象类学习接口

    2023-12-21 22:06:01       37 阅读
  2. js实现给html加水印

    2023-12-21 22:06:01       37 阅读
  3. Android 8.0.0源码系统目录结构说明

    2023-12-21 22:06:01       35 阅读
  4. 深入理解 Rust 中的元编程

    2023-12-21 22:06:01       36 阅读
  5. FFmpeg实现RTSP推流

    2023-12-21 22:06:01       39 阅读
  6. 【重点】【DP】72.编辑距离

    2023-12-21 22:06:01       43 阅读
  7. Vue框架

    2023-12-21 22:06:01       36 阅读