收藏 分享(赏)

1602液晶使用范例.doc

上传人:HR专家 文档编号:7488702 上传时间:2019-05-19 格式:DOC 页数:13 大小:482KB
下载 相关 举报
1602液晶使用范例.doc_第1页
第1页 / 共13页
1602液晶使用范例.doc_第2页
第2页 / 共13页
1602液晶使用范例.doc_第3页
第3页 / 共13页
1602液晶使用范例.doc_第4页
第4页 / 共13页
1602液晶使用范例.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、一个 1602 的例子液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。 这里介绍的字符型液晶模块是一种用 5x7 点阵图形来显示字符的液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2行 20 个字等等,这里以常用的 2 行 16 个字的 1602 液晶模块来介绍它的编程方法。1602 采用标准的 16 沤涌冢 渲?1602B 引脚说明:编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 双向数据口2 VDD 电源正极 10 D3 双向数据口3 VL 对比度调节 11 D4 双向

2、数据口4 RS 数据/命令选择 12 D5 双向数据口5 R/W 读/写选择 13 D6 双向数据口6 E 模块使能端 14 D7 双向数据口7 D0 双向数据口 15 BLK 背光源地8 D1 双向数据口 16 BLA 背光源正极注意事项:从该模块的正面看,引脚排列从右向左为:15 脚、16 脚,然后才是 114 脚(线路板上已经标明)。第 1 脚:VSS 为地电源第 2 脚:VDD 接 5V 正电源第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度第 4 脚:RS 为寄存器选择,

3、高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 RW 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 RW 为高电平时可以读忙信号,当 RS 为高电平 RW 为低电平时可以写入数据。第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714 脚:D0D7 为 8 位双向数据线。 第 1516 脚:BLA(BL1): LED 背光正极。需要背光时,BLA 串接一个限流电阻接 VDD,BLK 接地,实测该模块的背光电流为 50mA 左右,一般接一个几十欧姆的电阻,47

4、欧、33 欧等;BLK(BL2): LED 背光地端。1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,如表 1 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 01000001B(41H) ,显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母“A”1602 液晶模块内部的控制器共有 11 条控制指令,如表 2 所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电平) 指令 1:清显示,指令码 01H,

5、光标复位到地址 00H 位置指令 2:光标复位,光标返回到地址 00H 指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显

6、示 F: 低电平时显示 5x7的点阵字符,高电平时显示 5x10 的点阵字符 (有些模块是 DL:高电平时为 8 位总线,低电平时为 4 位总线)指令 7:字符发生器 RAM 地址设置 指令 8:DDRAM 地址设置 指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令 10:写数据 指令 11:读数据 DM-1602 液晶显示模块可以和单片机 AT89C51 直接接口,电路如图1 所示。为了节约 I/O 口也可以采用 6 线接法,只用 4 根数据线,高低位分别传输,把 RW 接地,只写不读。这样可以省下 5 根 I/O 口线

7、。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表 3 是DM-162 的内部显示地址.比如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H) 以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序: ORG 0000H RS EQU

8、P3.7;确定具体硬件的连接方式 RW EQU P3.6 ;确定具体硬件的连接方式E EQU P3.5 ;确定具体硬件的连接方式MOV P1,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序MOV P1,#00111000B ;设置显示模式:8 位 2 行 5x7 点阵 ACALL ENABLE ;调用写入命令子程序 MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁ACALL ENABLE ;调用写入命令子程序MOV P1,#00000110B ;文字不动,光标自动右移 ACALL ENABLE ;调用写入命令子程序MOV P1,#0C0H

9、 ;写入显示起始地址(第二行第一个位置)ACALL ENABLE ;调用写入命令子程序MOV P1,01000001B ;字母 A 的代码 SETB RS ;RS=1 CLR RW ;RW=0 ;准备写入数据CLR E ;E=0 ;执行显示命令ACALL DELAY ;判断液晶模块是否忙?SETB E ;E=1 ;显示完成,程序停车AJMP $ENABLE: CLR RS ;写入控制命令的子程序CLR RW CLR E ACALL DELAY SETB E RET DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序CLR RS SETB RWCLR E NOP SETB E

10、 JB P1.7,DELAY ;如果 P1.7 为高电平表示忙就循环等待 RETEND 程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序 DELAY,然后输入显示位置的地址 0C0H,最后输入要显示的字符 A 的代码 41H。6 线范例:/编译器:ICC-AVR v6.31A 日期: 2005-11-24 20:29:57 /目标芯片 : M16 /时钟: 8.0000Mhz /*- LCD 引脚定义 1-GND 2-VCC 3-VO 4-RS 5-RW 6-EN 7 到 14-D0-D7

11、15-背景灯+ 16-背景灯- -*/ #include #include /*- 下面是 AVR 与 LCD 连接信息 PA2 -RS PA3 -EN 地 -RW PA4 -D4 PA5 -D5 PA6 -D6 PA7 -D7 要使用本驱动,改变下面配置信息即可 -*/ #define LCD_EN_PORT PORTA /以下 2 个要设为同一个口 #define LCD_EN_DDR DDRA #define LCD_RS_PORT PORTA /以下 2 个要设为同一个口 #define LCD_RS_DDR DDRA #define LCD_DATA_PORT PORTA /以下 3

12、 个要设为同一个口 #define LCD_DATA_DDR DDRA /一定要用高 4 位 #define LCD_DATA_PIN PINA #define LCD_RS (1PA2) /0x04 portA2 out #define LCD_EN (1PA3) /0x08 portA3 out #define LCD_DATA (1PA4)|(1PA5)|(1PA6)|(1PA7) /0xf0 portA4/5/6/7 out /*- 函数说明 -*/ void LCD_init(void); void LCD_en_write(void); void LCD_write_command

13、(unsigned char command) ; void LCD_write_data(unsigned char data); void LCD_set_xy (unsigned char x, unsigned char y); void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data); void delay_nus(unsigned int n); voi

14、d delay_nms(unsigned int n); /*=*/void LCD_init(void) /液晶初始化 LCD_DATA_DDR|=LCD_DATA; /数据口方向为输出 LCD_EN_DDR|=LCD_EN; /设置 EN 方向为输出 LCD_RS_DDR|=LCD_RS; /设置 RS 方向为输出 LCD_write_command(0x28); LCD_en_write(); delay_nus(40); LCD_write_command(0x28); /4 位显示 LCD_write_command(0x0c); /显示开 LCD_write_command(0x0

15、1); /清屏 delay_nms(2); void LCD_en_write(void) /液晶使能 LCD_EN_PORT|=LCD_EN; delay_nus(1); LCD_EN_PORT void LCD_write_command(unsigned char command) /写指令 delay_nus(16); LCD_RS_PORT /RS=0 LCD_DATA_PORT /清高四位 LCD_DATA_PORT|=command /写高四位 LCD_en_write(); command=command4; /低四位移到高四位 LCD_DATA_PORT /清高四位 LCD_

16、DATA_PORT|=command /写低四位 LCD_en_write(); void LCD_write_data(unsigned char data) /写数据 delay_nus(16); LCD_RS_PORT|=LCD_RS; /RS=1 LCD_DATA_PORT /清高四位 LCD_DATA_PORT|=data /写高四位 LCD_en_write(); data=data4; /低四位移到高四位 LCD_DATA_PORT /清高四位 LCD_DATA_PORT|=data /写低四位 LCD_en_write(); void LCD_set_xy( unsigned

17、char x, unsigned char y ) /写地址函数 unsigned char address; if (y = 0) address = 0x80 + x; else address = 0xc0 + x; LCD_write_command( address); void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) /列 x=015,行 y=0,1 LCD_set_xy( X, Y ); /写地址 while (*s) / 写显示字符 LCD_write_data( *s ); s +;

18、 void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) /列 x=015,行 y=0,1 LCD_set_xy( X, Y ); /写地址 LCD_write_data( data); /*=*/void delay_1us(void) /1us 延时函数 asm(“nop“); void delay_nus(unsigned int n) /N us 延时函数 unsigned int i=0; for (i=0;in;i+) delay_1us(); void delay_1ms(void) /1ms

19、 延时函数 unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int n) /N ms 延时函数 unsigned int i=0; for (i=0;in;i+) delay_1ms(); /*=*/void init_devices(void) CLI(); /disable all interrupts LCD_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00; /timer interrupt sources SEI(); /re-enable interrupts void main(void) init_devices(); LCD_write_string(1,0,“Hi!“); for(;) LCD_write_string(0,1,“archeng504“); LCD_write_char(6,0,8);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报