LCD1602液晶显示屏

介绍:LCD1602液晶显示屏是一种字符型液晶显示模块,可以显示ASCll码的标准字符和其他一些内置的特殊字符,还可以内置8个自定义字符。

显示容量:16✖2个字符,每个字符为5*7点阵或5*10点阵

一、引脚介绍:

VO:对比度调节电压

RS:数据 / 指令选择,1为数组,0为指令

RW:读 / 写选择,1为读,0为写

E:数据使能,下降沿执行命令

D0~D7:数据的输入 / 输出

A:背光灯电源正极

K:背光灯电源负极

 二、存储器结构:D2RAM(数据显示区)和G2RAM、G2ROM(内置字模库)

                                                      D2RAM(数据显示区)

        

                                                      G2RAM、G2ROM(内置字模库) 

 三、LCD1602显示指令集

四、时序结构:

                                                                写指令/数据

 

 

                                                               读指令/数据

五、模块函数化集成使用:

 代码:

void LCD_WriteCommand(unsigned char Command) //写指令
{
	LCD_RS=0;          
	LCD_RW=0;          
   // 指令 写

	LCD_DataPort=Command;  //并口:可以直接发送8位

	LCD_E=1;
	LCD_Delay1ms();
	LCD_E=0;
	LCD_Delay1ms();
}

代码:

void LCD_WriteData(unsigned char Data) //写数据
{
	LCD_RS=1;
	LCD_RW=0;
   //数据 写

	LCD_DataPort=Data;  //并口:直接发送8位

	LCD_E=1;
	LCD_Delay1ms();
	LCD_E=0;
	LCD_Delay1ms();
}

代码:

/**
   *   @brief        LCD1602初始化
   *   @param             无
   *   @retval            无
**/

void LCD_Init()
{
	LCD_WriteCommand(0x01);   //清屏
	LCD_WriteCommand(0x0C);   //显示开,光标关,闪烁开
	LCD_WriteCommand(0x06);   //数据读,写操作后,AC自动+1,画面不动
	LCD_WriteCommand(0x38);   //八位数据接口,两行显示,5✖7点阵
}

代码:

/**
   *   @brief         确定显示的首位置
   *   @param          Line,Column
   *   @retval            无
**/


void LCD_Cursor(unsigned char Line,Column)  //位置函数
{
	if(Line==1)   //根据数据显示区的地址可以得出 行和列 的关系
	{
		LCD_WriteCommand(0x80|(Column-1));
		
	}else
	{
		LCD_WriteCommand(0x80|(Column-1)+0x40);
	}
}

代码:

/**
   *   @brief           显示一个字符
   *   @param          Line,Column,Char
   *   @retval              无
**/
void LCD_ShowChar(unsigned char Line,Column,char Char)
{
	
	LCD_Cursor(Line,Column);  //确定位置
	LCD_WriteData(Char);      //发送字符
}

代码:

/**
   *   @brief       显示一个字符串
   *   @param       Line,Column,*String
   *   @retval            无
**/

void LCD_ShowString(unsigned char Line,Column,char *String)
{
	char Strlen=strlen(String),i; //确定字符串长度
	LCD_Cursor(Line,Column);      //确定首位置
	for(i=0;i<Strlen;i++)
	{
		LCD_WriteData(String[i]);
	}
	
}

代码:

/**
   *   @brief       显示一个数字
   *   @param     Line,Column,Num,lenth
   *   @retval           无
**/

void LCD_ShwoNum(unsigned char Line,Column,unsigned int Num,lenth)
{
	           char i;
		LCD_Cursor(Line,Column);
		for(i=lenth;i>0;i--)
	{
		LCD_WriteData(Num/(int)pow(10,i-1)%10+'0'); 
	}
            /*

                345/100%10   ->      3
                345/10%10    ->      4
                345/1%10     ->      5
                     
                                             */

}

代码:

/**
   *   @brief    显示一个有符号的数字
   *   @param      Line,Column,Num,lenth       
   *   @retval        无
**/

void LCD_ShowSignedNum(unsigned char Line,Column,int Num,unsigned int lenth)
{
		char i;
		if(Num>=0)
		{
			LCD_ShowChar(Line,Column,'+');
		}else
		{
			LCD_ShowChar(Line,Column,'-');
			Num=-Num;
		}
		
		for(i=lenth;i>0;i--)
	{
		LCD_WriteData(Num/(int)pow(10,i-1)%10+'0');
	}

         /*

                345/100%10   ->      3
                345/10%10    ->      4
                345/1%10     ->      5
                     
                                             */

}

代码:

/**
   *   @brief    显示一个十六进制的数
   *   @param     Line,Column,Num,lenth 
   *   @retval         无
**/

void LCD_ShowHexnum(unsigned char Line,Column,unsigned int Num,lenth)
{
	    unsigned char i;
		unsigned char SingleNum;
	  LCD_Cursor(Line,Column);
		for(i=lenth;i>0;i--)
	{
		
		SingleNum=((Num/(int)pow(16,i-1)%16));

         /*

                345/16^2%16   ->     1
                345/16%16    ->      5
                345/1%16     ->      9
                     
                                             */   

		if(SingleNum<10)   //根据ASCll码进行补码
		{
			LCD_WriteData('0'+SingleNum);
		}else
		{
			LCD_WriteData('A'+SingleNum-10);
		}
               
		
	}
}

代码:

/**
   *   @brief           显示一个二进制数字
   *   @param         Line,Column,Num,lenth  
   *   @retval                 无
**/

void LCD_BinNum(unsigned char Line,Column,unsigned int Num,lenth)
{
		unsigned char i;
	  LCD_Cursor(Line,Column);
		for(i=lenth;i>0;i--)
	{
		
		LCD_WriteData((Num/(int)pow(2,i-1)%2)+'0');	
     /*

                345/2^2%2   ->      101
                345/2%2     ->      011
                345/1%2     ->      001
                     
                                             */ 

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值