1602液晶显示器代码

1602液晶显示器代码
1602液晶显示器代码

1602液晶显示器代码

int DI = 8;

int RW = 9;

int DB[] = {0, 1, 2, 3, 4, 5, 6, 7};//使用数组来定义总线需要的管脚

int Enable = 10;

void LcdCommandWrite(int value){

// 定义所有引脚

int i = 0;

for(i=DB[0]; i <= DI; i++)//总线赋值

{

digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。

value >>= 1;

}

digitalWrite(Enable,LOW);

delayMicroseconds(1);

digitalWrite(Enable,HIGH);

delayMicroseconds(1); // 延时1ms

digitalWrite(Enable,LOW);

delayMicroseconds(1); // 延时1ms

}

void LcdDataWrite(int value){

// 定义所有引脚

int i = 0;

digitalWrite(DI, HIGH); digitalWrite(RW, LOW);

for(i=DB[0]; i <= DB[7]; i++){ digitalWrite(i,value & 01); value >>= 1;

}

digitalWrite(Enable,LOW); delayMicroseconds(1);

digitalWrite(Enable,HIGH); delayMicroseconds(1);

digitalWrite(Enable,LOW); delayMicroseconds(1); // 延时1ms }

void setup(void){

int i = 0;

for(i=Enable; i <= DI; i++){

pinMode(i,OUTPUT);

}

delay(100);

// 短暂的停顿后初始化LCD

// 用于LCD控制需要

LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(64);

LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(50);

LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(20);

LcdCommandWrite(0x06); // 输入方式设定

// 自动增量,没有显示移位

delay(20);

LcdCommandWrite(0x0E); // 显示设置

// 开启显示屏,光标显示,无闪烁

delay(20);

LcdCommandWrite(0x01); // 屏幕清空,光标位置归零

delay(100);

LcdCommandWrite(0x80); // 显示设置

// 开启显示屏,光标显示,无闪烁

delay(20);

}

void loop(void){

LcdCommandWrite(0x01); // 屏幕清空,光标位置归零

delay(10);

LcdCommandWrite(0x80+3);

delay(10);

// 写入欢迎信息

LcdDataWrite('W');

LcdDataWrite('e');

LcdDataWrite('l');

LcdDataWrite('c');

LcdDataWrite('o');

LcdDataWrite('m');

LcdDataWrite('e');

LcdDataWrite(' ');

LcdDataWrite('t');

LcdDataWrite('o');

delay(10);

LcdCommandWrite(0xc0+1); // 定义光标位置为第二行第二个位置

delay(10);

LcdDataWrite('g');

LcdDataWrite('e');

LcdDataWrite('e');

LcdDataWrite('k');

LcdDataWrite('-');

LcdDataWrite('w');

LcdDataWrite('o');

LcdDataWrite('r');

LcdDataWrite('k');

LcdDataWrite('s');

LcdDataWrite('h');

LcdDataWrite('o');

LcdDataWrite('p');

delay(5000);

LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);

LcdDataWrite('I');

LcdDataWrite(' ');

LcdDataWrite('a');

LcdDataWrite('m');

LcdDataWrite(' ');

LcdDataWrite('h');

LcdDataWrite('o');

LcdDataWrite('n');

LcdDataWrite('g');

LcdDataWrite('y');

LcdDataWrite('i');

delay(3000);

LcdCommandWrite(0x02); //设置模式为新文字替换老文字,无新文字的地方显示不变。delay(10);

LcdCommandWrite(0x80+5); //定义光标位置为第一行第六个位置

delay(10);

LcdDataWrite('t');

LcdDataWrite('h');

LcdDataWrite('e');

LcdDataWrite(' ');

LcdDataWrite('a');

LcdDataWrite('d');

LcdDataWrite('m');

LcdDataWrite('i');

LcdDataWrite('n');

delay(5000); }

LCD1602液晶显示器

实验11:1602液晶显示屏显示(字符型液晶显示器) 字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。这类液晶显示器通常 有16根接口线,下表是这16根线的定义。 字符型液晶接口说明 编号符号引脚说明编号符号引脚说明 1 Vss 电源地 9 D 2 数据线2 2 Vdd 电源正 10 D 3 数据线3 3 VL 液晶显示偏压信号 11 D 4 数据线4 4 RS 数据/命令选择端 12 D 5 数据线5 5 R/W 读/ 写选择端 13 D 6 数据线6 6 E 使能信号 14 D 7 数据线7 7 D0 数据线0 15 BLA 背光源正极 8 D1 数据线1 16 BLK 背光源负极(本学习板配的 内部已经接地) 下图是字符型液晶显示器与单片机的接线图。这用了P0口的8根线作为液晶显示器的数据 线,用P20、P21、P22做为3根控制线。

字符型液晶显示器与单片机的接线图 字符型液晶显示器的使用,字符型液晶显示器一般采用HD44780芯片做为控制器的。 1.字符型液晶显示器的驱动程序 这个驱动程序适用于1602型字符液晶显示器, 1) 初始化液晶显示器命令(RSTLCD) 设置控制器的工作模式,在程序开始时调用。 参数:无。 2) 清屏命令(CLRLCD) 清除屏幕显示的所有内容 参数:无 3) 光标控制命令(SETCUR) 用来控制光标是否显示及是否闪烁 参数:1个,用于设定显示器的开关、光标的开关及是否闪烁。 4) 写字符命令(WRITECHAR) 在指定位置(行和列)显示指定的字符。

参数:共有3个,即行值、列值及待显示字符,分别存放在XPOS、YPOS和A中。其中行值与列值均从0开始计数,A中可直接写入字符的符号,编译程序自动转化为该字符的ASCII 值。 5) 字符串命令(WRITESTRING) 在指定位置显示指定的一串字符。 参数:共有3个,即行值、列值和R0指向待显示字符串的内存首地址,字符串须以0结尾。如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下 行显示出来。 以下是驱动源程序 ;************************************************** ;连线图: ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.0 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.1 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P2.2 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接1K电阻到GND* ;系统晶振为11.0592 ;************************************************** RS BIT P2.0 RW BIT P2.1 E BIT P2.2 DPORT EQU P0 XPOS EQU R1 ;列方向地址指针 YPOS EQU R2 ;行方向地址指针 CUR EQU R3 ;设定光标参数 NoDisp EQU 0 ;无显示 NoCur EQU 1 ;有显示无光标 CurNoFlash EQU 2 ;有光标但不闪烁 CurFlash EQU 3 ;有光标且闪烁

lcd1602四线驱动

LCD1602 4 位数据线连接方式驱动程序(转载) 2008-10-14 11:00 LCD1602 4 位数据线连接方式驱动程序(转载) /* 单片机 I/O口使单片机资源的重要组成部分,也是用来扩展外围设备的必选资源, 尽可能以更少的 I/O口实现更多的功能是单片机工程师追求的目标,现在的一些串 行器件也为这一目标的实现添加了更多的可能性,比如 I2C总线,MAXIM 力推 的 1-WIRE 等等,都可以以很少的I/O 口实现更多的功能,当然这是以降低一定的速度 为代价的。 显示器件多见的是 LED数码管,LCD 液晶屏等。一般的数码管成本低廉,在显示内 容要求不多的时候适用;LCD 液晶屏以更多的显示空间得到了许多人的爱好,不过 成本上要高的多(市场价在 20元左右),本文以 LCD1602为例说明如何驱动液晶屏。 LCD1602 外接的控制接口有RS,R/W,E;数据接口为 DB7--DB0。总共有11 跟 线与单 片机的 I/O口连接,若使用标准的 51单片机,至少占用了一个端口再加上另一个端 口的部分 I/O 口。这再很多应用场合是不大可取的。所以很有必要减少连接数。从 其数据手册上介绍的 4线连接方式可以达到只使用 7个 I/O口即可满足要求,其中为 3 个控制口 RS , R/W , E 和数据口的 DB7--DB 4 ;写入数据或指令的顺序是先写高半个 字节,再写低半个字节。 其中 P2 口的高四位接到 LCD1602 的 DB7-DB4,P2.2-P2.3 分别接 RS,E; RW 接地

下面给出驱动源程序*/ /* -------------------------------------------------------- 液晶 LCD1602C 使用4 条数据线(D4~D7) ---------------------------------------------------------- */ /* ------------------------------------------------------------ LCD 引脚定义 1---GND 2---VCC 3---VO 4---RS 5---RW 6---EN 7 到 14--D0-D7 15--背景灯+ 16--背景灯- ---------------------------------------------------------------- */ #include #include #define LCD_DATA P2 sbit LCD1602_RS=P2^2; sbit LCD1602_EN=P2^3; //1602_RW 接地 int p=0; /* 函数说明 ----------------------------- */ void LCD_init(void);

1602字符型液晶显示器

1602字符型液晶显示器 在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。 1602字符型LCD简介: 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图10-53: 图10-53 1602字符型液晶显示器实物图 1602LCD的基本参数及引脚功能: 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:

图10-55 读操作时序 图10-56 写操作时序 1602LCD的RAM地址映射及标准字库表: 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。

图10-57 1602LCD内部显示地址 例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 图10-58 字符代码与图形对应图

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

LCD1602液晶显示器设计

LCD1602液晶显示课程设计 第一章绪论 1.1课题背景 当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display)为代表的平板显示器发展最快,应用最广。LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。 液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。 1.2课题设计目标 本设计是基于AT89C51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。本次设计的目的在于利用单片机和IIC技术来显示英文字母。 1.3课程设计的主要工作 (1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。 (2)熟悉所选芯片的功能并完成具体电路设计。

(3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。 1.4 设计要求 (1)运行IIC总线技术。 (2)循环显示字母。 第二章硬件设计 2.1 LCD1602简介 2.1.1 LCD1602引脚功能 LCD1602引脚如图2.1所示 图2.1 LCD1602引脚图 引脚图的功能如表2—1所示

51单片机任意2个IO口驱动LCD1602

51单片机任意2个IO口驱动LCD1602 相信大家对1602显示屏已经十分熟悉,驱动方式有8线制(需要11根线)和4线制(需要7根线),这里为大家推荐一种只需要2根线就能驱动1602的方法。 之前在网上见到Arduino通过IIC驱动1602的实例,本人完全不懂Arduino程序,看了一下驱动电路,发现PCF8574这个关键芯片,它就相当于一个桥梁,将IIC总线转换为8位准双向口。 思路 1、单片机通过IIC与PCF8574进行通信。 首先写好IIC通信程序,网上到处都是IIC通信程序,很容易找。PCF8574 的器件地址为40h,由于硬件地址引脚A0-A2可寻址8 个器件,所以器件地址并不唯一,具体说明大家去查查PCF8574芯片手册。 2、单片机4线制驱动1602 网上也有很多相关程序,我就不再多说。4线制驱动方式需要7个IO口(RS、RW、E 和4条数据线),而PCF8574提供了8位准双向口,所以管脚还有剩余。 3、IIC通信程序和1602的4线制驱动程序相结合 4、51单片机任意2个IO口驱动1602成功!!!。 (我只是个业余爱好者,要是各位觉得太低端那就见谅了) 驱动电路图 效果图

实物图

Proteus仿真

程序 #include #include sbit SCL = P3^0; sbit SDA = P3^1; bit ack; unsigned char LCD_data; unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字//*****************延时************************ void delay_nus(unsigned int n) //N us延时函数 { unsigned int i=0; for (i=0;i

LCD1602资料及单片机对其驱动

技术支持:https://www.360docs.net/doc/9316369455.html,/bbs 主 讲:wang1jin Wang1jin 带您从零学单片机 配套开发板:WJ-V4.0 AVR+51开发板 第三章:LCD 部分

技术支持:https://www.360docs.net/doc/9316369455.html,/bbs 主 讲:wang1jin 单片机驱动LED ?LCD1602简介 ?LCD1602硬件原理图?LCD1602工作方式?LCD1602时序及应用?LCD1602显示应用流程 ?实例操作:在LCD1602上显示一个字符?实例操作:在LCD1602上显示一串字符?实例操作:在LCD1602上显示自定义图形

这里介绍的字符型液晶模块是一种用 5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用常用的2行16个字的LCD1602液晶模块来介绍它的编程方法。 技术支持:https://www.360docs.net/doc/9316369455.html,/bbs 主讲:wang1jin

LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其代码与标准的ASCII字符代码一致。因此,我们只要写入显示字符的ASCII码即可,这种标准化的设计给使用带来很大的方便。 比如大写的英文字母“A”的ASCII代码是01000001B (41H),显示时单片机往液晶模块写入显示指令,模块就把地址41H中的点阵字符图形显示出来,我们就能在相应位置上看到字母“A”。 技术支持:https://www.360docs.net/doc/9316369455.html,/bbs 主讲:wang1jin

手机拨号矩阵键盘控制lcd1602

手机拨号矩阵键盘控制lcd1602 #include #include #define uint unsigned int #define uchar unsigned char sbit RS=P2^0; sbit RW=P2^1; sbit EP=P2^2; uchar num[12]={"0123456789*#"}; void delay(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=115;j>0;j--); } uchar busy_check()//忙碌 { uchar result; RS=0; RW=1; EP=1; _nop_(); _nop_(); _nop_(); result=P0&0x80;

EP=0; return result; } void cmd(uchar x)//指令{ while(busy_check()); RS=0; RW=0; EP=0; _nop_(); _nop_(); _nop_(); P0=x; _nop_(); _nop_(); _nop_(); EP=1; _nop_(); _nop_(); _nop_(); EP=0; } void date(uchar y)//数据{ while(busy_check()); RS=1; RW=0; EP=0; _nop_(); _nop_(); _nop_(); P0=y; _nop_(); _nop_(); _nop_(); EP=1; _nop_(); _nop_(); _nop_(); EP=0; } void init()//初始化 {

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

LCD1602液晶显示实验要点

实验报告 实验名称: [LCD1602液晶显示实验]姓名: 学号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院

LCD1602液晶显示实验 1.实验原理 1.1 基本原理 1.1.1 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。 1.1.2 1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示: 图1-2 1602LCD尺寸图 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95×4.35(W×H)mm 2.引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表: 表1-3引脚接口说明表 编 符号引脚说明编号符号引脚说明 号 1 VSS 电源地9 D 2 数据 2 VDD 电源正极10 D 3 数据 3 VL 液晶显示偏压11 D 4 数据 4 RS 数据/命令选择12 D 5 数据 5 R/W 读/写选择13 D 6 数据 6 E 使能信号14 D 7 数据 7 D0 数据15 BLA 背光源正极 8 D1 数据16 BLK 背光源负极

1.1.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表1-4所示: 表1-4 控制命令表 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示0 0 0 0 0 0 0 0 0 1 2 光标返回0 0 0 0 0 0 0 0 1 * 3 置输入模式0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制0 0 0 0 0 0 1 D C B 5 光标或字符移位0 0 0 0 0 1 S/C R/L * * 6 置功能0 0 0 0 1 DL N F * * 7 置字符发生存贮器 地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或 DDRAM) 1 0 要写的数据内容 11 从CGRAM或 DDRAM读数 1 1 读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示: 图1-5 读操作时序

LCD1602按键盘输入显示

名称:LCD1602 论坛:https://www.360docs.net/doc/9316369455.html, 编写:shifang 日期:2009.5 修改:无 内容:通过矩阵键盘输入,依次显示0-F16中字符 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include 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 #define KeyPort P1 unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//转换成液晶显示的字符 /*------------------------------------------------ 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,精确延时请使用汇编

[VHDL代码]LCD1602驱动

[VHDL代码]LCD1602驱动 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LCD1602 is Port ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间Sec_low,Sec_high,Min_low,Min_high,Hour_low,Hour_high: in std_logic_vector(3 downto 0); LCD_RS : out std_logic; --寄存器选择信号 LCD_RW : out std_logic; --液晶读写信号 LCD_EN : out std_logic; --液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号 end LCD1602; architecture Behavioral of LCD1602 is type STATE_TYPE is (START,write_C,write_D,WRITE_BYTE_C,WRITE_BYTE_D,wait_3m1,wait_3m2,wait_5m1,wait_5m2,w ait_100m); type MY_ARRAY1 is array(0 to 4) of std_logic_vector(7 downto 0); type MY_ARRAY2 is array(0 to 7) of std_logic_vector(7 downto 0);--长度为14的8位/字数组 constant c_d: MY_ARRAY1:=(x"38",x"0c",x"06",x"01",x"84"); signal d_d: MY_ARRAY2:=(x"20",x"20",x"3A",x"20",x"20",x"3A",x"20",x"20"); signal STATE: STATE_TYPE:=START; signal w_c_flag : integer range 0 to 2:=0; signal w_d_flag : integer range 0 to 2:=0; signal write_c_cnt : integer range 0 to 5:=0; signal write_d_cnt : integer range 0 to 8:=0; signal cnt : integer range 0 to 10000:=0; signal count : integer range 0 to 10000:=0; begin LCD_RW <= '0' ; --写数据 d_d(0)<="0000"&Hour_high+x"30"; d_d(1)<="0000"&Hour_low+x"30"; d_d(3)<="0000"&Min_high+x"30"; d_d(4)<="0000"&Min_low+x"30"; d_d(6)<="0000"&Sec_high+x"30"; d_d(7)<="0000"&Sec_low+x"30";

单片机课程设计--1602LCD显示电话拨号键盘按键

单片机课程设计--1602LCD显示电话拨号键盘按键琼州学院电子信息工程学院 课程设计报告 课程名称: 单片机课程设计 设计题目:1602LCD显示电话拨号键盘按键 专业: 通信工程 班级: 2010级1班 学生姓名: *** 学号: 起止日期: 2013年4月,2013年6月 指导教师: 指导教师评语: 最终成绩: 指导教师签名: 年月日成项目权重成绩 绩1、设计过程中的学习态度 0.2 评2、课程设计的质量及答辩 0.5 定 3、设计报告书规范程度 0.3 4、总成绩 目录 1.设计目的 ..................................................... 2 2.设计要求 ..................................................... 2 3.设计方案 .. (2) 3.1单片机最小系统 (2) 3.2输入按键系统 (3) 3.3 1602LCD显示系统 (3)

3.4设计原理图 ............................................... 6 4. 分析与编程 (7) 4.1系统流程图 (7) 4.2 LCD显示程序流程图 (7) 4.3 设计程序 ................................................ 8 5.仿真 ........................................................ 14 6.在实现过程中遇到的问题及排除措施 ............................ 15 7.设计心得体会 ................................................ 16 参考文 献 (16) 1602LCD显示电话拨号键盘按键 摘要:本设计以89C51单片机为核心,设计1602LCD显示电话拨号键盘按键, 对按键输入系统,LCD1602的引脚功能、控制命令、读写时序进行了分析。在keil 中进行编程,在proteus软件中进行了仿真。 关键字:单片机;1602LCD显示屏;键盘系统 1 1.设计目的 单片机原理与应用课程设计是单片机原理与应用专业课程的实践性教学环节,通过该教学环节,要求达到以下目的: (1)培养学生工程设计能力和综合分析问题、解决问题的能力,能根据工程需求,利用Proteus环境等构建原理图,利用Keil等环境编写调试单片机功能程序,最终构建工程的硬件平台和软件平台,达到预定功能,实现单片机具体应用; (2)熟悉在Proteus环境中的ISIS模块原理图绘制,掌握仿真的基本方法; (3)掌握Keil C编程及C51编程语言和汇编语言开发; (4)掌握单片机片内资源编程,能熟练应用相关片内资源合理配置相关寄存器;

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示: 图1 再来一它的背面的,如图2所示:

图2它的16条引脚定义如下: 对这个表的说明: 1. VSS接电源地。 2. VDD接+5V。 3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/R M063蓝白可调电阻。见图3。 图3 4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当R S为高电平时,选择数据。 5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。 6. E ,执行命令的使能引脚,接单片机的一个I/O。 7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。 8. A背光正极,可接一个10—47欧的限流电阻到VDD。 9. K背光负极,接VSS。见图4所示。

图4 二.基本操作 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=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

单片机设计 按键顺序控制加减计数(1602 液晶显示) 程序

#include #include #define uchar unsigned char #define uint unsigned int #define LCD_IO P2 sbit KK1 = P3^2; //按键输入; sbit KK2 = P3^3; //按键输入; sbit LCD_RS = P3^5; sbit LCD_RW = P3^6; sbit LCD_EN = P3^7; uchar code LCD_line1[] = " The Counter"; int idata mydata=0; /************************************************************** * 名称: Delay_1ms() * 功能: 延时子程序,延时时间为1ms * x * 输入: x (延时一毫秒的个数) * 输出: 无 ***************************************************************/ void Delay_1ms(uint x) { uchar i, j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } /************************************************************** * 名称: lcd_bz( ) * 功能: 测试忙碌子程序 * 输入: 无 * 输出: result ***************************************************************/ bit lcd_bz() { bit result; LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P3&0x80); LCD_EN = 0; return result; }

51单片机的电子钟以及lcd1602显示器的工作原理

51单片机的电子钟以及lcd1602显示器的工作原理 基于51单片机的电子钟C语言程序 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF, 0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P1_0=P1^0; // second 调整定义 sbit P1_1=P1^1; //minite调整定义 sbit P1_2=P1^2; //hour调整定义 /*函数声明*/ void delay(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) {

LCD1602驱动详解

一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD16 02的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示:

图1 再来一张它的背面的,如图2所示:

图2它的16条引脚定义如下:

3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。见图3。 图3 4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电 平时,选择命令;当RS为高电平时,选择数据。 5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态 或数据。如果不需要进行读取操作,可以直接将其接VSS。 6. E,执行命令的使能引脚,接单片机的一个I/O。 7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意 的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。 8. A背光正极,可接一个10—47欧的限流电阻到VDD。 9. K背光负极,接VSS。见图4所示。

51单片机驱动1602液晶显示器c程序

51单片机驱动1602液晶显示器c程序 /*程序效果:单片机控制液晶显示器1602 显示字母数字,用户自行更改io 程序原创安全:51hei*/#includereg52.h //头文件#define uchar unsigned char //宏定义#define uint unsigned intuchar code table[]=“51HEI XING XING “ ; //显示的字母uchar code table1[]=“51HEI MCUXUE YUAU” ;sbit lcdrs=P1; //寄存器选择引脚sbit lcdwr=P1;//读写引脚sbit lcde=P1 ; //片选引脚void delay(uchar x) //延时子函数{uchar i,j;for(i=x;i0;i--) for(j=110;j0;j--);}void write_com(uchar com) //写指令子函数{ //根据1602 液晶 显示器协议编写P2=com; lcdrs=0;lcdwr=0;delay(5);lcde=0; delay(5);lcde=1; }void write_dat(uchar dat) //写数据子函数{P2=dat; lcdrs=1;lcdwr=0;delay(5);lcde=0;delay(5);lcde=1;}void init() //初始化子函数{write_com(0x01); //清屏write_com(0x3f); //功能设置write_com(0x0d); //显示控制write_com(0x06); //输入方式设置}void main(){ uchar i; //定义局部变量init();write_com(0x80+0x02+0x10); //指针的位置for(i=0;i15;i++) //显示{ write_dat(table[i]); delay(50); // 延时,用于调节速度不匹配}write_com(0x80+0x40+0x10); for(i=0;i16;i++){ write_dat(table1[i]); delay(50);} for(i=0;i16;i++){ write_com(0x18); delay(50);} while(1);}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

液晶1602显示矩阵键盘

#include #include #define uchar unsigned char #define uint unsigned int sbit lcd_RS=P2^5; sbit lcd_RW=P2^6; sbit lcd_en=P2^7; void delay(uint z) { uint i,j; for(i=0;i<200;i++) for(j=0;j

uchar Keyscan() /*扫描子程序*/ { uchar i,j,temp,buffer[4]={0xfe,0xfd,0xfb,0xf7}; for(j=0;j<4;j++) { P1=buffer[j]; /*以下三个_nop_();作用为让P1 口的状态稳定*/ _nop_(); _nop_(); _nop_(); temp=0x10; for(i=0;i<4;i++) { if(!(P1&temp)) { return (i+j*4); } temp<<=1; } } } void L1602_char(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; write_command(a); write_data(sign); } void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; write_command(a); while(1) { if(*p == '\0') break;

相关文档
最新文档