单片机控制lcd液晶显示器(含程序)_第1页
单片机控制lcd液晶显示器(含程序)_第2页
单片机控制lcd液晶显示器(含程序)_第3页
单片机控制lcd液晶显示器(含程序)_第4页
单片机控制lcd液晶显示器(含程序)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

液晶显示器 一 实验目的: 1. 了解全点阵图形 LCD 的结构和原理掌握在 MSP430 上如何使用外设。 2. 了解 LCD 显示器的工作原理、种类(笔段型、点阵字符型、点阵图形) 及主要性能指标。 3. 掌握图形点阵 LCD 的编程使用方法;理解 LCD 显示模块命令的种类、 功能及使用方法。 4. 了解 LCD 字符生成软件的使用方法(见附录) 。 二 实验内容: 1. 在 LCD 上显示 Hello 和中文字“南京工业大学” 。 2. 通过键盘控制 Hello 或者中文字符在 LCD 上左右、上下移动。 3. 学会使用字符生成软件来实现任意字符代码的生成和显示。 4. 其他另外可以实现的目标:使字符在按键没有松动的情况下连续移动; 实现字符的循环移动,即当字符串移动到边界时仍可以移动,显示不 完的部分从另一边显示出来。 三 实验原理: 1. 图形点阵式液晶原理 液晶是一种具有规则性分子排列的有机化合物,它既不是液体也不是固 体,而是介于固态和液态之间的物质。液晶具有电光效应和偏光特性,这是它 能用于显示的主要原因。常用的液晶显示器可分成 3 类,分别是扭曲向列型 (T wisted Nematic) 、超扭曲向列型(S uper TN)和彩色薄膜型。字符点阵 式属于扭曲向列型 LCD。 典型的字符点阵式液晶显示器是由控制器、驱动器、字符发生器 ROM、 字符发生器 RAM 和液晶屏组成,字符由 5*7 点阵或 5*10 点阵组成。一般结果 如图一所示: 图一 128x64 点阵图形液晶模块方框示意图 此次实验所用的 LCD 型号是 RT12864CT。12864 是一种图形点阵液晶显示器, 它主要由行驱动器/列驱动器及 128*64 全点阵液晶显示器组成。可完成图形显 示,也可以显示 8*4 个(16*16)汉字。 管脚号 管脚名称 LEVER 管脚功能描述 1 VSS 0 电源地 2 VDD +5.0V 电源电压 3 V0 - 液晶显示器驱动电压 4 D/I(RS) H/L D/I=“H”,表示 DB7DB0 为显示数据 D/I=“L”,表示 DB7DB0 为显示指令数据 5 R/W H/L R/W=“H”,E=“H”数据被读到 DB7DB0 R/W=“L”,E=“HL”数据被写到 IR 或 DR 6 E H/ R/W=“L”,E 信号下降沿锁存 DB7DB0 R/W=“H”,E=“H”DDRAM 数据读 DB7DB0 7 DB0 H/L 数据线 8 DB1 H/L 数据线 9 DB2 H/L 数据线 10 DB3 H/L 数据线 11 DB4 H/L 数据线 12 DB5 H/L 数据线 13 DB6 H/L 数据线 14 DB7 H/L 数据线 15 CS1 H/L H:选择芯片(右半屏)信号 16 CS2 H/L H:选择芯片(左半屏)信号 17 RET H/L 复位信号,低电平复位 18 VOUT -10V LCD 驱动负电压 19 LED+ - LED 背光板电源 20 LED- - LED 背光板电源 表 1:12864LCD 的引脚说明 128x64 点阵图形液晶模块的内部结构可分为三个部分:LCD 控制器,LCD 驱动器,LCD 显示装置。应注意的是,无背光液晶模块同EL、LED 背光的液晶 模块内部结构有较大的区别,特别注意第19、20 脚的供电来源及相关参数,如 图二所示: 图 2 128x64 点阵图形液晶模块的内部结构 12864LCD 的指令系统及时序:该类液晶显示模块(即 KS0108B 及其兼容 控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表 2 所示: 控制信号 控制代码指令名称 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 显示开关 0 0 0 0 1 1 1 1 1 1/0 显示起始行设置 0 0 1 1 X X X X X X 页设置 0 0 1 0 1 1 1 X X X 列地址设置 0 0 0 1 X X X X X X 读状态 1 0 BUSY 0 ON/OFF RST 0 0 0 0 写数据 0 1 写数据 读数据 1 1 读数据 表 2:12864LCD 指令表 2. MCU 与 LCD、键盘连接电路图: LCD 的 714 引脚分别连接到 149 的 4451 引脚(P5 口),其他引脚 2 号引 脚连接到 J28 排线上(与 5V 电源接通给 LCD 供电)、1-GND、436、5 37、638、1539、1642、1743;18 接滑动变阻器 R10(调节 LCD 的亮度) 。键盘连接省略。 3. LCD 显示流程图: 初始化 指针指向数组首地址 写汉字程序 1 , 3 行 写汉字 2 , 4 行 清屏 开显示指令 清屏 关显示指令 功能设定 图 3 LCD 显示主程序流程图 图 4 初始化子程序流程图 判断屏幕是否忙 使能有效 设置 R S 和 R / W 状态 使能信号关闭 写数据指令 将数据送人 P 4 关闭使能信 号 将 P 4 设置状态为 读入 是 否 循环等待 使能 读状态指令 使能信号开 送数据指令 判忙 使能信号关 图 5 写指令子程序流程图 图 6 送数据子程序流程图 四实验步骤和结果: 通过调试可以正确的显示“Hello”或者“南京工业大学”,中英文字符的 切换需要通过程序修改才能实现(可以试着用中断来实现),比较繁琐。同时通 过键盘来实现字符在 LCD 屏幕上的上下左右的移动。 五附录: 1字模软件使用方法: 首先打开“PCtoLCD2002.exe” ,显示界面如下图 7 所示: 图 7 字符生成软件界面 然后点击选项菜单,通过上面程序所述,选项中要选择:阴码、逐列式、 逆向、16 进制、C51 格式,点击确定。如图 8 所示设置: 图 8 字符软件设置界面 接着在左下方空白 格子里输入要显示字符,点击“生成字模” ,变会出现 对应的字符编码,复制到程序中编译即可。 2.程序(键盘扫描函数省略): /* * 文件名称: main.c * 文件说明 根据键盘的控制,移动字符串“Hello“或者“南京工业大学“,行列 键盘的“7“用于字符串左移,“8“用于字符串下移,“9“用于字符串右移,“5“用于 字符串上移。按键每按一下向各自的方向移动一个点阵的位置。 */ #define MSP430F149_H 0 #include #ifndef LCD_IN_USE #include “lcd.c“ #endif #ifndef KEY_BOARD #include “keyboard12.c“ #endif #define TOP 0 / 竖直方向零点 #define BOTTOM 64 / 竖直方向坐标最大值 #define LEFT 0 / 水平方向坐标最小值 #define RIGHT 128 / 水平方向坐标最大值 #define EN_WIDTH 40 / Hello 字符串的长度 #define CH_WIDTH 96 / 中文字符串的长度 #define OP_CHINESE 1 / 选择显示中文字符 #define OP_ENGLISH 2 / 选择显示英文字符 void drawStr(unsigned char x,unsigned char y); void op_Select(char OP); unsigned char showData=/16*8 点阵的“Hello” 0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01, 0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20,/*“H“,0*/ 0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22, 0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,/*“e“,1*/ 0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F, 0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*“l“,2*/ 0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F, 0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*“l“,3*/ 0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20, 0x80,0x20,0x80,0x20,0x00,0x1F,0x00,0x00,/*“o“,4*/ ; unsigned char showData_1= /16*16 点点阵的“南京工业大学“ 0x04,0x00,0xE4,0xFF,0x24,0x00,0x24,0x08,0x64,0x09,0xA4,0x09,0x24,0x09,0x3F,0x7F, 0x24,0x09,0xA4,0x09,0x64,0x09,0x24,0x48,0x24,0x80,0xE4,0x7F,0x04,0x00,0x00,0x00,/ *“南“,0*/ 0x04,0x00,0x04,0x40,0x04,0x20,0xE4,0x1B,0x24,0x02,0x24,0x42,0x25,0x82,0x26,0x7E, 0x24,0x02,0x24,0x02,0x24,0x02,0xE4,0x0B,0x04,0x10,0x04,0x60,0x04,0x00,0x00,0x00,/ *“京“,1*/ 0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F, 0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/ *“工“,2*/ 0x00,0x40,0x10,0x40,0x60,0x40,0x80,0x43,0x00,0x40,0xFF,0x7F,0x00,0x40,0x00,0x40, 0x00,0x40,0xFF,0x7F,0x00,0x42,0x00,0x41,0xC0,0x40,0x30,0x40,0x00,0x40,0x00,0x00,/ *“业“,3*/ 0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00, 0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00,/ *“大“,4*/ 0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E ,0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x 00,/*“学“,5*/ ; const unsigned char mapTbl= 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff ; unsigned char px, / 显示字符串的 X 位置 py, / 显示字符串的 Y 位置 width; / 字符串的宽度 unsigned char * showBuf; / 显示数据缓冲区 void main() WDTCTL = WDTHOLD + WDTPW; / 关闭看门狗 init_LCD(); / 初始化点阵 LCD init_Keyboard(); / 初始化键盘 op_Select(OP_CHINESE); / 选择显示字符类型 drawStr(px,py); /显示字符串 while(1) key_Event(); /检测按键事件 if(key_Flag= 0x01) /有按键 key_Flag=0x00; /清除按键标识 if(key_val=0x05) /上移 if(pxTOP) /如果可以上移 clear_Rect(px/8,0,3,64); /清除 chip1 可能有数据的三个区域 clear_Rect(px/8,64,3,64); /清除 chip2 可能有数据的三个区域 drawStr(px-1,py); /显示字符 px = px-1; else if (key_val=0x07) /左移 if(pyLEFT) /如果可以左移 clear_Rect(px/8,0,3,64); clear_Rect(px/8,64,3,64); drawStr(px,py-1); py=py-1; else if (key_val=0x08) /下移 if(px(8-t1); /右移(8-t1) t3 = showBuf2*(tmpv-y)+1; t3 = t3 /取得低(8-t1)位 t3=t3(8-t1); /右移(8-t1)位 write_Data(t2); /填写数据 void op_Select(char OP) if(OP=OP_CHINESE) width = CH_WIDTH; / 设定字符串长度 px=0; / 初始化显示位置,X 坐标 py=0; / Y 坐标 showBuf = showData_1; else if (OP=OP_ENGLISH) width = EN_WIDTH; / 设定字符串长度 px=24; / 初始化显示位置,X 坐标 py=40; / Y 坐标 showBuf = showData; LCD 显示函数: #include void write_Command(char cmd) P4OUT /禁止 EN P5DIR = 0xff; P4OUT /rs=0 ,r/w=0 P5OUT = cmd; P4OUT |= 0x04; /使能 P4OUT /禁止 void move_To(char x,char y) unsigned char tmp; tmp=(y if(tmp63) /在 chip2 P4OUT /cs1=0 P4OUT |= 0x40; /cs2=1 write_Command(0xb8 + x); /设置 x write_Command(0x40 + tmp-64); /设置 y void write_Data(char content) P5DIR = 0x00; / 置位输入模式 P4OUT |= 0x02; / r/w=1 读状态 P4OUT |= 0x04; / chip 使能 while(P3IN /检测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论