当前位置:文档之家› 单片机课程设计说明书撰写

单片机课程设计说明书撰写

《单片机及控制系统》课程设计报告题目: LCD显示设计院(系):机电及自动化学院专业班级:电气工程及其自动化1204学生姓名:夏德君学号:20121131177指导教师:李思2015年 6 月 23日至2015年 7 月 3日华中科技大学武昌分校制《单片机及控制系统》课程设计任务书(2) LCD显示电路采用122×32A点阵式LCD液晶显示模块,内置SED1520液晶显示控制器,电路如图1所示。

图1 LCD显示电路(3) LCD及单片机的连接(如图2)1.摘要 (1)2.课程设计题目及要求 (2)2.1课程设计题目 (2)2.2课程设计要求 (2)3.设计分析 (2)3.1L C D显示原理 (2)3.2L C D显示电路 (2)3.3 LCD引脚说明……………………………………………………………33.4S E D1520的基本原理 (4)3.5S E D1520的指令系统 (5)3.6L C D及单片机的连接 (6)4.软件设计 (9)4.1程序流程 (9)4.2课程设计具体程序 (10)4.2.1L C D翻屏程序 (15)4.2.2L C D纵向滚屏程序 (29)4.2.3L C D横向滚屏程序 (39)5.总结....................................................................................参考文献 (3)1.摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于及控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

随着以计算机为轴心的各种各样信息处理装置的诞生,为适应这种新形势,信息家电,网络终端,广播-通信等用途的LCD市场也将迅速扩大,而且如今LCD发展方向不仅在于大屏幕,而且在中小屏幕方面,例如汽车导航系统,摄像机,数字式照相机,便携式电视,PDA(个人数字助理),娱乐/游戏机,摄影机等有着进一步的发展。

液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。

LCD可分为段式LCD、字符式LCD和点阵式LCD。

其中,段式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线以及汉字、动画,并且可以实现屏幕滚动、反转、闪烁等功能,用途十分广泛。

由此可见LCD的应用是如此广泛,所以用MPU控制液晶显示器是很普遍的应用。

本设计主要研究通过单片机控制来实现液晶模块字符的显示。

2. 课程设计题目及要求2.1课程设计题目LCD显示设计2.2课程设计要求了解122×32A点阵式LCD液晶显示的结构、工作原理、编程方法;SED1250的特性、内部结构、各个管脚的功能,以及获取字模的方法;编写一个完整的程序,按要求在LCD上显示内容。

具体显示效果为:(1)显示汉字:专业、姓名。

(2)实现显示内容的翻屏功能。

扩展:实现显示内容滚屏功能。

3.设计分析3.1 LCD显示的原理液晶是一呈液体状的化学物质,象磁场中的金属一样,当受到外界电场影响时,其分子会产生精确的有序排列。

如果对分子的排列加以适当的控制,液晶分子将会允许光线穿越。

无论是笔记本电脑还是桌面系统,采用的LCD显示屏都是由不同部分组成的分层结构。

位于最后面的一层是由荧光物质组成的可以发射光线的背光层。

背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层。

液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。

当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。

3.2 LCD显示电路图3-1 LCD显示电路3.3 引脚说明表3.1 LCD引脚说明3.4 SED1520的基本原理SED为内置液晶显示器控制器,集行、列驱动器和控制器及一体,广泛应用于小型液晶显示模块中,内置2560位显示RAM区(32行80列),RAM中的1位数据控制液晶屏上一个像素的亮暗,“1”为亮,“0”为暗。

图3-2 液晶显屏(1)0-60列为左半屏;61-121为右半屏。

(2)每半屏页数分配一致。

(3)每页含8行80列(80个字节)。

(前61列有效)(4)每半屏为32行,共4页。

(5)每个汉字占16行,即用2页才能写完。

(6)液晶屏上最多能显示两行汉字(静态时最多显示16字)。

3.5 SED1520的指令系统表3.2SED1520的13条指令3.6 LCD及单片机的连接页面地址设置01 0 1 1 1 0P1 P0(0-3)列地址设置000 C6 C5 C4 C3 C2 C1 C0(0-79)启动改写方式01 1 1 0 0 00 0结束改写方式01 1 1 0 1 11 0读取状态字01BUSY ADC ON/OFF RESET 0 0 0 0写显示数据 1数据读显示数据 11数据图3-3 LCD 及单片机的连接单片机及LCD 模块之间有四种基本操作: 写命令:R/W 接低电平即A7为0 读状态:R/W 接高电平即A7为1 写显示数据:A0 接高电平读显示数据:A0 接低电平表3.3单片机及LCD 模块之间有四种基本操作4. 软件设计E2 F800H F880H F840H F8C0H4.1程序流程图4-1 初始化程序图4-2 清屏子程序图4-3 显示主程序4.2课程设计具体程序4.2.1 LCD翻屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x20,0x20,0x24,0x24,0x24,0xE4,0x26,0x24, //武000x20,0xFF,0x20,0x22,0x2C,0x20,0x20,0x00,0x20,0x60,0x3F,0x20,0x20,0x1F,0x11,0x11,0x10,0x03,0x1C,0x20,0x40,0x80,0xE0,0x00,0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49, //昌010x49,0x49,0x49,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x04,0x04,0x04,0xE4,0x25,0x26,0x34,0x2C, //首02 0x24,0x26,0x25,0xF4,0x24,0x06,0x04,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0xC0,0x00,0x02,0x0C, //义030x00,0x80,0x60,0x18,0x06,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x60,0xC0,0x40,0x00,0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96, //学04 0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0xFE,0x22,0x5A,0x96,0x0C,0x24,0x24, //院05 0x25,0x26,0x24,0x34,0xA4,0x14,0x0C,0x00,0x00,0xFF,0x04,0x08,0x87,0x81,0x41,0x31,0x0F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电06 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气07 0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工08 0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00, // -1-0a 0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00, // -2-0b 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00, // -0-0c0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00, // -4-0d 0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */void WriteDataE1(){//while(IN(CRADD1) & 0x80);DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */void WriteCommandE2(){//while(IN(CRADD2) & 0x80); CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */void Init(){Command = 0xe2;WriteCommandE1();WriteCommandE2();Command = 0xa4;WriteCommandE1(); WriteCommandE2();Command = 0xa9; WriteCommandE1(); WriteCommandE2();Command = 0xa0; WriteCommandE1(); WriteCommandE2();Command = 0xc0; WriteCommandE1(); WriteCommandE2();Command = 0xaf; WriteCommandE1(); WriteCommandE2(); }/* 清屏 */void Clear(){unsigned char i,j;i = 0;do {Command = (i + 0xb8);/* 页地址设置 */WriteCommandE1();WriteCommandE2();Command = 0x00; /* 列地址设置为"0" */ WriteCommandE1();WriteCommandE2();j = 0x50; /* 一页清 80个字节 */ do {LCDData = 0x00; /* 显示数据为"0" */WriteDataE1();WriteDataE2();}while(--j !=0); /* 页内字节清零循环 */}while(++i !=4); /* 页地址暂存器加一 */ /* 显示区清零循环 */}/*延时函数*/void delay1(){unsigned int i;for(i=0;i<=50000;i++);}void delay2(){unsigned int i;for(i=0;i<=5000;i++);}/* 中文显示子程序 */void WriteCHN8x16(){unsigned char i,j,k;i = 0;j = 0;while(j<2) {Command = ((Page_ + j) & 0x03) | 0xb8; /* 设置页地址 */ WriteCommandE1();WriteCommandE2();k = Column; /* 列地址值 */while(k < Column + 8){if (k < PD1) { /* 为左半屏显示区域(E1) */ Command = k;WriteCommandE1(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE1(); /* 写字模数据 */} else{ /* 为右半屏显示区域(E2) */ Command = k-PD1;WriteCommandE2(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE2(); /* 写字模数据 */};i++;if( ++k >= PD1 * 2) break; /* 列地址是否超出显示范围 */ } ;j++;};}/* 中文显示程序 *//*闪烁(延时delay1,delay2)*/ void main(){Init();Clear();delay2();while(1){Clear();for(i=31;i>0;i--){hang=0xc0+i;Command = hang; WriteCommandE1();WriteCommandE2();Column = 0x00;Code_ = 0x00;WriteCHN16x16();Column = 0x10;WriteCHN16x16();Column = 0x20; Code_ = 0x02;WriteCHN16x16();Column = 0x30; Code_ = 0x03;WriteCHN16x16();Column = 0x40; Code_ = 0x04;WriteCHN16x16();Column = 0x50; Code_ = 0x05;WriteCHN16x16();Code_ = 0x06;WriteCHN16x16();Column = 0x10; Code_ = 0x07;WriteCHN16x16();Column = 0x20; Code_ = 0x08;WriteCHN16x16();Column = 0x30; Code_ = 0x09;WriteCHN16x16();Column = 0x40; Code_ = 0x0a;WriteCHN8x16();Column = 0x48;Code_ = 0x0b;WriteCHN8x16();Column = 0x50;Code_ = 0x0c;WriteCHN8x16();Column = 0x58;Code_ = 0x0d;WriteCHN8x16();Page_ = 0x02; //“夏”,0e Column = 0x30;Code_ = 0x0e;WriteCHN16x16();Page_ = 0x02; //“德”,0f Column = 0x40;Code_ = 0x0f;WriteCHN16x16();Page_ = 0x02; //“君”,10Column = 0x50;Code_ = 0x10;WriteCHN16x16();delay1();}}}4.2.2LCD纵向滚屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_ ()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电06 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气07 0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工08 0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00};/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */ void WriteDataE1(){//while(IN(CRADD1) & 0x80); DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */ void WriteCommandE2(){//while(IN(CRADD2) & 0x80); CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */ void Init(){Command = 0xe2; WriteCommandE1(); WriteCommandE2();Command = 0xa4; WriteCommandE1(); WriteCommandE2();Command = 0xa9; WriteCommandE1(); WriteCommandE2();Command = 0xa0; WriteCommandE1(); WriteCommandE2();Command = 0xc0; WriteCommandE1();WriteCommandE2();Command = 0xaf;WriteCommandE1();WriteCommandE2();}/* 清屏 */void Clear(){unsigned char i,j;i = 0;do {Command = (i + 0xb8);/* 页地址设置 */WriteCommandE1();WriteCommandE2();Command = 0x00; /* 列地址设置为"0" */ WriteCommandE1();WriteCommandE2();j = 0x50; /* 一页清 80个字节 */ do {LCDData = 0x00; /* 显示数据为"0" */WriteDataE1();WriteDataE2();}while(--j !=0); /* 页内字节清零循环 */}while(++i !=4); /* 页地址暂存器加一 */ /* 显示区清零循环 */}/*延时函数*/void delay1(){unsigned int i;for(i=0;i<=20000;i++);}void delay2(){unsigned int i;for(i=0;i<=20000;i++);}/* 中文显示子程序 */void WriteCHN16x16(){unsigned char i,j,k;i = 0;j = 0;while(j<2) {Command = ((Page_ + j) & 0x03) | 0xb8; /* 设置页地址 */ WriteCommandE1();WriteCommandE2();k = Column; /* 列地址值 */while(k < Column + 16){if (k < PD1) { /* 为左半屏显示区域(E1) */ Command = k;WriteCommandE1(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE1(); /* 写字模数据 */} else{ /* 为右半屏显示区域(E2) */ Command = k-PD1;WriteCommandE2(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE2(); /* 写字模数据 */};i++;if( ++k >= PD1 * 2) break; /* 列地址是否超出显示范围 */ } ;j++;};}/* 中文显示程序 *//*闪烁(延时delay1,delay2)*/void main(){unsigned char i;Init();Clear();while(1){Clear();for(i=31;i>0;i--){hang=0xc0+i;Command = hang&0x1f|0xc0; WriteCommandE1();WriteCommandE2();Column = 0x00;Code_ = 0x00;WriteCHN16x16();Column = 0x10;Code_ = 0x01;WriteCHN16x16();Column = 0x20;Code_ = 0x02;WriteCHN16x16();Column = 0x30;Code_ = 0x03;WriteCHN16x16();Column = 0x40; Code_ = 0x04;WriteCHN16x16();Column = 0x50; Code_ = 0x05;WriteCHN16x16();Column = 0x60; Code_ = 0x06;WriteCHN16x16();delay1();}}}4.2.3LCD横向滚屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_ ()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电060x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气070x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工080x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00};/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */void WriteDataE1(){//while(IN(CRADD1) & 0x80);DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */void WriteCommandE2(){//while(IN(CRADD2) & 0x80);CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */void Init(){Command = 0xe2;WriteCommandE1();WriteCommandE2();Command = 0xa4;WriteCommandE1();WriteCommandE2();。

相关主题