51单片机 ——LCD1602液晶显示

一、基础知识

/****************  LCD1602和12864显示器   **************/
/*
一、章节目录
1.1 LCD显示器相关原理
1.2 开始学习LCD1602
        原理图和数据手册
        时序图和底层时序、函数封装
        高层时序、函数封装
        代码实践和调试
        
二、LCD12806

三、LCD简介
        1.1、显示器,常见显示器
        1.2、LCD液晶显示器,原理介绍
        1.3、LCD应用领域
        
    !2、电子显示器的原理
        1.1 像素(分辨率)
        1.2 显存,用于显示的内存
        1.3 字模
        1.4 字库
        1.5 控制器和驱动器
        1.6 软件+硬件实现功能

四、开始学习LCD1602
        1.1、1602 = 16*2,显示器显示两排,每排16个字符。能显示的字符数是32,但是像素数不是32,因为一个字符是由多个像素组成的。
                    有可能一个字符 = 5*7,35个像素组成,也有可能有6*8==48个像素组成
                    
        1.2、带ASCII码字库,不能显示中文。
                        当想让LCD1602显示某一字符时,只要将这个字符对应的ascii码发给16032内部控制器,控制器就会去查字库得到字模,
                        然后将字模发给内部的驱动器去驱动LCD做显示。
                        
        1.3、 用途: 

        1.4、接线图
                    (1)16个引脚: VO调节背光强弱。 RS\RW\E  3个引脚作为控制信号线, DB0-DB7 8个引脚用于数据通道/数据线的 4个ged+vcc
                     (2)并行接口:串行就是数据线只有1根,同时只能传输1个bit位,如果要传输多个bit位必须分时传输。一个字节8个bit分8次。
                                        而并行就是数据线有多根,每一根可以传输1个bit位,所以同时可以传输多个bit位。譬如lcd1602有8根数据线,
                                        所以一次同时传输8个bit位。
                        (3)背光亮度调节
                        (4)接线确认
        
五、开发板数据手册
        
            1.接口部分与编程有关的是RS(h:数据/ l:命令选择端),RW(h:读数据选择端/ l:写命令选择端),E三根控制线。
                                                            RS=1,D0-D7上传输的是数据
                                                            RS=0,D0-D7上传输的是命令
                                                            
                                                            RW=1,表示读
                                                            RW=0,表示写
                                                            E=1,使能
                                                            E=0, 禁止
                                                            D0-D7 8根数据线
            
        基本操作时序
1.1 读状态:输入: RS=0,RW=1,E=1                                          输出:D0-D7=状态字
1.2 写指令:输入: RS=0,RW=1,D0-D7=指令码,E=1高脉冲          输出:无
1.3 读数据:输入: RS=1,RW=1,E=1                                          输出:D0-D7=数据
1.4 写数据:输入: RS=1,RW=0,D0-D7=数据,E=1高脉冲                输出:D0-D7=状态字
            
        其中,写数据就是对应的ASCII码,
                    写指令就是设置显示模式。  指令码00111000 功能:设置16*2显示,5*7点阵,8位数据接口    
            
            参考lcd1602数据手册
*/
二、数据手册参考

长沙太阳人电子 SMC1602C液晶显示模块 说明书 - 百度文库 (baidu.com)

三、代码实践

分三个文件

1.   LCD1602.c文件

/*********************   LCD1602   *******************/

#include "LCD1602.h"


/*************  低层时序  ***********/

//   读状态 (读取lcd1602是否忙),并且每一次写指令和写数据时都需要读状态
void Read_Busy(void)   		// 1000 0000 最高是1时不允许读写   为0时允许读写
{
	unsigned char sta;  	// 用于保存lcd芯片输出的数据
	LCD1602_DB = 0XFF;   	//  初始化成1111 1111 是为了检测数据引脚最高位时1还是0 忙还是不忙
	LCD1602_RS = 0;
	LCD1602_RW = 1;
	do 
	{
		LCD1602_EN = 1;
		sta = LCD1602_DB;
		LCD1602_EN = 0;
	}while (sta & 0x80);   // 判断最高位是不是1
}

//  写指令
void Write_Order(unsigned char cmd)   // 写指令函数,向lcd1602芯片写入控制指令数据cmd
{
	Read_Busy();
	LCD1602_RS = 0;
	LCD1602_RW = 0;
	LCD1602_EN = 0;	

	LCD1602_DB = cmd; 
	LCD1602_EN = 1;
	LCD1602_EN = 0;	
}

// 写数据
void Write_data(unsigned char dat)
{
	Read_Busy();
	LCD1602_RS = 1;
	LCD1602_RW = 0;
	LCD1602_EN = 0;
	
	LCD1602_DB = dat; 
	LCD1602_EN = 1;
	LCD1602_EN = 0;		
}

/*****************  高层时序  ***************/

// 定义  <光标位置>  函数,每一行0-15
void Lcd_setcoord(unsigned char x, unsigned char y)  //坐标显示
{
	unsigned char addr;
	if(y == 0)			// y=0表示lcd 第1行 y=1表示lcd第2行
		addr = 0x00 + x;
	else
		addr = 0x40 + x;
	
	Write_Order(addr | 0x80);
}	


//  定义函数从   “光标x,y位置” Lcd_setcoord(x, y);  开始显示字符串str

void LCD_Show_Str(unsigned char x, unsigned char y, unsigned char *str)
{
	Lcd_setcoord(x, y);
	while(*str != '\0')
	{
			Write_data(*str++);
	}
}

// lcd初始化函数
void LCD_Init()
{
		Write_Order(0x38);
		Write_Order(0x08);
		Write_Order(0x01);
		Write_Order(0x06);
		Write_Order(0x0C);
}	

2.  LCD1602.h文件

#ifndef		__LCD1602_H__
#define		__LCD1602_H__

#include <reg51.h>

#define LCD1602_DB  P0  // 数据引脚

sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_EN = P2^7;



void Read_Busy(void);
void Write_Order(unsigned char cmd);
void Write_data(unsigned char dat);
void Lcd_setcoord(unsigned char x, unsigned char y);
void LCD_Show_Str(unsigned char x, unsigned char y, unsigned char *str);
void LCD_Init();


#endif

3. main函数文件

#include "LCD1602.h"

void main(void)
{
	LCD_Init();
	LCD_Show_Str(0, 0, "^_^12345!!!");
	LCD_Show_Str(0, 1, "shangshand");
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机是一种常用的单片机芯片,可以用来控制各种外设,包括液晶显示屏(LCD)。LCD1602是一种常见的液晶显示屏,能够显示16行2列的字符。 要编写51单片机的超声波测距程序,我们首先需要连接超声波模块和LCD1602显示屏到单片机上。超声波模块用来测量物体与传感器的距离,LCD1602显示屏用来显示测得的距离数值。 编写程序的主要步骤如下: 1. 在51单片机上配置超声波模块和LCD1602显示屏的引脚连接。这可以通过引用相应的库文件或手动配置引脚进行实现。 2. 初始化LCD1602显示屏。这包括设置显示模式、清除屏幕等操作。可以使用相应的函数或指令完成这些设置。 3. 初始化超声波模块。这需要设置超声波模块的引脚并进行一些初始化工作,例如设置发送和接收引脚、配置计时器等。 4. 在主循环中,通过发送触发信号并计算返回的高电平时间,测量超声波传感器与物体之间的距离。具体的测距算法可以根据超声波模块的型号和数据手册来选择。 5. 将测得的距离数值转换为字符,并将其显示LCD1602显示屏上。可以使用相应的函数或指令将字符写入到指定位置。 6. 可以根据需要在LCD1602显示屏上显示其他相关信息,例如单位、警告信息等。 7. 程序运行结束后,关闭超声波模块和LCD1602显示屏的相关引脚,并进行相应的清除和释放工作。 通过以上步骤,我们可以编写一个基本的51单片机的超声波测距程序,并将测得的距离数值显示LCD1602显示屏上。具体的代码可以根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值