版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第15章液晶显示模块编程15. 2.2 MG-12232模块的编程下面以图15.1的接口电路为例。液晶显示区域分成E1边和E2边,下面只含E1 边的程序(表15.1中E1=L E2=0), E2边(表15.1中E1=O, E2=l)类推。在系统程序的初始化部分,应对程序中用到的寄存器和临时变量作说明,如:unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned charTRANS:PAGE ADD; 存放页地址寄存器 PAGENUM; 存放
2、总页数寄存器 CLMSUM; 存放总列数寄存器 CLMADD; 存放列地址寄存器 WRITE; 存放显示数据寄存器 row ; 存放显示起始行寄存器 1, k; 通用寄存器系统各口的输入输出状态初始化子程序void INITIAL0ADCON1=OX87;TRISA3=0;TRISB0=0;TRISE=0X00;)读液晶显示器状态子程序void LCDSTA1Q设置PORTA 口和PORTE 口为数字I/O 口设置液晶的4个控制脚为输出while(l) TRISD=OXFF;RBO=1;RA3=0:REO=1;RE1=O;if(RD7=0) break;设置D 口为输入/El=l/E2=0R/
3、W=1/A0=0为忙状态,则继续等待其为空闲)对液晶显示器发指令子程序void TRANS 1()(指令保存在TRANS寄存器中)LCDSTA10;TRISD=0X00;判断液晶是否为忙置D 口为输出RBO=1;RA3=0:REO=O;RE1=O;PORTD=TRANS:RBO=O:REO=1;)/对液晶显示器写数据子程序void WRITE 10(TRANS=CLMADD;TRANS 1();LCDSTA10; TRISD=0X00;RB0=l; /El=lRA3=0: /E2=0RE0=0; R/W=0RE1=1; /A0=l PORTD=WRITE;RB0=0:CLMADD+;REO=1
4、;)开El显示子程序void DISP10(while(l)(TRANS=0XAF:TRANS 1();LCDSTA10; TRISD=OXFF;RB0=l;RA3=0:REO=1;RE1=O;if(RD5=0) break; )/El=l/E2=0R/W=0/A0=0需要写入的命令字送入数据线/El=0写入指令R/W=1(数据保存在WRITE寄存器中)设置列地址查询液晶是否为空闲/D 口为输出需要写入的数据放入D口/El=0,写入数据列地址加1R/W=1送出控制命令判断液晶是否为空闲设置D 口为输入/El=l/E2=0R/W=1/A0=0如果液晶没被关闭,则继续关/El边清屏子程序void
5、CLEAR 1()(PAGEADD=0xB8;设置页地址代码for(PAGENUM=0X04: PAGENUM0; PAGENUM-) TRANS=PAGEADD;TRANS 1();CLMADD=0x00;设置起始列foi(CLMSUM=0X50; CLMSUM0: CLMSUM-)LCDSTA1O;WRITE=0X00;WRITE1。;)PAGEADD+;)关E1显示子程序void DISOFF1Q判断液晶是否为空闲写入00H以清屏页号增1wlule(l)TRANS=OXAE:TRANS 1(): LCDSTA1(); TRISD=OXFF;RBO=1;RA3=0;REO=1;RE1=O:
6、if(RD5= 1) break; )发出控制命令判断液晶是否为空闲/D 口设置为输入/El=l/E2=0/RAV=1/A0=0如果液晶没被关闭,则继续关有了以上的通用子程序,就可以构造出各种显示程序,如字符、汉字、曲线等。 执行这些程序前,必须对液晶进行初始化。初始化的顺序为:关显示一正常显示驱动 设置一占空比设置一复位一ADC选择一清屏一开显示,程序如下: /E1边初始化void led 1()关显ElDISOFF1Q:TRANS=0XA4:TRANS 1();TRANS=0XA9:TRANS 1();TRANS=0XE2;TRANS 1(); TRANS=OXAO:TRANS 1();C
7、LEAR1();LCDSTA1O:DISP1O; )静态显示驱动发出控制命令占空比为1/32发出控制命令复位发出控制命令/ADC选择正常输出发出控制命令清屏判断液晶是否为空闲开显示15.4程序清单下面给出一个已经在模板上调试通过的程序。注意在调试该程序时,需把模板 上的J9跳针短接。#iiiclude 该程序用于液晶显示功能的演示运行程序后,液晶上显示“电流有效值”和“电压有效值”字样系统总的初始化子程序unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned const char0X48, 0X00, 0X
8、42, 0X00, OXFE, 0X40, 0X7F, 0X04, 0X24,chai- char chai- char chai- char chai- charTRANS;PAGE ADD: 存放页地址寄存器PAGENUM; /存放总页数寄存器CLMSUM:CLMADD;WRITE;row;i, k:table192=0X00,0X48, 0X07, 0X42, 0X00, 0X82, 0X30, 0X40, 0X04, 0X24,0X48, 0X02, 0X42, OXFE, 0X82, OXOF, 0X42, 0X04, 0X24,存放总列数寄存器/存放列地址寄存器存放显示数据寄存器
9、存放显示起始行寄存器 通用寄存器0XF8, 0X48, 0X48, 0X48, 0X48, OXFF, 0X48,OXFC, 0X02, 0X47, 0X02, 0X82, 0X40, 0X44, 0X84, 0XF4,0X08, 0X02, 0X40, 0X82, 0XC3, 0X40, 0X4C, 0XE4, 0X24,0X00, 0X02, 0X70, 0X82, 0X82,0X40, 0X60, 0X3C, 0X06,0X00, 0X3F, 0X00, 0X82, 0X00,0X40, 0X40, 0X27,0X00,0X42,0X00, /“ 电”0X82,0X00,0X40,0X0
10、0, /“压”0X24,0X04 , 0X00,0X4 , 0X2 , 0X1 , 0X0 , OXFF, 0X9, 0X9 , 0X9, 0X9 , 0X49, 0X89, 0X7F, 0X0, 0X0, 0X0 , 0X0,“有“0X88, 0X48, 0XB8, 0X9, OXA, 0X98, 0X2C , 0X48, 0X20, OXDO, 0X1F, 0X10, 0X10, 0XF8, 0X10 , 0X0, 0X40, 0X20, 0X18, 0X5, 0X2, OXD, 0X30 , 0X80, 0X80, 0X41, 0X36, 0X8, 0X37, OXCO, 0X40 ,
11、0X0,“效”0X80, 0X40, 0X20, 0XF8, 0X7, 0X4, 0XE4, 0XA4, 0XA4, OXBF, 0XA4, 0XA4, 0XF6, 0X24, 0X0 , 0X0, 0X0, 0X0, 0X0, OXFF, 0X40, 0X40, 0X7F, 0X4A, 0X4A, 0X4A, 0X4A, 0X4A, 0X7F, 0X40, 0X40 , 0X0, “值” 0X10, 0X22, 0X64, OXC, 0X80, 0X44, 0X44, 0X64, 0X55, 0X4E, 0X44, 0X54, 0X66, 0XC4, 0X0, 0X0, 0X4, 0X4,
12、OXFE, 0X1, 0X0, 0X80, 0X40, 0X3F, 0X0, OXFF, 0X0, 0X3F, 0X40, 0X40, 0X70, 0X0“流”; /系统各口的输入输出状态初始化子程序 void INITIAL。 ADCON1=OX87;设置 PORTA 口 和 PORTE 口 为数字 I/O 口TRISA3=0; TRISBO=O; TRISE=0X00:设置液晶的4个控制脚为输出) 读液晶显示器状态子程序 void LCDSTAIQwhile(l)TRISD=OXFF;RBO=1;RA3=0:REO=1;RE1=O:设置D 口为输入/El=l/E2=0/7RW=1if(RD
13、7=0) break;/A0=0为忙状态,则继续等待其为空闲)/对液晶显示器发指令子程序(指令保存在TRANS寄存器中)voidTRANS 1()LCDSTA10;TRISD=0X00;判断液晶是否为忙/7D 口为输出RBO=1;RA3=0:REO=O;RE1=O:PORTD=TRANS:RBO=O:REO=1;/El=l/E2=0/7RW=0/A0=0需要写入的命令字送入数据线/E1=O写入指令R/W=1)/对液晶显示器写数据子程序(数据保存在WRITE寄存器中)void WRITE 1。TRANS=CLMADD; 设置列地址/A0=l需要写入的数据放入D口/El=0,写入数据列地址加1R/
14、W=1TRANS 1(); LCDSTA10; TRISD=0X00;RBO=1;RA3=0:RE0=0;RE1=1; PORTD=WRITE; RB0=0:CLMADD+;REO=1;)开El显示子程序查询液晶是否为空闲/D 口为输出/El=l /E2=0/7RW=0voidDISP1Qwhile(l) TRANS=0XAF:TRANS 1(); LCDSTA10; TRISD=OXFF;RB0=l;RA3=0:REO=1;RE1=O; if(RD5=0) break; )/El边清屏子程序送出控制命令判断液晶是否为空闲设置D 口为输入/El=l /E2=0R/W=1/A0=0如果液晶没被关
15、闭,则继续关voidCLEAR1QPAGEADD=0xB8;设置页地址代码for(PAGENUM=0X04: PAGENUM0; PAGENUM-) TRANS=PAGEADD;TRANS 1():CLMADD=0x00;设置起始列for(CLMSUM=0X50; CLMSUM0: CLMSUM-) 判断液晶是否为空闲写入00H以清屏页号增1LCDSTA10;WRITE=0X00;WRITE10;)PAGEADD+:)关El显示子程序void DISOFFIO (wlHle(l) TRANS=OXAE;发出控制命令判断液晶是否为空闲/D 口设置为输入/El=l/E2=0/RAV=1/A0=0如
16、果液晶没被关闭,则继续关TRANS 1(); LCDSTA10; TRISD=OXFF;RBO=1;RA3=0:REO=1;RE1=O;if(RD5=l) break; )/El边初始化void led 1()关显E1 静态显示驱动 发出控制命令 占空比为1/32 发出控制命令 复位 发出控制命令DISOFFIO; TRANS=0XA4:TRANS 1();TRANS=0XA9;TRANS 1(); TRANS=0XE2;TRANS 1();/ADC选择正常输出发出控制命令清屏判断液晶是否为空闲开显示TRANS=OXAO:TRANS 1(); CLEAR1();LCDSTA1O;DISP1O;
17、)/E2边的处理部分读液晶显示器状态子程序while(l) TRISD=OXFF:RBO=O:RA3=1;REO=1;RE1=O: if(RD7=0)break;void LCDSTA2Q设置D 口为输入/E1=O/E2=lR/W=1/A0=0为忙状态,则继续等待其为空闲)/对液晶显示器发指令子程序指令保存在TRANS寄存器中void TRANS2QLCDSTA2();TRISD=OXOO;RBO=O:RA3=1;REO=O;RE1=O:PORTD=TRANS:RA3=0:REO=1;判断液晶是否为忙/D 口为输出/E1=O/E2=l/RW=O/A0=0需要写入的命令字送入数据线/E2=0写入
18、指令R/W=1)/对液晶显示器写数据子程序(数据保存在WRITE寄存器中)void WRITE2QTRANS=CLMADD; TRANS20; LCDSTA2(); TRISD=OXOO; RBO=O:设置列地址查询液晶是否为空闲/D 口为输出/E1=ORA3=1; REO=O; RE1=1; PORTD=WRITE; RA3=0: CLMADD+; REO=1; ) 开E2显示子程序 void DISP2() while(l) TRANS=OXAF: TRANS20; LCDSTA2(); TRISD=OXFF; RB0=0: RA3=1; REO=1; RE1=O; if(RD5=0) b
19、reak; ) ) /E2边清屏子程序 void CLEAR2() PAGEADD=0xB8;/E2=l/RW=0/A0=l需要写入的数据放入D口/E2=0,写入数据列地址加1R/W=1送出控制命令判断液晶是否为空闲/设置D 口为输入/El=0/E2=lR/W=1/A0=0如果液晶没被关闭,则继续关设置页地址代码foi(PAGENUM=0X04: PAGENUM0; PAGENUM-) TRANS=PAGEADD;TRANS2();CLMADD=0x00; 设置起始列foi(CLMSUM=0X50; LCDSTA20; WRITE=0X00; WRITE2。;)PAGEADD+;)关E2显示子
20、程序CLMSUM0: CLMSUM-) 判断液晶是否为空闲写入00H以清屏页号增1voidDISOFF2Q发出控制命令判断液晶是否为空闲/D 口设置为输入/El=0/E2=lR/W=1/A0=0如果液晶没被关闭,则继续关while(l) TRANS=OXAE; TRANS2(); LCDSTA2(); TRISD=OXFF; RB0=0:RA3=1;REO=1;RE1=O;if(RD5=l) break; )/E2边初始化void lcd2() DISOFF20;TRANS=0XA4:TRANS2();TRANS=0XA9:TRANS20:TRANS=0XE2;TRANS20:TRANS=0X
21、A0:TRANS20:CLEAR2(): LCDSTA2(); DISP2Q;关显小E1静态显示驱动发出控制命令占空比为1/32发出控制命令复位发出控制命令/ADC选择正常输出发出控制命令清屏判断液晶是否为空闲开显示)/LCD的E1边显示函数,调用一次该函数,则在相应的位置显示相应的字voiddis 1()TRANS=iow:TRANS 1();TRANS=PAGEADD;TRANS 1();1=1*32;i变成数组指示指针foi(k=0; k16; k-H-) WRITE=table计k;查得需要显示的字节WRITE1。;在WRITE1子程序里面,列地址加1)CLMADD=CLMADD-16
22、; 恢复列土也址PAGEADD=PAGEADD+1 ; 页地址加 1TRANS=PAGEADD;TRANS 1(); for(; k32; k-H-) WRITE=tableHk;查得需要显示的字节WRITE1O;在WRITE1子程序里面,列地址已经加1) ) /LCD的E2边显示函数,调用一次该函数,则在相应的位置显示相应的字 void dis2() ( TRANS=iow;TRANS2Q;TRANS=PAGEADD;TRANS2(); i=i*32;i变成数组指示指针foi(k=0: k16; k-H-) WRITE=tablei+k; 查得需要显示的字节WRITE2();在WRITE1子程序里面,列地址已经加1) CLMADD=CLMADD-16; 恢复列土也址 PAGEADD=PAGEADD+1 ; 页 土也址力口 1TRANS=PAGEADD;TRANS2O;查得需要显示的字节在WRITE 1子程序里面,列地址已经加1for(; k32; k-H-) WRITE=tablei + k; WRITE2();)主程序main()INITIAL。;led 1();lcd2(); row
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西红柿熟了课件
- 苏教版江苏省徐州市2023-2024学年下学期高二年级第三次检测数学试题
- 六年级数学上册《高频错题训练》
- 西京学院《土木工程施工》2021-2022学年第一学期期末试卷
- 2024秋期国家开放大学本科《古代小说戏曲专题》一平台在线形考(形考任务4)试题及答案
- 2025届江西省高三语文试题及答案
- 西京学院《大数据存储与管理技术》2022-2023学年期末试卷
- 西华师范大学《中国宗教史》2022-2023学年第一学期期末试卷
- 图文《黄昏》课件
- 西华师范大学《外国历史要籍研读》2021-2022学年第一学期期末试卷
- 新版中日交流标准日本语中级词汇表.上册
- (2024年)互联网医院整体方案介绍课件
- 网络销售药品质量安全管理制度
- 工程造价及竣工结算投标方案(技术标)
- 医保执法三项制度
- 未来科技与艺术的交融
- 银行开门红营销思路
- 学生网络安全意识调研报告
- (高清版)TDT 1053-2017 农用地质量分等数据库标准
- 2023年碳素材料行业分析报告及未来五至十年行业发展报告
- 牧原人才测评试题及答案
评论
0/150
提交评论