51单片机——LCD1602液晶屏 C语言入门编程
目录
LCD1602:
数据指令:
字节写入时序:
1. LCD1602:LCD1602液晶上显示字符信息
LCD1602:
1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。写入显示地址时要求最高位D7恒定为高电平1。
数据指令:
//初始化
0X38 //八位数据接口,两行显示,5*7点阵
0X0C //显示开,光标关,闪烁关
0X06 //数据读、写操作后,AC自动加一,画面不动
0X01 //清除DDRAM和AC值,光标复位(清屏)
//显示位置
发送指令(0x80|(lie-1)); //设置光标位置80~8F
发送指令(0x80|(lie-1)+0x40); //设置光标位置C0~CF
字节写入时序:
不是所有的地址都可以直接用来显示字符数据,只有第一行中的00-0F,第二行中的40-4F才能显示,其他地址只能用于存储。要使用LCD1602,首先需要对其初始化,即通过写入一些特定的指令实现。 然后选择要在LCD1602的哪个位置显示并将所要显示的数据发送到LCD的DDRAM。
①当要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入(下降沿即可)。
②当要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入(下降沿即可)。 写指令和写数据,差别仅仅在于RS的电平不一样而已。
当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平, 注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽 度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是一个完整的LCD1602写命令的时序。
1. LCD1602:LCD1602液晶上显示字符信息
LCD1602函数
#include <REGX52.H>
#include "intrins.h"sbit LCD_RS=P2^6;
sbit LCD_WR=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DB P0void LCD_Delay1ms()//LCD1602延时1ms函数@11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}void LCD1602_WriteCommand(unsigned char Command)//写指令
{LCD_RS=0;LCD_WR=0;LCD_DB=Command;LCD_EN=1;LCD_Delay1ms();//延时 速度太快可能读不过来LCD_EN=0;LCD_Delay1ms();//延时 速度太快可能读不过来
}void LCD1602_WriteData(unsigned char Data)//写数据
{LCD_RS=1;LCD_WR=0;LCD_DB=Data;LCD_EN=1;LCD_Delay1ms();//延时 速度太快可能读不过来LCD_EN=0;LCD_Delay1ms();//延时 速度太快可能读不过来
}void LCD1602_Init(void)//初始化
{LCD1602_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵LCD1602_WriteCommand(0x0c);//显示开,光标关,闪烁关LCD1602_WriteCommand(0x06);//数据读、写操作后,AC自动加一,画面不动LCD1602_WriteCommand(0x01);//清除DDRAM和AC值,光标复位(清屏)
}void LCD1602_SetCursor(unsigned char hang,lie)//设置光标位置 1~2行,1~16列
{if(hang==1){LCD1602_WriteCommand(0x80|(lie-1));//第一行设置光标位置80~8F}else if(hang==2){LCD1602_WriteCommand(0x80|(lie-1)+0x40);//第二行设置光标位置C0~CF}
}void LCD1602_zifu(unsigned char hang,lie,Data)//显示字符 1~2行,1~16列,字符'*'
{LCD1602_SetCursor(hang,lie);LCD1602_WriteData(Data);
}void LCD1602_zifuchuan(unsigned char hang,lie,char *Datas)//显示字符串 1~2行,1~16列,字符串"**"
{unsigned char i;LCD1602_SetCursor(hang,lie);for(i=0;Datas[i]!='\0';i++) {LCD1602_WriteData(Datas[i]);}
}int LCD_Pow(int X,int Y)//返回值=X的Y次方
{unsigned char i;int Result=1;for(i=0;i<Y;i++){Result*=X;}return Result;
}void lCD1602_shuzi(unsigned char hang,lie,unsigned int Num,unsigned char wei)//显示十进制数字 1~2行,1~16列,数字0~65535,范围1~5
{unsigned char i;LCD1602_SetCursor(hang,lie);for(i=wei;i>0;i--){LCD1602_WriteData(Num/LCD_Pow(10,i-1)%10+'0');}
}void LCD1602_zfshuzi(unsigned char hang,lie,int zfNum,unsigned char wei)//显示有符号十进制数字 1~2行,1~16列,数字-32768~32767,范围1~5
{unsigned char i;unsigned int zfNumber;LCD1602_SetCursor(hang,lie);if(zfNum>=0){LCD1602_WriteData('+');zfNumber=zfNum;}else{LCD1602_WriteData('-');zfNumber=-zfNum;}for(i=wei;i>0;i--){LCD1602_WriteData(zfNumber/LCD_Pow(10,i-1)%10+'0');}
}void LCD1602_hex(unsigned char hang,lie,unsigned int hex,unsigned char wei)//显示十六进制数字 1~2行,1~16列,数字0~0xFFFF,范围1~4
{unsigned char i,hexnum;LCD1602_SetCursor(hang,lie);for(i=wei;i>0;i--){hexnum=hex/LCD_Pow(16,i-1)%16;if(hexnum<10){LCD1602_WriteData(hexnum+'0');}else{LCD1602_WriteData(hexnum-10+'A');}}
}void LCD1602_bin(unsigned char hang,lie,unsigned int bin,unsigned char wei)//显示二进制数字 1~2行,1~16列,数字0~1111 1111 1111 1111,范围1~16
{unsigned char i;LCD1602_SetCursor(hang,lie);for(i=wei;i>0;i--){LCD1602_WriteData(bin/LCD_Pow(2,i-1)%2+'0');}
}
主函数
#include <REGX52.H>
#include "LCD1602.h"void main()
{LCD1602_Init();LCD1602_zifu(1,1,'a');LCD1602_zifuchuan(1,3,"Hello");lCD1602_shuzi(1,9,12,5);LCD1602_hex(1,15,0xae,2);LCD1602_bin(2,1,0xaa,8);LCD1602_zfshuzi(2,10,-36,2);while(1){}
}
51单片机——LCD1602液晶屏 C语言入门编程相关推荐
- 51单片机LCD1602液晶屏显示字符,字符串,(有)无符号整数,十六进制数,二进制数等
1.前言 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块.液晶显示模块具有体积小.功耗低.显示内容丰富.超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD16 ...
- 电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键
电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键 这次课程设计要完成的是制作一个基于51单片机的电子时钟的万年历(protues仿真),需要用到1602液晶屏+DS130 ...
- 51单片机-LCD12864液晶屏
lcd12864液晶屏,有点复杂,只有基本的显示. #include <reg52.h> #include <intrins.h> #define uint unsigned ...
- LCD1602液晶屏使用(51单片机七夕特别版)
LCD1602液晶屏使用(51单片机七夕特别版) LCD1602简介 实现过程 操作时序 指令码 如何改变文本的样式 代码 效果图 今天是七夕节,周围的朋友啊小姐妹(伪)啊都跟对象出去玩了 囧rz,而 ...
- 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...
- 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)
目录 一.案例描述 二.实现功能 三.51单片机部分实现 3.1 实时时钟的实现 3.2 串口通信的实现 3.2.1 接收数据 3.2.2 发送数据 四.MATLAB部分实现 4.1 GUI界面 4. ...
- 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】
文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...
- 带中文字库的240128的c语言程序,51单片机-240128液晶程序与调试
原标题:51单片机-240128液晶程序与调试 今天终于把金鹏OCMJ8X15D-2液晶(240128点阵带字库无触屏液晶)调好了. 这块液晶能显示8行15个汉字,还有放大字形,从16*16点放大到3 ...
- 基于51单片机LCD1602显示
基于51单片机LCD1602显示 要在1602上显示字符,要大概明白1602液晶显示屏工作原理. 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶 ...
- 使用51单片机+lcd1602转接板-iic接口进行显示
使用51单片机+lcd1602转接板-iic接口进行显示 某宝上有卖lcd1602与iic芯片pcf8574的整合,虽然lcd1602能直接用51单片机使用,不过经过整合之后只需要对SCL和SDA两个 ...
最新文章
- 用树莓派的方式打开小米手机:摇晃手机控制小车,前进后退加转弯,成本不到350元 | 开源...
- java ftp 读取 txt文件_java通过ftp方式读取文件,并解析入库
- 用闭包实现重载的过程学习闭包
- JTextAre 文字右对齐 JTextArea دىكى خەتلەرنى ئوڭدىن س...
- 几种SQL取日期部分的方法
- TCP通信之获取本机IPV4地址
- cat EOF file
- kettle查询mysql获取uuid_java中调用kettle转换文件
- Spring全家桶视频教程
- 盘点城市智慧水务领域的英文期刊
- React09——使用脚手架编程
- 【Oracle】执行计划详解
- 微信云控的好处及云控与群控的差别,后续讨论微信不死号
- 【数学】有理分式的拆解技巧
- 上周热点回顾(4.9-4.15)
- 【满分】【华为OD机试真题2023 JAVAJS】查找重复代码
- oracle dul for windows 一键打开,oracle 数据恢复
- Navigation Controller 的常用操作
- 《软件工程》知识点复习总结
- cmd怎么删除流氓软件?