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

上传人:仙*** 文档编号:223854555 上传时间:2023-07-22 格式:PPT 页数:73 大小:234.50KB
收藏 版权申诉 举报 下载
单片机C语言程序设计教学作者侯殿有5.18_第1页
第1页 / 共73页
单片机C语言程序设计教学作者侯殿有5.18_第2页
第2页 / 共73页
单片机C语言程序设计教学作者侯殿有5.18_第3页
第3页 / 共73页
资源描述:

《单片机C语言程序设计教学作者侯殿有5.18》由会员分享,可在线阅读,更多相关《单片机C语言程序设计教学作者侯殿有5.18(73页珍藏版)》请在装配图网上搜索。

1、第十八章第十八章HD61830液晶显液晶显示器驱动控制示器驱动控制7/22/2023118.1 HD61830液晶显示器概述n n 1 1液晶显示控制器液晶显示控制器n nHD61830HD61830是图形液晶显示控制器是图形液晶显示控制器,可直接与可直接与MCS-51MCS-51系系列时序的列时序的MPUMPU接口。接口。n n2 2指令集指令集n nHD61830HD61830具有专门的指令集具有专门的指令集,可完成文本显示或图形显示可完成文本显示或图形显示的功能设置,以及实现画面卷动、光标闪烁、位操作等功的功能设置,以及实现画面卷动、光标闪烁、位操作等功能。能。n n 3 3HD6183

2、0 HD61830 内存管理内存管理n nHD61830 HD61830 可管理可管理64K64K显示显示RAMRAM,其中图形方式为,其中图形方式为64K64K,字符方式为,字符方式为4K4K;n n 4 4内部字符发生器内部字符发生器CGROMCGROMn nHD61830HD61830内部字符发生器内部字符发生器CGROMCGROM共有共有192192种字符,其种字符,其中中5757字体字体160160种,种,511511字体有字体有3232种,种,HD61830HD61830还可外接字还可外接字符发生器,使字符量达到符发生器,使字符量达到256256种。种。7/22/20232n n5

3、 5占空比占空比 n nHD61830HD61830具有较高占空比具有较高占空比,可以静态方式显示至可以静态方式显示至1/1281/128占空比的动态方式显示。占空比的动态方式显示。n n6 6HD61830HD61830封装和引脚封装和引脚n nHD61830HD61830封装为封装为6060个引脚,管脚排列如图示,管个引脚,管脚排列如图示,管脚功能如表示。脚功能如表示。7/22/202337/22/20234n n7多种组合功能 n n当为低电平时,RS,R/W,E的各种组合所实现的功能如表示:7/22/20235n n8HD61830的电气参数n nHD61830的电气参数如表示。n n

4、内嵌HD61830控制器的显示模块有很多,如:MGLS-8032B、MGLS240128、MGLS-8464、MGLS12864等等,它们的电气参数基本相同,指令系统是一样的。因此它们的显示控制程序编制均可参考本章介绍的方法进行。7/22/202367/22/2023718.2 HD61830的指令系统n n HD61830 HD61830有有1313条指令,指令是由一个指令代码和条指令,指令是由一个指令代码和一个功能参数组成。指令代码类似参数寄存器的一个功能参数组成。指令代码类似参数寄存器的地址代码,而参数才是实质的功能值。地址代码,而参数才是实质的功能值。MPUMPU向向HD61830HD

5、61830指令寄存器写入指令代码来选择参数寄指令寄存器写入指令代码来选择参数寄存器,再通过数据寄存器向参数寄存器写入参数存器,再通过数据寄存器向参数寄存器写入参数值,以实现功能的设置。值,以实现功能的设置。n nHD61830HD61830向向MPUMPU提供一个忙提供一个忙(BF)(BF)标志位:标志位:BF=1BF=1表表示当前示当前HD61830HD61830处于内部运行状态,不接受处于内部运行状态,不接受MPUMPU的访问的访问(读状态标志位除外读状态标志位除外),BF=0BF=0表示表示HD61830HD61830允许允许MPUMPU的访问。的访问。MPUMPU在访问在访问HD618

6、30HD61830时都要判时都要判断断BFBF是否为是否为0 0。n nMPUMPU可在可在RS=1RS=1下从数据总线下从数据总线D7D7位上读出位上读出BFBF标志标志值。值。7/22/2023818.2.1 方式控制指令n n1 1方式控制,指令代码为方式控制,指令代码为0 x000 x00n n该指令参数定义了显示方式。该指令参数定义了显示方式。n n其参数格式为:其参数格式为:n nD0D0:字符发生器选择,:字符发生器选择,D0=0D0=0为为CGROM,D0=1CGROM,D0=1为为EXCGROMEXCGROM;n nD1D1:显示方式选择,:显示方式选择,D1=0D1=0为文

7、本方式,为文本方式,D1=1D1=1为图形方式;为图形方式;n nD3D3与与D2D2组合实现如表功能:组合实现如表功能:n nD4D4:工作方式选择,:工作方式选择,D4=0D4=0为从方式,为从方式,D4=1D4=1为主方式;为主方式;n nD5D5:显示状态选择,:显示状态选择,D5=0D5=0为禁止显示,为禁止显示,D5=1D5=1为启用显示。为启用显示。7/22/20239n n 需要注意的是,使用图形方式(D1=1)时,只能使D0=D2=D3=0。一般情况下,HD61830采用主方式D4=1。当有两片HD61830并联时,则其中一片为主方式,一片为从方式。7/22/202310n

8、n2字体设置,指令代码0 x01n n该指令设置文本方式下字符的点阵大小,指令参数格式:n nVP:字符点阵行数,取值范围116;n nHP:字符点阵列数,图形方式表示一字节显示数据的有效位数,HP的取值范围为6,7,8。7/22/202311n n3帧设置,指令代码0 x03n n该指令的指令参数格式如下n nNX为显示时的帧扫描行数,其倒数即为占空比。对单屏结构的显示模块,NX即为其有效显示行数;对双屏显示结构的模块则2NX为其有效显示行数。:7/22/20231218.2.2 显示域设置指令n n显示域设置,指令代码0 x02n n指令参数格式如下:n nHN为一行显示所占的字节数,其取

9、值范围为2128内的偶数值,由HN和HP可得n n显示屏有效显示点列数N=HNHP。7/22/202313n n5显示缓冲区起始地址低8位SADL设置,指令代码0 x08n n该指令的指令参数格式如下:7/22/202314n n6显示缓冲区起始地址高8位SADH设置,指令代码0 x09n n该指令的指令参数格式如下:n n 以上两条指令设置了显示缓冲区起始地址,它们的指令参数分别是该地址的低位n n和高位字节。该地址对应显示屏上左上角显示位,显示缓冲区单元(即RAM单元)与n n显示屏上的显示位的对应关系如表所示:7/22/2023157/22/20231618.2.3 光标设置指令n n7

10、光标位置设置,指令代码0 x04n n文本方式下的光标为一行(81)点阵显示,该指令用来指明光标在字符位中第几行,指令参数格式如下:n n其中CP表示光标在字符体中的行位置,CP取值范围在1VP之问。CPVP时光标将被禁止。7/22/202317n n设置光标地址指针低8位CACL指令,指令代码0 x0an n该指令的指令参数格式如下:n n设置光标地址指针高8位cach指令,指令代码0 x0bn n该指令的指令参数格式如下:7/22/202318n n 以上两条指令设置光标地址指针,它们的指令参以上两条指令设置光标地址指针,它们的指令参数即是该光标地址指针的低位和高位字节。其作数即是该光标地

11、址指针的低位和高位字节。其作用一是用来指示当前要读、写显示缓冲区单元的用一是用来指示当前要读、写显示缓冲区单元的地址;二是用在文本方式下,指出光标或闪烁字地址;二是用在文本方式下,指出光标或闪烁字符在显示屏上的位置。符在显示屏上的位置。n n 由于光标地址计数器是由于光标地址计数器是1616位加位加1 1计数器,当第计数器,当第NN位从位从1 1变到变到0 0时,会引起第时,会引起第N+1N+1位自位自n n动加动加1 1,因此当设置低,因此当设置低8 8位地址时,若最高位位地址时,若最高位MSBMSB从从1 1变为变为0 0就会引起高就会引起高8 8位地址的最低位位地址的最低位LSBLSB加

12、加1 1。因。因此设置时应先设置低此设置时应先设置低8 8位,再设置高位,再设置高8 8位,而且即位,而且即使只需修改地址低使只需修改地址低8 8位,其高位也要跟着重新设置位,其高位也要跟着重新设置一次,以确保地址指针设置的万无一失。一次,以确保地址指针设置的万无一失。7/22/20231918.2.4 数据读写指令n n1010数据写指令代码数据写指令代码0 x0c0 x0cn n该指令将随后写入数据寄存器的数据送入光标地该指令将随后写入数据寄存器的数据送入光标地址指针指向的显示址指针指向的显示RAMRAM单元。光标地址指针将随单元。光标地址指针将随着每次数据的写入而自动加一修改。该指令功能

13、着每次数据的写入而自动加一修改。该指令功能的终止将由下一条指令的输入来完成。的终止将由下一条指令的输入来完成。n n1111数据读指令代码数据读指令代码0 x0d0 x0dn n该指令代码写入后,紧跟着一次该指令代码写入后,紧跟着一次“空读空读”操作后,操作后,则可以连续读出光标地址指针所指向单元的内容。则可以连续读出光标地址指针所指向单元的内容。光标地址指针将随着每次数据的读出而自动加一光标地址指针将随着每次数据的读出而自动加一修改,该指令功能的终止将由下一条指令的输入修改,该指令功能的终止将由下一条指令的输入来完成。来完成。7/22/20232018.2.5 “位”操作指令n n12“位清

14、”零,指令代码0 x0en n13“位置”1,指令代码0 x0fn n 以上两条指令的功能是将光标地址指针所指向的显示RAM单元中的某一位清零或n n置1。指令执行一次,光标地址指针自动加一。指令参数格式为:7/22/20232118.3.1 HD61830液晶显示器显示RAM结构n n正常正常16161616汉字的显示汉字的显示RAMRAM是按图是按图18.5 18.5 所示,而所示,而HD61830HD61830汉字显示汉字显示RAMRAM是按图是按图18.6 18.6 排列;同时正排列;同时正常常16161616汉字的字模字节排列是高位在前汉字的字模字节排列是高位在前,低为在低为在后后,

15、如图示如图示,而而HD61830HD61830显示时字节排列是高位在显示时字节排列是高位在后后,低为在前低为在前,如图示。如图示。n n所以编写显示程序时要按此规律进行,按图首先所以编写显示程序时要按此规律进行,按图首先显示显示0 0号字节,显示完号字节,显示完0 0号字节后,字模偏移量要号字节后,字模偏移量要加加1616,在同一行上显示,在同一行上显示1616号字节;然后显示号字节;然后显示1 1号字号字节,节,1717号字节,以此类推。显示时每个字节都先号字节,以此类推。显示时每个字节都先要调要调convert()convert()按图所示进行转换,然后送按图所示进行转换,然后送HD618

16、30HD61830。7/22/2023227/22/202323n n8888和和816ASCII816ASCII字符字膜、字符字膜、16161616点阵、点阵、24242424、12121212、48484848点阵汉字字膜在内存中都是高位在点阵汉字字膜在内存中都是高位在前,低位在后存放的。前,低位在后存放的。n n 所以所以8888和和816ASCII816ASCII字符,字符,16161616、24242424、12121212、48484848点阵汉字在写入点阵汉字在写入HD61830HD61830时都要用时都要用程序转换。原理可参看具体程序和注释。程序转换。原理可参看具体程序和注释。

17、7/22/20232418.3.2 软件程序n nHD61830HD61830液晶显示器驱动控制程序用液晶显示器驱动控制程序用C C语言给出,完整程语言给出,完整程序、头文件、文档均在随书文件夹中序、头文件、文档均在随书文件夹中,其中经其中经Keil C Keil C 调试通调试通过。过。n n/-/-n n/-/-n n#include#include n n#include#include n n#include#include n n#include#include n n#include#include 7/22/202325n n#include#includen n#include

18、#include n n#include#include /常用变量定义常用变量定义n n#include /#include /个种字体小字个种字体小字库定义库定义n n#include#include n n#include#include n n#include#include n n#include#include n n#include#include n n#define DW_ADD XBYTE0 x8000#define DW_ADD XBYTE0 x8000/写数据口地址写数据口地址n n#define DR_ADD XBYTE 0 x8200#define DR_ADD X

19、BYTE 0 x8200/读数据口地址读数据口地址n n#define CW_ADD XBYTE 0 x8100#define CW_ADD XBYTE 0 x8100/写指令口地址写指令口地址n n#define CR_ADD XBYTE 0 x8300#define CR_ADD XBYTE 0 x8300/读状态口地址读状态口地址7/22/202326n n#define COM XBYTE0 x30#define COM XBYTE0 x30 /指令代码寄存器指令代码寄存器n n#define DAT XBYTE0 x31#define DAT XBYTE0 x31 /数据寄存器数据寄

20、存器n nU8 ROW;U8 ROW;/LCD/LCD地址指针高地址指针高8 8位位n nU8 CUL;U8 CUL;/LCD/LCD地址指针低地址指针低8 8位位n n/程序声明:程序声明:n nvoid W_DOT(U8 i,U8 j);void W_DOT(U8 i,U8 j);/绘点函数绘点函数n nvoid C_DOT(U8 i,U8 j);void C_DOT(U8 i,U8 j);/清点函数清点函数n nvoid DrawHorizOntalLine(U8 xstar,U8 xend,U8 ystar);void DrawHorizOntalLine(U8 xstar,U8 xe

21、nd,U8 ystar);/画水平线画水平线n nvoid DrawVerticalLine(U8 xstar,U8 ystar,U8 yend);void DrawVerticalLine(U8 xstar,U8 ystar,U8 yend);/画垂直线画垂直线n nvoid Linexy(U8 stax,U8 stay,U8 endx,U8 endy);void Linexy(U8 stax,U8 stay,U8 endx,U8 endy);/画斜线画斜线7/22/202327n nvoid ClearHorizOntalLine(U8 xstar,U8 xend,U8 ystar);vo

22、id ClearHorizOntalLine(U8 xstar,U8 xend,U8 ystar);/清水平线清水平线n nvoid ClearVerticalLine(U8 xstar,U8 ystar,U8 yend);void ClearVerticalLine(U8 xstar,U8 ystar,U8 yend);/清垂直线清垂直线n nvoid ShowSinWave(void);void ShowSinWave(void);/显示正弦曲线显示正弦曲线n nvoid disdelay(void);void disdelay(void);/延时延时n nvoid DrawOneChn2

23、424(U8 x,U8 y,U8 chnCODE);void DrawOneChn2424(U8 x,U8 y,U8 chnCODE);/显示显示24242424汉字汉字n nvoid DrawChnString2424(U8 x,U8 y,U8 *str,U8 s);void DrawChnString2424(U8 x,U8 y,U8 *str,U8 s);/显示显示24242424汉字串汉字串n nvoid DrawOneSyb1616(U8 x,U8 y,U16 chnCODE);void DrawOneSyb1616(U8 x,U8 y,U16 chnCODE);/显示显示16161

24、616标号标号n nvoid DrawOneChn1212(U8 x,U8 y,U16 chnCODE);void DrawOneChn1212(U8 x,U8 y,U16 chnCODE);/显示显示12121212汉字汉字n nvoid DrawOneChn1616(U8 x,U8 y,U16 chnCODE);void DrawOneChn1616(U8 x,U8 y,U16 chnCODE);/显示显示16161616汉字汉字7/22/2023287/22/202329n nvoid DrawOneChn16160(U16 x,U16 y,U8 chncode);void DrawOn

25、eChn16160(U16 x,U16 y,U8 chncode);n nvoid DrawChnString1616(U8 x,U8 y,U8*str,U8 s);void DrawChnString1616(U8 x,U8 y,U8*str,U8 s);/显示显示16161616汉字串汉字串 n nvoid DrawOneAsc816(U8 x,U8 y,U8 charCODE);void DrawOneAsc816(U8 x,U8 y,U8 charCODE);/显示显示816ASCII816ASCII字符字符n nvoid DrawAscString816(U8 x,U8 y,U8*s

26、tr,U8 s);void DrawAscString816(U8 x,U8 y,U8*str,U8 s);/显示显示816ASCII816ASCII字符串字符串n nvoid DrawOneAsc88(U8 x,U8 y,U8 charCODE);void DrawOneAsc88(U8 x,U8 y,U8 charCODE);/显示显示88ASCII88ASCII字符字符n nvoid DrawAscString88(U8 x,U8 y,U8*str,U8 s);void DrawAscString88(U8 x,U8 y,U8*str,U8 s);/显示显示88ASCII88ASCII字

27、符串字符串n nvoid FillColorScnArea(U8 x1,U8 y1,U8 x2,U8 y2);void FillColorScnArea(U8 x1,U8 y1,U8 x2,U8 y2);/画充添矩形画充添矩形n nvoid DrawOneBoxs(U8 x1,U8 y1,U8 x2,U8 y2);void DrawOneBoxs(U8 x1,U8 y1,U8 x2,U8 y2);/画矩形画矩形n nvoid ObtuseAngleBoxs(U8 x1,U8 y1,U8 x2,U8 y2,U8 arc);void ObtuseAngleBoxs(U8 x1,U8 y1,U8 x

28、2,U8 y2,U8 arc);/钝角方形钝角方形n nvoid ReDrawOneChn1616(U8 x,U8 y,U16 chnCODE);void ReDrawOneChn1616(U8 x,U8 y,U16 chnCODE);/显示汉字显示汉字,反白反白n nvoid Pr0(void);void Pr0(void);/读读LCDLCD状态状态7/22/202330n nvoid Pr1(void);void Pr1(void);/写指令代码写指令代码n nvoid Pr2(void);void Pr2(void);/写指令参数和数据写指令参数和数据n nvoid Pr3(void)

29、;void Pr3(void);/读显示数据读显示数据n nvoid INT(void);void INT(void);/初始化子程序初始化子程序n nvoid SetLocat(U16 x,U16 y);void SetLocat(U16 x,U16 y);/定位子程序定位子程序n nvoid CLEAR(void);void CLEAR(void);/清屏子程序清屏子程序n nvoid DrawCGRAMChar(U16 x,U16 y,U8 charcode);void DrawCGRAMChar(U16 x,U16 y,U8 charcode);/显示一个显示一个CGRAM CGRAM

30、 字符字符n nvoid DrawCharString(U16 x,U16 y,U8*str,U8 s);void DrawCharString(U16 x,U16 y,U8*str,U8 s);/显示显示CGRAMCGRAM字符串字符串n nvoid TDrawCharString(void);void TDrawCharString(void);/显示一个字符串实例显示一个字符串实例n nvoid ReadByte(x,y);void ReadByte(x,y);/读某显示单元内容读某显示单元内容n nvoid TDrawOneChn1616(void);void TDrawOneChn1

31、616(void);/显示显示16161616点阵汉字点阵汉字n nvoid convert(void);void convert(void);/字膜转换字膜转换7/22/202331n nU8 stringp=0,1,2,3,4,5,6,7,8,9,10;U8 stringp=0,1,2,3,4,5,6,7,8,9,10;n nU8 ascstring816=1,U8 ascstring816=1,2,3,a,s,d,A,B,C;2,3,a,s,d,A,B,C;n nU8 cctab=/U8 cctab=/按字节正常存放的按字节正常存放的16161616点阵字模点阵字模例子,在例子,在HD6

32、1480HD61480上显示要转换。上显示要转换。n n0 x000,0 x004,0 x07F,0 x0FE,0 x040,0 x004,0 x04F,0 x0E4,0 x000,0 x004,0 x07F,0 x0FE,0 x040,0 x004,0 x04F,0 x0E4,n n0 x048,0 x024,0 x04F,0 x0E4,0 x040,0 x004,0 x05F,0 x0F4,0 x048,0 x024,0 x04F,0 x0E4,0 x040,0 x004,0 x05F,0 x0F4,n n0 x050,0 x014,0 x051,0 x014,0 x051,0 x014,

33、0 x052,0 x094,0 x050,0 x014,0 x051,0 x014,0 x051,0 x014,0 x052,0 x094,n n0 x044,0 x044,0 x048,0 x024,0 x07F,0 x0FC,0 x040,0 x004,0 x044,0 x044,0 x048,0 x024,0 x07F,0 x0FC,0 x040,0 x004,/圆圆n n0 x041,0 x020,0 x031,0 x024,0 x01F,0 x0FE,0 x001,0 x020,0 x041,0 x020,0 x031,0 x024,0 x01F,0 x0FE,0 x001,0 x0

34、20,n n0 x080,0 x008,0 x06F,0 x0FC,0 x021,0 x020,0 x001,0 x024,0 x080,0 x008,0 x06F,0 x0FC,0 x021,0 x020,0 x001,0 x024,n n0 x01F,0 x0FE,0 x029,0 x024,0 x0E9,0 x024,0 x02A,0 x0D4,0 x01F,0 x0FE,0 x029,0 x024,0 x0E9,0 x024,0 x02A,0 x0D4,7/22/202332n n0 x02C,0 x00C,0 x028,0 x004,0 x028,0 x014,0 x028,0 x0

35、08,0 x02C,0 x00C,0 x028,0 x004,0 x028,0 x014,0 x028,0 x008,/满满n n0 x000,0 x080,0 x000,0 x0A0,0 x000,0 x090,0 x03F,0 x0FC,0 x000,0 x080,0 x000,0 x0A0,0 x000,0 x090,0 x03F,0 x0FC,n n0 x020,0 x080,0 x020,0 x080,0 x020,0 x084,0 x03E,0 x044,0 x020,0 x080,0 x020,0 x080,0 x020,0 x084,0 x03E,0 x044,n n0 x02

36、2,0 x048,0 x022,0 x048,0 x022,0 x030,0 x02A,0 x020,0 x022,0 x048,0 x022,0 x048,0 x022,0 x030,0 x02A,0 x020,n n0 x024,0 x062,0 x040,0 x092,0 x081,0 x00A,0 x000,0 x006,0 x024,0 x062,0 x040,0 x092,0 x081,0 x00A,0 x000,0 x006,/成成n n0 x000,0 x080,0 x000,0 x080,0 x008,0 x080,0 x0FC,0 x080,0 x000,0 x080,0

37、x000,0 x080,0 x008,0 x080,0 x0FC,0 x080,n n0 x010,0 x084,0 x017,0 x0FE,0 x010,0 x084,0 x010,0 x084,0 x010,0 x084,0 x017,0 x0FE,0 x010,0 x084,0 x010,0 x084,n n0 x010,0 x084,0 x010,0 x084,0 x01D,0 x004,0 x0F1,0 x004,0 x010,0 x084,0 x010,0 x084,0 x01D,0 x004,0 x0F1,0 x004,7/22/202333n n0 x041,0 x004,0

38、x002,0 x044,0 x004,0 x028,0 x008,0 x010,0 x041,0 x004,0 x002,0 x044,0 x004,0 x028,0 x008,0 x010,/功功n n;n nU8 ctab=/*U8 ctab=/*注注1 1n n 0 x53,0 x75,0 x70,0 x70,0 x6F,0 x72,0 x74,0 x20,0 x54,0 x45,0 0 x53,0 x75,0 x70,0 x70,0 x6F,0 x72,0 x74,0 x20,0 x54,0 x45,0 x4C,0 x20,0 x3A,x4C,0 x20,0 x3A,n n 0 x20

39、,0 x30,0 x31,0 x30,0 x2D,0 x36,0 x32,0 x37,0 x38,0 x30,0 x20,0 x30,0 x31,0 x30,0 x2D,0 x36,0 x32,0 x37,0 x38,0 x30,0 x33,0 x37,0 x39;0 x33,0 x37,0 x39;n n/Support TEL:010-62780379/Support TEL:010-62780379 7/22/202334n n/读LCD状态n n/-n nvoid Pr0(void)n nn n U8 lcd_stat;n n lcd_stat=0 x80;n n while(lcd_

40、stat&0 x80)n n lcd_stat=CR_ADD;n n7/22/202335n n/-/-n n/写指令代码写指令代码n n/-/-n nvoid Pr1(void)void Pr1(void)n n n n Pr0();Pr0();n nCW_ADD=COM;CW_ADD=COM;n n n n/-/-n n/写指令参数和数据写指令参数和数据n n/-/-n nvoid Pr2(void)void Pr2(void)n n n n Pr0();Pr0();n n DW_ADD=DAT;DW_ADD=DAT;n n 7/22/202336n n/读显示数据读显示数据n n/-/-

41、n nvoid Pr3(void)void Pr3(void)n n n n Pr0();Pr0();n n DAT=DR_ADD;DAT=DR_ADD;n n n n/-/-n n/初始化子程序初始化子程序n n/-/-n nvoid INT(void)void INT(void)n n n nCOM=0 x00;COM=0 x00;n nPr1();Pr1();n n/DAT=0 x3c;/DAT=0 x3c;/开显示开显示,主方式主方式,文本方式文本方式n nDAT=0 x32;DAT=0 x32;/开显示开显示,主方式主方式,图形方式图形方式n nPr2();Pr2();/写参数写参数

42、7/22/202337n nCOM=0 x01;COM=0 x01;/字符体设置字符体设置n nPr1();Pr1();n nDAT=0 x77;DAT=0 x77;/字符体为字符体为8x88x8点阵点阵n nPr2();Pr2();n nCOM=0 x02;COM=0 x02;/显示域宽度设置显示域宽度设置 n nPr1();Pr1();n nDAT=0 x27;DAT=0 x27;/一行占显示一行占显示RAM 40RAM 40个字节个字节n nPr2();Pr2();n nCOM=0 x03;COM=0 x03;/帧帧 设置设置n nPr1();Pr1();n nDAT=0 x3f;DAT

43、=0 x3f;/64/64行扫描行行扫描行n nPr2();Pr2();n nCOM=0 x04;COM=0 x04;/光标形状设置光标形状设置7/22/202338n nPr1();Pr1();n nDAT=0 x07;DAT=0 x07;/光标为底线形式光标为底线形式 n nPr2();Pr2();n nCOM=0 x08;COM=0 x08;/显示起始地址设置显示起始地址设置n nPr1();Pr1();n nDAT=0 x00;DAT=0 x00;/低字节为低字节为 00H 00Hn nPr2();Pr2();n nCOM=0 x09;COM=0 x09;/显示起始地址设置显示起始地址

44、设置n nPr1();Pr1();n nDAT=0 x00;DAT=0 x00;/高字节为高字节为 00H 00Hn nPr2();Pr2();n n 7/22/202339n n/清屏子程序清屏子程序n n/-/-n nvoid CLEAR(void)void CLEAR(void)n n n nU16 i,j;U16 i,j;n nCOM=0 x0a;COM=0 x0a;n nPr1();Pr1();n nDAT=0 x00;DAT=0 x00;n nPr2();Pr2();n nCOM=0 x0b;COM=0 x0b;n nPr1();Pr1();n nDAT=0 x00;DAT=0 x

45、00;n nPr2();Pr2();n nCOM=0 x0c;COM=0 x0c;n nPr1();Pr1();n nDAT=0 x00;DAT=0 x00;n nfor(j=0;j10;j+)for(j=0;j10;j+)n n for(i=0;i=256;i+)for(i=0;i=256;i+)n n n n Pr2();Pr2();n n n n 7/22/202340n n/定位子程序定位子程序n n/-/-n nvoid SetLocat(U16 x,U16 y)/*void SetLocat(U16 x,U16 y)/*注注2 2n n n nU16 r;U16 r;n nr=y*

46、40+x;r=y*40+x;n nROW=r/256;ROW=r/256;n nCUL=r%256;CUL=r%256;n nCOM=0 x0a;COM=0 x0a;n nPr1();Pr1();n nDAT=CUL;DAT=CUL;n nPr2();Pr2();n nCOM=0 x0b;COM=0 x0b;n nPr1();Pr1();n nDAT=ROW;DAT=ROW;n nPr2();Pr2();n n 7/22/202341n n/显示一个显示一个CGRAM CGRAM 字符字符n n/-/-n nvoid DrawCGRAMChar(U16 x,U16 y,U8 charcode)

47、void DrawCGRAMChar(U16 x,U16 y,U8 charcode)/*/*注注3 3n n n nSetLocat(x,y);SetLocat(x,y);n n COM=0 x0C;/COM=0 x0C;/写数据指令代码写数据指令代码n n Pr1();Pr1();n nDAT=charcode;/DAT=charcode;/写数据写数据n nPr2();Pr2();n n 7/22/202342n n/显示一个显示一个CGRAM CGRAM 字符串字符串n n/-/-n nvoid DrawCharString(U16 x,U16 y,U8*str,U8 s)void D

48、rawCharString(U16 x,U16 y,U8*str,U8 s)/s/s是是字符串长度字符串长度n n n n U8 i;U8 i;n n static U16 x0,y0;static U16 x0,y0;n n x0=x;x0=x;n n y0=y;y0=y;n n for(i=0;is;i+)for(i=0;is;i+)n n n n DrawCGRAMChar(x0,y0,(U8)*(str+i);DrawCGRAMChar(x0,y0,(U8)*(str+i);n n x0+=8;x0+=8;-/-/水平串水平串,如垂直串如垂直串Y0+8Y0+8n n n n 7/22/

49、202343n n/显示一个显示一个CGRAM CGRAM 字符串实例字符串实例n n/-/-n nvoid TDrawCharString(void)/*void TDrawCharString(void)/*注注4 4n n n nDrawCharString(0,0,ctab,26);DrawCharString(0,0,ctab,26);n n n n/-/-n n/读某显示单元内容读某显示单元内容n n/-/-n nvoid ReadByte(x,y)/*void ReadByte(x,y)/*注注5 5n n n nSetLocat(x,y);SetLocat(x,y);n n C

50、OM=0 x0d;COM=0 x0d;n n Pr1();Pr1();n n Pr3();/“Pr3();/“空读空读”n n Pr3();/Pr3();/读得数据读得数据?DAT?DATn n 7/22/202344n n/写写16161616点阵汉字一个,字模按字节正常存放,转换后在点阵汉字一个,字模按字节正常存放,转换后在HD61480HD61480上显示上显示n n/-/-n nvoid DrawOneChn16160(U16 x,U16 y,U8 chncode)/*void DrawOneChn16160(U16 x,U16 y,U8 chncode)/*注注6 6n n n n

51、U8 i;U8 i;n n U8*p;U8*p;n n p=cctab+chncode*32;p=cctab+chncode*32;n nfor(i=0;i16;i+)for(i=0;i=0;i=i-1)for(i=7;i=0;i=i-1)n n n nv1=(DAT i)&0 x80;v1=(DAT(7-i);v2=v2|(v1(7-i);n n n nDAT=v2;DAT=v2;n n 7/22/202346n n/显示1616点阵汉字实例n n/-n nvoid TDrawOneChn1616(void)n nn nDrawOneChn16160(0,0,0);n nDrawOneChn

52、16160(16,0,1);n nDrawOneChn16160(32,0,2);n nDrawOneChn16160(64,0,3);n n7/22/202347n n/绘点函数绘点函数n n/-/-n nvoid W_DOT(U8 i,U8 j)/*void W_DOT(U8 i,U8 j)/*注注8 8n n n nU16 n;U16 n;n nU8 m;U8 m;n nn=i/8;n=i/8;n n m=i%8;m=i%8;n n SetLocat(n,j);/SetLocat(n,j);/移地址指针移地址指针n n COM=0 x0f;COM=0 x0f;n n Pr1();Pr1(

53、);n n/m=0 x07-m;/m=0 x07-m;n n DAT=m&0 x07;DAT=m&0 x07;n n Pr2();Pr2();n n 7/22/202348n n/清点函数清点函数n n/-/-n nvoid C_DOT(U8 i,U8 j)void C_DOT(U8 i,U8 j)n n n n U8 n,m;U8 n,m;n n n=i/8;n=i/8;n n m=i%8;m=i%8;n n SetLocat(n,j);/SetLocat(n,j);/移地址指针移地址指针n n COM=0 x0e;COM=0 x0e;n n Pr1();Pr1();n n /m=0 x07

54、-m;/m=0 x07-m;n n DAT=m&0 x07;DAT=m&0 x07;n n Pr2();Pr2();n n 7/22/202349n n/画水平线画水平线n n/-/-n nvoid DrawHorizOntalLine(U8 xstar,U8 xend,U8 ystar)void DrawHorizOntalLine(U8 xstar,U8 xend,U8 ystar)n n n n U8 i;U8 i;n n for(i=xstar;i=xend;i+)for(i=xstar;i=xend;i+)n n n n W_DOT(i,ystar);W_DOT(i,ystar);n

55、 n n n n n/-/-n nvoid DrawVerticalLine(U8 xstar,U8 ystar,U8 yend)void DrawVerticalLine(U8 xstar,U8 ystar,U8 yend)n n n n U8 i;U8 i;n n for(i=ystar;i=yend;i+)for(i=ystar;i=yend;i+)n n n n W_DOT(xstar,i);W_DOT(xstar,i);n n n n 7/22/202350n n/清水平线清水平线n n/-/-n nvoid ClearHorizOntalLine(U8 xstar,U8 xend,

56、U8 ystar)void ClearHorizOntalLine(U8 xstar,U8 xend,U8 ystar)n n n n U8 i;U8 i;n n for(i=xstar;i=xend;i+)for(i=xstar;i=xend;i+)n n n n C_DOT(i,ystar);C_DOT(i,ystar);n n n n n n/-/-n n/清垂直线线清垂直线线n n/-/-n nvoid ClearVerticalLine(U8 xstar,U8 ystar,U8 yend)void ClearVerticalLine(U8 xstar,U8 ystar,U8 yend

57、)n n n n U8 i;U8 i;n n for(i=ystar;i=yend;i+)for(i=ystar;i0)incx=1;if(deltax0)incx=1;n n else if(deltax=0)incx=0;else if(deltax=0)incx=0;n n else incx=-1;else incx=-1;n n if(deltay0)incy=1;if(deltay0)incy=1;n n else if(deltay=0)incy=0;else if(deltay=0)incy=0;n n else incy=-1;else incy=-1;n n deltax=

58、abs(deltax);deltax=abs(deltax);n n deltay=abs(deltay);deltay=abs(deltay);n n if(deltax deltay)if(deltax deltay)n ndistance=deltax;distance=deltax;n n else distance=deltay;else distance=deltay;n n for(t=0;t=distance+1;t+)for(t=0;t distance)if(xerr distance)n n n n xerr-=distance;xerr-=distance;n n co

59、l+=incx;col+=incx;n n n n if(yerr distance)if(yerr distance)n n n n yerr-=distance;yerr-=distance;n n row+=incy;row+=incy;n n n n n n 7/22/202354n n/显示一个正弦曲线显示一个正弦曲线n n/-/-n n void ShowSinWave(void)void ShowSinWave(void)n n n n unsigned int x,j0,k0;unsigned int x,j0,k0;n n double y,a,b;double y,a,b;

60、n n j0=0;j0=0;n n k0=0;k0=0;n nDrawHorizOntalLine(1,159,32);DrawHorizOntalLine(1,159,32);/画坐标画坐标 x x范围范围(0160)(0160)n nDrawVerticalLine(0,0,63);DrawVerticalLine(0,0,63);/y/y范围范围(063)(063)n n for(x=0;x=160;x+)for(x=0;x=160;x+)n n n n a=(float)x/160)*2*3.14;a=(float)x/160)*2*3.14;n n y=sin(a);y=sin(a)

61、;n n b=(1-y)*32;b=(1-y)*32;n n W_DOT(U16)x,(U16)b);W_DOT(U16)x,(U16)b);n n disdelay();disdelay();n n n n 7/22/202355n n/显示一个显示一个24242424汉字汉字n n/-/-n nvoid DrawOneChn2424(U8 x,U8 y,U8 chnCODE)void DrawOneChn2424(U8 x,U8 y,U8 chnCODE)n n n n U8 i,j,k,tstch;U8 i,j,k,tstch;n n U8*p;U8*p;n n p=chn2424+72

62、*(chnCODE);p=chn2424+72*(chnCODE);n n for(i=0;i24;i+)for(i=0;i24;i+)n n n n for(j=0;j=2;j+)for(j=0;j=2;j+)n n n n tstch=0 x80;tstch=0 x80;n n for(k=0;k8;k+)for(k=0;k1;tstch=tstch1;n n n n n n n n 7/22/202356n n/显示显示2424 2424 汉字串汉字串n n/-/-n nvoid DrawChnString2424(U8 x,U8 y,U8 *str,U8 s)void DrawChnS

63、tring2424(U8 x,U8 y,U8 *str,U8 s)n n n n U8 i;U8 i;n n static U16 x0,y0;static U16 x0,y0;n n x0=x;x0=x;n n y0=y;y0=y;n n for(i=0;is;i+)for(i=0;is;i+)n n n nDrawOneChn2424(x0,y0,(U8)*(str+i);DrawOneChn2424(x0,y0,(U8)*(str+i);n nx0+=24;x0+=24;/水平串水平串,如垂直串如垂直串Y0+24Y0+24n n n n 7/22/202357n n/显示显示161616

64、16标号标号(报警和音响报警和音响)n n/-/-n nvoid DrawOneSyb1616(U8 x,U8 y,U16 chnCODE)void DrawOneSyb1616(U8 x,U8 y,U16 chnCODE)n n n n int i,k,tstch;int i,k,tstch;n n unsigned int*p;unsigned int*p;n n p=syb1616+16*chnCODE;p=syb1616+16*chnCODE;n n for(i=0;i16;i+)for(i=0;i16;i+)n n n n tstch=0 x80;tstch=0 x80;n n fo

65、r(k=0;k8;k+)for(k=0;k8&tstch)if(*p8&tstch)n nW_DOT(x+k,y+i);W_DOT(x+k,y+i);n nif(*p&0 x00ff)&tstch)if(*p&0 x00ff)&tstch)n nW_DOT(x+k+8,y+i);W_DOT(x+k+8,y+i);n ntstch=tstch 1;tstch=tstch 1;n n n n p+=1;p+=1;n n n n 7/22/202358n n/延时延时n n/-/-n nvoid disdelay(void)void disdelay(void)n n n n unsigned lo

66、ng i,j;unsigned long i,j;n n i=0 x01;i=0 x01;n n while(i!=0)while(i!=0)n n n n j=0 xffff;j=0 xffff;n n while(j!=0)while(j!=0)n n j-=1;j-=1;n ni-=1;i-=1;n n n n 7/22/202359n n/显示显示12121212汉字一个汉字一个n n/-/-n nvoid DrawOneChn1212(U8 x,U8 y,U16 chnCODE)void DrawOneChn1212(U8 x,U8 y,U16 chnCODE)n n n n U16 i,j,k,tstch;U16 i,j,k,tstch;n n U8*p;U8*p;n n p=chn1212+24*(chnCODE);p=chn1212+24*(chnCODE);n n for(i=0;i12;i+)for(i=0;i12;i+)n n n n for(j=0;j2;j+)for(j=0;j2;j+)n n n n tstch=0 x80;tstch=0 x80;n n f

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!