单片机C语言程序设计 教学课件 ppt 作者 侯殿有5.18

上传人:w****i 文档编号:94483861 上传时间:2019-08-07 格式:PPT 页数:73 大小:350.50KB
返回 下载 相关 举报
单片机C语言程序设计 教学课件 ppt 作者  侯殿有5.18_第1页
第1页 / 共73页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有5.18_第2页
第2页 / 共73页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有5.18_第3页
第3页 / 共73页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有5.18_第4页
第4页 / 共73页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有5.18_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《单片机C语言程序设计 教学课件 ppt 作者 侯殿有5.18》由会员分享,可在线阅读,更多相关《单片机C语言程序设计 教学课件 ppt 作者 侯殿有5.18(73页珍藏版)》请在金锄头文库上搜索。

1、第十八章HD61830液晶显示器驱动控制,18.1 HD61830液晶显示器概述,1液晶显示控制器 HD61830是图形液晶显示控制器,可直接与MCS-51系列时序的MPU接口。 2指令集 HD61830具有专门的指令集,可完成文本显示或图形显示的功能设置,以及实现画面卷动、光标闪烁、位操作等功能。 3HD61830 内存管理 HD61830 可管理64K显示RAM,其中图形方式为64K,字符方式为4K; 4内部字符发生器CGROM HD61830内部字符发生器CGROM共有192种字符,其中57字体160种,511字体有32种,HD61830还可外接字符发生器,使字符量达到256种。,5占空

2、比 HD61830具有较高占空比,可以静态方式显示至1/128占空比的动态方式显示。 6HD61830封装和引脚 HD61830封装为60个引脚,管脚排列如图18.1示,管脚功能如表18.1示。,7多种组合功能 当为低电平时,RS, R/W, E的各种组合所实现的功能如表18.2示:,8HD61830的电气参数 HD61830的电气参数如表18.3示。 内嵌HD61830控制器的显示模块有很多,如:MGLS-8032B、MGLS240128、MGLS-8464、MGLS12864等等,它们的电气参数基本相同,指令系统是一样的。因此它们的显示控制程序编制均可参考本章介绍的方法进行。,18.2 H

3、D61830的指令系统,HD61830有13条指令,指令是由一个指令代码和一个功能参数组成。指令代码类似参数寄存器的地址代码,而参数才是实质的功能值。MPU向HD61830指令寄存器写入指令代码来选择参数寄存器,再通过数据寄存器向参数寄存器写入参数值,以实现功能的设置。 HD61830向MPU提供一个忙(BF)标志位:BF=1表示当前HD61830处于内部运行状态,不接受MPU的访问(读状态标志位除外),BF=0表示HD61830允许MPU的访问。MPU在访问HD61830时都要判断BF是否为0。 MPU可在RS=1下从数据总线D7位上读出BF标志值。,18.2.1 方式控制指令,1方式控制,

4、指令代码为0x00 该指令参数定义了显示方式。 其参数格式为: D0:字符发生器选择,D0 =0为CGROM, D0=1为EXCGROM; D1:显示方式选择,D1=0为文本方式,D1=1为图形方式; D3与D2组合实现如表8.4功能: D4:工作方式选择,D4=0为从方式,D4=1为主方式; D5:显示状态选择,D5=0为禁止显示,D5=1为启用显示。,需要注意的是,使用图形方式(D1=1)时,只能使D0=D2=D3 =0。一般情况下,HD61830采用主方式D4 =1。当有两片HD61830并联时,则其中一片为主方式,一片为从方式。,2字体设置,指令代码0x01 该指令设置文本方式下字符的

5、点阵大小,指令参数格式: VP:字符点阵行数,取值范围116; HP:字符点阵列数,图形方式表示一字节显示数据的有效位数,HP的取值范围为6,7,8。,3帧设置,指令代码0x03 该指令的指令参数格式如下 NX为显示时的帧扫描行数,其倒数即为占空比。对单屏结构的显示模块,NX即为其有效显示行数;对双屏显示结构的模块则2NX为其有效显示行数。:,18.2.2 显示域设置指令,显示域设置,指令代码0x02 指令参数格式如下: HN为一行显示所占的字节数,其取值范围为2128内的偶数值,由HN和HP可得 显示屏有效显示点列数N=HNHP。,5显示缓冲区起始地址低8位SADL设置,指令代码0x08 该

6、指令的指令参数格式如下:,6显示缓冲区起始地址高8位SADH设置,指令代码0x09 该指令的指令参数格式如下: 以上两条指令设置了显示缓冲区起始地址,它们的指令参数分别是该地址的低位 和高位字节。该地址对应显示屏上左上角显示位,显示缓冲区单元(即RAM单元)与 显示屏上的显示位的对应关系如表18.5所示:,18.2.3 光标设置指令,7光标位置设置,指令代码0x04 文本方式下的光标为一行(81)点阵显示,该指令用来指明光标在字符位中第几行,指令参数格式如下: 其中CP表示光标在字符体中的行位置,CP取值范围在1VP之问。CPVP时光标将被禁止。,设置光标地址指针低8位CACL指令,指令代码0

7、x0a 该指令的指令参数格式如下: 设置光标地址指针高8位cach指令,指令代码0x0b 该指令的指令参数格式如下:,以上两条指令设置光标地址指针,它们的指令参数即是该光标地址指针的低位和高位字节。其作用一是用来指示当前要读、写显示缓冲区单元的地址;二是用在文本方式下,指出光标或闪烁字符在显示屏上的位置。 由于光标地址计数器是16位加1计数器,当第N位从1变到0时,会引起第N+1位自 动加1,因此当设置低8位地址时,若最高位MSB从1变为0就会引起高8位地址的最低位LSB加1。因此设置时应先设置低8位,再设置高8位,而且即使只需修改地址低8位,其高位也要跟着重新设置一次,以确保地址指针设置的万

8、无一失。,18.2.4 数据读写指令,10数据写指令代码0x0c 该指令将随后写入数据寄存器的数据送入光标地址指针指向的显示RAM单元。光标地址指针将随着每次数据的写入而自动加一修改。该指令功能的终止将由下一条指令的输入来完成。 11数据读指令代码0x0d 该指令代码写入后,紧跟着一次“空读”操作后,则可以连续读出光标地址指针所指向单元的内容。光标地址指针将随着每次数据的读出而自动加一修改,该指令功能的终止将由下一条指令的输入来完成。,18.2.5 “位”操作指令,12“位清”零,指令代码0x0e 13“位置”1,指令代码0x0f 以上两条指令的功能是将光标地址指针所指向的显示RAM单元中的某

9、一位清零或 置1。指令执行一次,光标地址指针自动加一。指令参数格式为:,18.3.1 HD61830液晶显示器显示RAM结构,正常1616汉字的显示RAM是按图18.5 所示,而HD61830汉字显示RAM是按图18.6 排列;同时正常1616汉字的字模字节排列是高位在前,低为在后,如图18.7示,而HD61830显示时字节排列是高位在后,低为在前, 如图18.8示。 所以编写显示程序时要按此规律进行,按图18.6首先显示0号字节,显示完0号字节后,字模偏移量要加16,在同一行上显示16号字节;然后显示1号字节,17号字节,以此类推。显示时每个字节都先要调convert ( )按图18.8所示

10、进行转换,然后送HD61830。,88和816ASCII字符字膜、1616点阵、2424、1212、4848点阵汉字字膜在内存中都是高位在前,低位在后存放的。 所以88和816ASCII字符,1616、2424、1212、4848点阵汉字在写入HD61830时都要用程序转换。原理可参看具体程序和注释。,18.3.2 软件程序,HD61830液晶显示器驱动控制程序用C语言给出,完整程序、头文件、HD61830.pdf文档均在随书文件夹中,其中HD61830.C经Keil C 调试通过。 /- / HD61830.C /- #include #include #include #include #

11、include ,#include #include #include /常用变量定义 #include /个种字体小字库定义 #include #include #include #include #include #define DW_ADD XBYTE0x8000 /写数据口地址 #define DR_ADD XBYTE 0x8200 /读数据口地址 #define CW_ADD XBYTE 0x8100 /写指令口地址 #define CR_ADD XBYTE 0x8300 /读状态口地址,#define COM XBYTE0x30 /指令代码寄存器 #define DAT XBYTE

12、0x31 /数据寄存器 U8 ROW; / LCD地址指针高8位 U8 CUL; / LCD地址指针低8位 /程序声明: void W_DOT(U8 i,U8 j); /绘点函数 void C_DOT(U8 i,U8 j); /清点函数 void DrawHorizOntalLine(U8 xstar,U8 xend,U8 ystar); /画水平线 void DrawVerticalLine(U8 xstar,U8 ystar,U8 yend); /画垂直线 void Linexy(U8 stax,U8 stay ,U8 endx,U8 endy); /画斜线,void ClearHoriz

13、OntalLine(U8 xstar,U8 xend,U8 ystar); /清水平线 void ClearVerticalLine(U8 xstar,U8 ystar,U8 yend); /清垂直线 void ShowSinWave(void); /显示正弦曲线 void disdelay(void); /延时 void DrawOneChn2424(U8 x, U8 y, U8 chnCODE); /显示2424汉字 void DrawChnString2424(U8 x, U8 y, U8 *str,U8 s); /显示2424汉字串 void DrawOneSyb1616(U8 x,U

14、8 y,U16 chnCODE); /显示1616标号 void DrawOneChn1212( U8 x,U8 y,U16 chnCODE); /显示1212汉字 void DrawOneChn1616( U8 x,U8 y,U16 chnCODE); /显示1616汉字,void DrawOneChn16160(U16 x,U16 y,U8 chncode); void DrawChnString1616(U8 x,U8 y,U8 *str,U8 s); /显示1616汉字串 void DrawOneAsc816(U8 x,U8 y,U8 charCODE); /显示816ASCII字符

15、void DrawAscString816(U8 x,U8 y,U8 *str,U8 s); /显示816ASCII字符串 void DrawOneAsc88(U8 x,U8 y,U8 charCODE); /显示88ASCII字符 void DrawAscString88(U8 x,U8 y,U8 *str,U8 s); /显示88ASCII字符串 void FillColorScnArea(U8 x1,U8 y1,U8 x2,U8 y2); /画充添矩形 void DrawOneBoxs(U8 x1,U8 y1,U8 x2,U8 y2); /画矩形 void ObtuseAngleBoxs(U8 x1,U8 y1,U8 x2,U8 y2,U8 arc); /钝角方形 void ReDrawOneChn1616(U8 x,U8 y,U16

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号