单片机c语言1602怎么接线,lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图 - 全文...
lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的字符,因为液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动,以最常见普遍的向列型液晶为例,液晶分子可轻易的借着电场作用使得液晶分子转向,由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将借着其本身的弹性及黏性,液晶分子将十分迅速的回撤消来未加电场前的状态。
lcd1602液晶屏就是通过电压来改变填充在两块平行板之间的液晶材料内部分子的排列状况,以达到遮光和透光的目的来显示深浅不一,错落有致的图象,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图象。
lcd1602中文资料---LCD1602液晶屏特点
a. 显示质量高
由于1602LCD每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。
b. 数字式接口
1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
c. 体积小、重量轻
1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。
d. 功耗低
相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示屏要少得多。
液晶显示模块LCD1602的内部结构可以分成三部分:一为LCD控制器,二为LCD驱动器,三为LCD显示装备。
lcd1602中文资料---lcd1602接线图
在了解LCD1602接线图之前,我们先看看LCD1602的引脚定义图。
1脚:VSS为接地;
2脚:VDD接5V电源VCC;
3脚:VO为液晶显示器对比度调整;VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。
4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;
5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;
6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;
7~14脚:D0~D7为8位双向数据线;
15脚:背光电源正极;
16脚:背光电源负极。
LCD1602液晶显示模块可以和单片机AT89C51直接接口接线:
也可以按照下图显示的电路图接线即可,需要说明的是在这个电路图中,LCD的第三脚VEE没有接,这个脚是控制屏幕对比度的。可以将电位器的两端分别接VCC和GND,中间端接LCD的第三脚。
lcd1602中文资料---1602LCD主要技术参数
显示容量:16×2个字符 ;芯片工作电压:4.5—5.5V ;工作电流:2.0mA(5.0V) ;模块最佳工作电压:5.0V ;字符尺寸:2.95×4.35(W×H)mm。
LCD1602的基本操作分为四种:
1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。
2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。
3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。
4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。
时序时间参数表:
lcd1602中文资料----lcd1602与单片机连接图
LCD1602如何接单片机了?给大家分享一个LCD1602接单片机原理PCB图如下:
代码如下:
#include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include《intrins.h》
sbit RS = P2^4; //定义端口
sbit RW = P2^5;
sbit EN = P2^6;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
// while(LCD_Check_Busy()); //忙则等待
DelayMs(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
写入数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙则等待
DelayMs(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
清屏函数
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
}
/*------------------------------------------------
主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用]
------------------------------------------------*/
void main(void)
{
LCD_Init();
LCD_Clear();//清屏
while (1)
{
LCD_Write_Char(7,0,‘o’);
LCD_Write_Char(8,0,‘k’);
LCD_Write_String(1,1,“www.doflye.net”);
while(1);
}
}
lcd1602中文资料-----LCD1602的3引脚VO怎么接
VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
LCD1602的VO引脚必须不能悬空,要连接一个滑动变阻器来调节的,当然LCD1602有多种型号,但是大多数的VO脚只有两种情况:一个是VO脚接18欧的下拉电阻接地,一个是接1k欧的电阻接地,当然,也可以接个滑动变阻器更好。
一般用上图,具体看看你LCD1602的技术手册说明VO引脚的具体情况
lcd1602与单片机连接图----实例解读
下面我们分享以一个实例。LCD1602的型号是16条引脚的HJ1602A;单片机最小系统(扩充了外部RAM 62256),采用STC89C52RC,晶振22.1184MHZ。以5×8点阵,16×2行,8位数据端口。首先在第一行显示“I love MCU!”,第二行显示“LCD1602 Test!”。延时一段时间,清屏。然后在第一行显示自定义字符:摄氏温标标志。第二行显示圆周率(pai)标志。再延时一段时间,清屏。最后在第一行显示“Welcome to my blog!”,显示方式是从屏幕右面移入,左面移出。周而复始。
//File1
#ifndef __ZHANGTYPE_H__
#define __ZHANGTYPE_H__
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long int
#define int8 signed char
#define int16 signed short int
#define int32 signed long int
#define uint64 unsigned long long int
#define int64 signed long long int
#endif
//File2
#ifndef __FUN_H__
#define __FUN_H__
#include “ZhangType.h”
#include
void Delay(uint16 time);
#endif
//File3
#include “fun.h”
void Delay(uint16 TIme)
{
while(TIme--);
}
//File4
#ifndef __1602_H__
#define __1602_H__
#include
#include “ZhangType.h” //变量类型
#include “fun.h” //常用函数
#define SETMODE 0x38 //16*2显示,5*7点阵,8位数据接口
#define DISOPEN 0x0C //显示开,不显示光标,光标不闪烁
#define DISMODE 0x06 //读写字符后地址加1,屏显不移动
#define SETADDR 0x80 //设置数据地址指针初始值
#define CLEAR 0x01 //清屏,数据指针清零
#define RET 0x02 //回车,数据指针清零
#define PORT P2 //I/O口
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void Init1602(void); //初始化1602
void Write1602_Com(uint8 com); //写命令
void Write1602_Dat(uint8 dat); //写数据
void CheckBusy(void); //检查忙
void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat); //写一个数据
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf); //写一个数据串
#endif//
//File5
#include “1602.h”
void Write1602_Com(uint8 com)
{
E=0;
RS=0; //命令
Delay(50); //延时
RW=0; //写
Delay(50);
PORT=com; //端口赋值
Delay(50);
E=1; //高脉冲
Delay(50);
E=0;
}
void Write1602_Dat(uint8 dat)
{
E=0;
RS=1; //数据
Delay(50); //延时
RW=0; //写
Delay(50);
PORT=dat; //端口赋值
Delay(50);
E=1; //高脉冲
Delay(50);
E=0;
}
void CheckBusy(void)
{
uint8 temp;
RS=0; //命令
RW=1; //读
E=0;
while(1)
{
PORT=0xFF; //端口为输入
E=1; //高脉冲
temp=PORT;
E=0;
if ((temp&0x80)==0) //检查BF位是否为0
break;
}
}
void Init1602(void)
{
Write1602_Com(SETMODE); //模式设置
Delay(500);
Write1602_Com(DISOPEN); //显示设置
Delay(500);
Write1602_Com(DISMODE); //显示模式
Delay(500);
Write1602_Com(CLEAR); //清屏
Delay(500);
}
void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)
{
x&=0x0f;
y&=0x01;
if(y)
x|=0x40;
x|=0x80;
Write1602_Com(x);
Write1602_Dat(dat);
}
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)
{
uint8 i;
Write1602_Com(addr);
for(i=0;i
{
Write1602_Dat(pbuf[i]);
}
}
//File6
*******************************************************
*名称:主文件(_main.c)
*功能:测试
*日期:2014/09/09
*******************************************************/
#include “1602.h”
#include “fun.h”
uint8 code hot[8]={ //摄氏温度字模
0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00
};
uint8 code pi[8]={
0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00 //pai
};
uint8 code strMCU[]=“I love MCU!”;
uint8 code strTest[]=“LCD1602 Test!”;
uint8 code blog[]=“Welcome to my blog!”;
uint8 i;
void main()
{
Init1602(); //初始化1602
//自定义CGRAM
Write1602_Str(0x40,8,hot); //摄氏温标
Write1602_Str(0x48,8,pi); //pai
Write1602_Str(0x80,strlen(strMCU),strMCU); //“I love MCU!”
Write1602_Str(0x80+0x40,strlen(strTest),strTest); //“LCD1602 Test!”
for(i=0;i《50;i++) //延时一段时间
Delay(10000);
Write1602_Com(CLEAR); //指令执行时间较长
Delay(500); //多加一些延时
for(i=0;i《16;i++)
Write1602_Dat(0);
Write1602_Com(0xc0); //设置DDRAM地址
for(i=0;i《16;i++)
Write1602_Dat(1);
for(i=0;i《50;i++) //延时一段时间
Delay(10000);
Write1602_Com(CLEAR); //指令执行时间较长
Delay(500); //多加一些延时
Write1602_Str(0x80+0x10,strlen(blog),blog); //写在显示之外
while(1)
{
Write1602_Com(0x18); //左移
for(i=0;i《20;i++) //延时
Delay(10000);
}
}
//####### THE END ######
lcd1602与单片机连接图----LCD1602与8051单片机接线图
下图是LCD1602与8051单片机的接口图,图中LCD1602的数据线与8051的P2口相连,RS与8051的P1.7相连,R/W与8051的P1.6相连,E端与8051的P1.5相连。编程在LCD显示器的第1行、第1列开始显示“HOW”,第2行、第5列开始显示“ARE YOU!”。
LCD1602与8051单片机接线图
汇编语言程序:
RS BIT P1.7
RW BIT P1.6 E BIT P1.5 ORG 00H AJMP START
ORG 50H ;主程序
START: MOV SP,#50H ACALL INIT
MOV A,#10000000B ;写入显示缓冲区起始地址为第1行第1列 ACALL WC51R
MOV A,#‘H’ ;第1行第1列显示字母‘H’ ACALL WC51DDR MOV A,#‘O’ ;第1行第2列显示字母“O” ACALL WC51DDR MOV A,#‘W’ ;第1行第3列显示字母‘W’
ACALL WC51DDR
MOV A,#11000100B ;写入显示缓冲区起始地址为第2行第5列 ACALL WC51R
MOV A,#‘A’ ;第2行第5列显示字母‘A’ ACALL WC51DDR MOV A,#‘R’ ;第2行第6列显示字母‘R’ ACALL WC51DDR MOV A,#‘E’ ;第2行第7列显示字母‘E’ ACALL WC51DDR MOV A,#‘ ’ ;第2行第8列显示字母‘ ’ ACALL WC51DDR MOV A,#‘Y’
;第2行第9列显示字母‘Y’
ACALL WC51DDR
MOV A,#‘O’ ;第2行第10列显示字母‘O’ ACALL WC51DDR MOV A,#‘U’ ;第2行第11列显示字母‘U’ ACALL WC51DDR MOV A,#‘!’
;第2行第12列显示字母‘!’
ACALL WC51DDR LOOP: AJMP LOOP ;初始化子程序
INIT: MOV A,#00000001H ;清屏
ACALL WC51R MOV A,#00111000B ;使用8位数据,显示两行,使用5×7的字型 LCALL WC51R MOV A,#00001100B ;显示器开,光标关,字符不闪烁 LCALL WC51R MOV A,#00000110B
;字符不动,光标自动右移一格
LCALL WC51R RET ;检查忙子程序 F_BUSY:PUSH ACC ;保护现场
MOV P2,#0FFH CLR RS SETB RW WAIT: CLR E SETB E JB P2.7,WAIT
;忙,等待
POP ACC ;不忙,恢复现场
RET ;写入命令子程序 WC51R: ACALL F_BUSY CLR E CLR RS CLR RW SETB E MOV P2,ACC CLR E RET ;写入数据子程序 WC51DDR:ACALL F_BUSY CLR E SETB RS CLR RW SETB E MOV P2,ACC CLR E RET END
C语言编程:
#include 《reg51.h》
#define uchar unsigned char sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5;
void init(void);
void wc51r(uchar i); void wc51ddr(uchar i); void fbusy(void);
//主函数
void main() {
SP=0x50; init();
wc51r(0x80); //写入显示缓冲区起始地址为第1行第1列 wc51ddr(’H’); //第1行第1列显示字母’H’ wc51ddr(’O’); //第1行第2列显示字母’O’ wc51ddr (’W’); //第1行第3列显示字母’W’
wc51r(0xc4); //写入显示缓冲区起始地址为第2行第5列 wc51ddr(’A’); //第2行第5列显示字母’A’ wc51ddr(’R’); //第2行第6列显示字母’R’ wc51ddr(’E’); //第2行第7列显示字母’E’ wc51ddr(’ ’); //第2行第8列显示字母’ ’ wc51ddr(’Y’); //第2行第9列显示字母’Y’ wc51ddr(’O’); //第2行第10列显示字母’O’ wc51ddr(’U’); //第2行第11列显示字母’U’ wc51ddr(’!’); //第2行第11列显示字母’!’ while(1); }
//初始化函数 void init() {
wc51r(0x01); //清屏
wc51r(0x38); //使用8位数据,显示两行,使用5×7的字型 wc51r(0x0c); //显示器开,光标关,字符不闪烁 wc51r(0x06); //字符不动,光标自动右移一格 }
//检查忙函数 void fbusy() {
P2=0Xff;RS=0;RW=1; E=0; E=1;
while (P2&0x80){E=0;E=1;} //忙,等待 }
//写命令函数
void wc51r(uchar j) {
fbusy();
E=0;RS=0;RW=0; E=1; P2=j; E=0; }
//写数据函数
void wc51ddr(uchar j) {
fbusy();
E=0;RS=1;RW=0; E=1; P2=j; E=0; }
小编推荐阅读:
单片机c语言1602怎么接线,lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图 - 全文...相关推荐
- hc05与单片机连接图_lcd1602接线图_lcd1602与单片机连接图
lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠.lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶 ...
- 51单片机c语言应用开发三位一体实战精讲 pdf 119网盘,51单片机C语言应用开发三位一体实战精讲.pdf...
燎舍黪曩饔黠抽璇漩 黏 地丛书 刘波文 ∷ :著 对 向 编 策划编辑 :胡晓柏 : 正 圭 飚翻 Ξ∶ 蓝设计 寸面设计 8Π 颥曩曩罂 内容简介 51系 (SO51/ATSg)为 工程 心 全书以 ...
- 51单片机c语言485通讯案例,485通讯协议程序怎么写(51单片机的485通信程序案例)...
RS-485总线接口是一种常用的串口,具有网络连接方便.抗干扰性能好.传输距离远等优点.RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检测到低达20 ...
- 单片机c语言怎么实现按键松开,灯还保持松开前的状态,单片机C语言程序设计:K1-K4按键状态显示...
时间:2013-05-22 15:40:01 /* 名称:K1-K4 按键状态显示 说明:K1.K2 按下时 LED 点亮,松开时熄灭, */ K3.K4 按下并释放时 LED 点亮,再次按下并释 ...
- 单片机c语言三种经典程序结构,单片机C语言程序的结构和设计精选.docx
单片机C语言程序的结构和设计精选 实验五 单片机C语言程序的结构和设计一.实验目的1. 掌握单片机C语言的程序结构:2. 掌握单片机C语言程序的编写和调试方法:3. 掌握MSP430FG2553基本I ...
- 在单片机c语言中 p1^0 = 1 实现了什么功能?,用单片机C语言来实现相思病
如果刚开始看到这个题目的时候是不是觉得疑惑呢?"相思病"是什么?"相思病"就是我们平常所说的心病.写这个文章的目的在于启发我们的思想,其实编程思想很简单,就是把 ...
- c语言程序设计中常用语句,单片机C语言编程常用语句
<单片机C语言编程常用语句>由会员分享,可在线阅读,更多相关<单片机C语言编程常用语句(22页珍藏版)>请在人人文库网上搜索. 1.C51程式设计一般陈述式摘要,1,C51 S ...
- 适合自学单片机c语言教材,单片机编程入门看什么书 盘点单片机初学者适合看的书...
本篇文章盘点:单片机编程入门看什么书.其实学习单片机重点就是C语言,其次实践重要,学习单片机不光要看书,建议初学者多多实践,自己做一些尝试性的开发.话不多说,下面就来盘点,初学者单片机编程入门适合看什 ...
- c语言闪烁灯程序,单片机c语言闪烁灯程序
<单片机c语言闪烁灯程序>由会员分享,可在线阅读,更多相关<单片机c语言闪烁灯程序(3页珍藏版)>请在人人文库网上搜索. 1.1 闪烁灯1 实验任务如图4.1.1 所示:在P1 ...
- 单片机定时器精准定时_用单片机C语言精确延时(定时)的方法
最近在忙着单片机的项目,偶尔停下来小结了一下最近的收获,还是有不少可贵的收益的. 本人在闲暇的时候对单片机C语言下的各类延时程序做了下总结.由于单片机C语言下利用软件延时不容易做到精确的定时,所以很多 ...
最新文章
- C#:添加web service引用
- mysql user 用户名长度_为什么注册的用户账号长度不能超过5个字符
- P4124 [CQOI2016]手机号码
- Kanade Doesn’t Want to Learn CG 模拟,读题训练,临界
- mysql ---- innodb-1- 体系结构、文件、表
- 移动web开发调试工具AlloyLever介绍
- 大数据面试题总结(附答案)
- Python技术知识清单(数据科学)
- 编写的软件在运行时界面不能移动_常用软件开发工具介绍
- 如何提升深度学习的性能
- 冒泡排序满分代码(C语言),附源代码,可直接运行
- 12306购票辅助工具
- python通过ssh链接sql(python通过阿里跳板机链接阿里数据库)
- Python3 数据库(MySQL/MongoDB/Redis)
- 企业邮箱服务该怎么选择?
- supermap使用idesktop发布二三维管线地图
- 矩阵函数和线性方程组
- 遭遇美国TRO,原告律所撤诉后多久可以解冻?
- uniapp 获取当前视频播放时长,视频总时长
- SuperMap iDesktop 从零开始创建 C# 类库进行插件开发
热门文章
- Vivado使用流程(文字总结)
- 晨曦记账本记账,导出账目保存表格
- Java JDK中文帮助文档免费下载,百度网盘下载。
- Pandas-常用统计分析方法 describe、quantile、sum、mean、median、count、max、min、idxmax、idxmin、mad、var、std、cumsum
- abb的knx的数据库下载方法_ABB i-bus KNX系统节能方案
- linux内核移植imx8,iMX8模块Ubuntu移植
- 基于Hadoop的hbase安装
- java疯狂讲义 摘录
- svn分支合并到主干(Merge)
- 软件测试简历职业规划怎么写,职业规划测试