液晶显示模块编程

液晶显示模块编程

ID:64196429

大小:32.42 KB

页数:15页

时间:2021-09-01

上传者:无敌小子
液晶显示模块编程_第1页
液晶显示模块编程_第2页
液晶显示模块编程_第3页
液晶显示模块编程_第4页
液晶显示模块编程_第5页
液晶显示模块编程_第6页
液晶显示模块编程_第7页
液晶显示模块编程_第8页
液晶显示模块编程_第9页
液晶显示模块编程_第10页
资源描述:

《液晶显示模块编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第15章液晶显示模块编程15.2.2MG-12232模块的编程下面以图15.1的接口电路为例。液晶显示区域分成E1边和E2边,下面只含E1边的程序(表15.1中E1=LE2=0),E2边(表15.1中E1=O,E2=l)类推。在系统程序的初始化部分,应对程序中用到的寄存器和临时变量作说明,如:unsignedcharunsignedcharunsignedcharunsignedcharunsignedcharunsignedcharunsignedcharunsignedcharTRANS:PAGEADD;〃存放页地址寄存器PAGENUM;〃存放总页数寄存器CLMSUM;〃存放总列数寄存器CLMADD;〃存放列地址寄存器WRITE;〃存放显示数据寄存器row;〃存放显示起始行寄存器1,k;〃通用寄存器〃系统各口的输入输出状态初始化子程序voidINITIAL0ADCON1=OX87;TRISA3=0;TRISB0=0;TRISE=0X00;)〃读液晶显示器状态子程序voidLCDSTA1Q〃设置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=0〃R/W=1//A0=0〃为忙状态,则继续等待其为空闲))〃对液晶显示器发指令子程序voidTRANS1()(指令保存在TRANS寄存器中)LCDSTA10;TRISD=0X00;〃判断液晶是否为忙〃置D口为输出 RBO=1;RA3=0:REO=O;RE1=O;PORTD=TRANS:RBO=O:REO=1;)//对液晶显示器写数据子程序voidWRITE10(TRANS=CLMADD;TRANS1();LCDSTA10;TRISD=0X00;RB0=l;//El=lRA3=0://E2=0RE0=0;〃R/W=0RE1=1;//A0=lPORTD=WRITE;RB0=0:CLMADD++;REO=1;)〃开El显示子程序voidDISP10(while(l)(TRANS=0XAF:TRANS1();LCDSTA10;TRISD=OXFF;RB0=l;RA3=0:REO=1;RE1=O;if(RD5==0)break;)//El=l//E2=0〃R/W=0//A0=0〃需要写入的命令字送入数据线//El=0写入指令〃R/W=1(数据保存在WRITE寄存器中)〃设置列地址〃查询液晶是否为空闲//D口为输出〃需要写入的数据放入D口//El=0,写入数据〃列地址加1〃R/W=1〃送出控制命令〃判断液晶是否为空闲〃设置D口为输入//El=l//E2=0〃R/W=1//A0=0〃如果液晶没被关闭,则继续关 //El边清屏子程序voidCLEAR1()(PAGEADD=0xB8;〃设置页地址代码for(PAGENUM=0X04:PAGENUM>0;PAGENUM-){TRANS=PAGEADD;TRANS1();CLMADD=0x00;〃设置起始列foi(CLMSUM=0X50;CLMSUM>0:CLMSUM--){LCDSTA1O;WRITE=0X00;WRITE1。;)PAGEADD++;))〃关E1显示子程序voidDISOFF1Q〃判断液晶是否为空闲〃写入00H以清屏〃页号增1wlule(l)TRANS=OXAE:TRANS1():LCDSTA1();TRISD=OXFF;RBO=1;RA3=0;REO=1;RE1=O:if(RD5==1)break;))〃发出控制命令〃判断液晶是否为空闲//D口设置为输入//El=l//E2=0//RAV=1//A0=0〃如果液晶没被关闭,则继续关有了以上的通用子程序,就可以构造出各种显示程序,如字符、汉字、曲线等。执行这些程序前,必须对液晶进行初始化。初始化的顺序为:关显示一正常显示驱动设置一占空比设置一复位一ADC选择一清屏一开显示,程序如下://E1边初始化voidled1()〃关显ElDISOFF1Q: TRANS=0XA4:TRANS1();TRANS=0XA9:TRANS1();TRANS=0XE2;TRANS1();TRANS=OXAO:TRANS1();CLEAR1();LCDSTA1O:DISP1O;)〃静态显示驱动〃发出控制命令〃占空比为1/32〃发出控制命令〃复位〃发出控制命令//ADC选择正常输出〃发出控制命令〃清屏〃判断液晶是否为空闲〃开显示15.4程序清单下面给出一个已经在模板上调试通过的程序。注意在调试该程序时,需把模板上的J9跳针短接。#iiiclude〃该程序用于液晶显示功能的演示〃运行程序后,液晶上显示“电流有效值”和“电压有效值”字样〃系统总的初始化子程序unsignedunsignedunsignedunsignedunsignedunsignedunsignedunsignedconstchar0X48,0X00,0X42,0X00,OXFE,0X40,0X7F,0X04,0X24,chai-charchai-charchai-charchai-charTRANS;PAGEADD:〃存放页地址寄存器PAGENUM;//存放总页数寄存器CLMSUM:CLMADD;WRITE;row;i,k:table[192]={0X00,0X48,0X07,0X42,0X00,0X82,0X30,0X40,0X04,0X24,0X48,0X02,0X42,OXFE,0X82,OXOF,0X42,0X04,0X24,〃存放总列数寄存器//存放列地址寄存器〃存放显示数据寄存器〃存放显示起始行寄存器〃通用寄存器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,0X00,//“压”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,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,OXFE,0X1,0X0,0X80,0X40,0X3F,0X0,OXFF,0X0,0X3F,0X40,0X40,0X70,0X0〃“流”};//系统各口的输入输出状态初始化子程序voidINITIAL。{ADCON1=OX87;〃设置PORTA口和PORTE口为数字I/O口TRISA3=0;TRISBO=O;TRISE=0X00:〃设置液晶的4个控制脚为输出)〃读液晶显示器状态子程序voidLCDSTAIQwhile(l){TRISD=OXFF;RBO=1;RA3=0:REO=1;RE1=O:〃设置D口为输入//El=l//E2=0/7RW=1if(RD7==0)break;//A0=0〃为忙状态,则继续等待其为空闲)//对液晶显示器发指令子程序(指令保存在TRANS寄存器中)voidTRANS1()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寄存器中)voidWRITE1。TRANS=CLMADD;〃设置列地址//A0=l〃需要写入的数据放入D口//El=0,写入数据〃列地址加1〃R/W=1TRANS1();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:TRANS1();LCDSTA10;TRISD=OXFF;RB0=l;RA3=0:REO=1;RE1=O;if(RD5==0)break;))//El边清屏子程序〃送出控制命令〃判断液晶是否为空闲〃设置D口为输入//El=l//E2=0〃R/W=1//A0=0〃如果液晶没被关闭,则继续关 voidCLEAR1QPAGEADD=0xB8;〃设置页地址代码for(PAGENUM=0X04:PAGENUM>0;PAGENUM-){TRANS=PAGEADD;TRANS1():CLMADD=0x00;〃设置起始列for(CLMSUM=0X50;CLMSUM>0:CLMSUM-){〃判断液晶是否为空闲〃写入00H以清屏〃页号增1LCDSTA10;WRITE=0X00;WRITE10;)PAGEADD++:))〃关El显示子程序voidDISOFFIO(wlHle(l){TRANS=OXAE;〃发出控制命令〃判断液晶是否为空闲//D口设置为输入//El=l//E2=0//RAV=1//A0=0〃如果液晶没被关闭,则继续关TRANS1();LCDSTA10;TRISD=OXFF;RBO=1;RA3=0:REO=1;RE1=O;if(RD5==l)break;))//El边初始化voidled1(){〃关显E1〃静态显示驱动〃发出控制命令〃占空比为1/32〃发出控制命令〃复位〃发出控制命令DISOFFIO;TRANS=0XA4:TRANS1();TRANS=0XA9;TRANS1();TRANS=0XE2; TRANS1(); //ADC选择正常输出〃发出控制命令〃清屏〃判断液晶是否为空闲〃开显示TRANS=OXAO:TRANS1();CLEAR1();LCDSTA1O;DISP1O;)//E2边的处理部分〃读液晶显示器状态子程序while(l){TRISD=OXFF:RBO=O:RA3=1;REO=1;RE1=O:if(RD7==0)break;voidLCDSTA2Q〃设置D口为输入//E1=O//E2=l〃R/W=1//A0=0〃为忙状态,则继续等待其为空闲))//对液晶显示器发指令子程序指令保存在TRANS寄存器中voidTRANS2QLCDSTA2();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写入指令〃R/W=1)//对液晶显示器写数据子程序(数据保存在WRITE寄存器中)voidWRITE2Q TRANS=CLMADD;TRANS20;LCDSTA2();TRISD=OXOO;RBO=O:〃设置列地址〃查询液晶是否为空闲//D口为输出//E1=O RA3=1;REO=O;RE1=1;PORTD=WRITE;RA3=0:CLMADD++;REO=1;)〃开E2显示子程序voidDISP2(){while(l){TRANS=OXAF:TRANS20;LCDSTA2();TRISD=OXFF;RB0=0:RA3=1;REO=1;RE1=O;if(RD5==0)break;))//E2边清屏子程序voidCLEAR2(){PAGEADD=0xB8;//E2=l//RW=0//A0=l〃需要写入的数据放入D口//E2=0,写入数据〃列地址加1〃R/W=1〃送出控制命令〃判断液晶是否为空闲//设置D口为输入//El=0//E2=l〃R/W=1//A0=0〃如果液晶没被关闭,则继续关〃设置页地址代码foi(PAGENUM=0X04:PAGENUM>0;PAGENUM-){TRANS=PAGEADD;TRANS2();CLMADD=0x00;〃设置起始列foi(CLMSUM=0X50;LCDSTA20;WRITE=0X00;WRITE2。;)PAGEADD++;))〃关E2显示子程序CLMSUM>0:CLMSUM-){〃判断液晶是否为空闲〃写入00H以清屏〃页号增1 voidDISOFF2Q〃发出控制命令〃判断液晶是否为空闲//D口设置为输入//El=0//E2=l〃R/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边初始化voidlcd2(){DISOFF20;TRANS=0XA4:TRANS2();TRANS=0XA9:TRANS20:TRANS=0XE2;TRANS20:TRANS=0XA0:TRANS20:CLEAR2():LCDSTA2();DISP2Q;〃关显小E1〃静态显示驱动〃发出控制命令〃占空比为1/32〃发出控制命令〃复位〃发出控制命令//ADC选择正常输出〃发出控制命令〃清屏〃判断液晶是否为空闲〃开显示)//LCD的E1边显示函数,调用一次该函数,则在相应的位置显示相应的字voiddis1()TRANS=iow:TRANS1();TRANS=PAGEADD;TRANS1();1=1*32;〃i变成数组指示指针foi(k=0;k<16;k-H-){WRITE=table[计k];〃查得需要显示的字节 WRITE1。;〃在WRITE1子程序里面,列地址加1)CLMADD=CLMADD-16;〃恢复列土也址PAGEADD=PAGEADD+1;〃页地址加1TRANS=PAGEADD;TRANS1();for(;k<32;k-H-){WRITE=table[Hk];〃查得需要显示的字节WRITE1O;〃在WRITE1子程序里面,列地址已经加1))//LCD的E2边显示函数,调用一次该函数,则在相应的位置显示相应的字voiddis2()(TRANS=iow;TRANS2Q;TRANS=PAGEADD;TRANS2();i=i*32;〃i变成数组指示指针foi(k=0:k<16;k-H-){WRITE=table[i+k];〃查得需要显示的字节WRITE2();〃在WRITE1子程序里面,列地址已经加1)CLMADD=CLMADD-16;〃恢复列土也址PAGEADD=PAGEADD+1;〃页土也址力口1TRANS=PAGEADD;TRANS2O;〃查得需要显示的字节〃在WRITE1子程序里面,列地址已经加1for(;k<32;k-H-){WRITE=table[i+k];WRITE2();))〃主程序main()INITIAL。;led1();lcd2();row-OXCO;〃以下显示不同的字符〃系统初始化//E1边初始化//E2边初始化〃显示起始列为第0行 PAGEADD=0XB8;〃显示起始页为第0页CLMADD=OXOO:〃起始列为第0列1=0:〃显示数组中对应的第一个字dis1();〃调用显示函数PAGEADD=0XB8;〃显示起始页为第0页CLMADD=16:〃起始列为第16列i=l;〃显示数组中对应的第二个字dis1();〃调用显示函数PAGEADD=0XB8;〃显示起始页为第0页CLMADD=32;〃起始列为第32列i=2;〃显示数组中对应的第三个字dis1();〃调用显示函数PAGEADD=0XB8;〃显示起始页为第0页CLMADD=48:〃起始列为第48列i=3;〃显示数组中对应的第四个字dis1();〃调用显示函数PAGEADD=0XB8;〃显示起始页为第0页CLMADD=0:〃起始列为第0列1=4;〃显示数组中对应的第五个字dis2();〃调用E2边显示函数PAGEADD=0XBA:〃显示起始页为第2页CLMADD=0X00:〃起始列为第0列1=0:〃显示数组中对应的第一个字dis1();〃调用显示函数PAGEADD=0XBA:〃显示起始页为第2页CLMADD=16:〃起始列为第16列i=5;〃显示数组中对应的第六个字dis1();〃调用显示函数PAGEADD=0XBA:〃显示起始页为第2页CLMADD=32;〃起始列为第32列i=2;〃显示数组中对应的第三个字dis1();〃调用显示函数PAGEADD=0XBA:〃显示起始页为第2页CLMADD=48:〃起始列为第48列i=3;〃显示数组中对应的第四个字dis1();〃调用显示函数PAGEADD=0XBA:〃显示起始页为第2页CLMADD=0:〃起始列为第0列1=4;〃显示数组中对应的第五个字dis2();〃调用E2边显示函数 wlule(l){)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭