下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第十三节:液晶屏第一大类定律--纵向显示八个点(SED1520驱动12232屏)

第十三节:液晶屏第一大类定律--纵向显示八个点(SED1520驱动12232屏).doc

第十三节:液晶屏第一大类定律--纵向显示八个点(SED…

男人我闭着眼参透你的心
2017-10-20 0人阅读 举报 0 0 暂无简介

简介:本文档为《第十三节:液晶屏第一大类定律--纵向显示八个点(SED1520驱动12232屏)doc》,可适用于工程科技领域

第十三节:液晶屏第一大类定律纵向显示八个点(SED驱动屏)第十三节:液晶屏第一大类定律纵向显示八个点SED驱动屏第一大类定律:纵向显示八个点的类型。这类液晶屏在纵向上以八个点一个字节为基本单位,因此Y坐标数值的最大范围是纵向上的点阵数除以八,然后再减去一(因为从零开始)。而X坐标数值的最大范围就直接是横向上的点阵数减去一因为从零开始。开场白:这节我以驱动芯片为SED的液晶屏为例子,来继续深入了解第一大类定律:纵向显示八个点的类型。液晶屏实际上是由左右两块的液晶屏合幵在一起的,跟前面提到的驱动芯片为KS的屏稍微有点不一样,它不是由两根IO口来片选不同的屏,而是通过两根不同的时钟线来区分不同的屏。因此,我们只要弄懂了一块液晶屏的显示方法就够了。屏在横向上是个点,纵向上是个点,也就是一个长方形的屏。因为它属于第一大类的屏,所以X轴坐标数值的最大范围是=,而纵向坐标数值的最大范围是=正常的操作思路是这样的,先发送Y轴不X轴的位置数据,确定位置后,再发送一个字节八个点的显示数据。这类屏跟之前介绍KS驱动的屏稍微有点不一样,每发送一次显示数据时,都要先重新设置一下Y不X轴的位置,X地址不会自动加一。字节正序不倒序的概念解释:当我们一次在纵向上显示八个点的基本单位时,实际上等于我们发送了一个字节的显示数据,比如x,如果是正序的屏,那么从上到下的八个点中,只有第个点是显示的,其它的是空白,而如果是倒序的屏,则只有第个点是显示的,其它是空白的。这个屏是属于倒序的屏。取模软件是必须的,读者可以在网上自己下载,资料很多。功能需求:在屏上的左屏和右屏分别显示X的字符,X的汉字,X的汉字。硬件原理:这类屏跟之前介绍KS驱动的屏稍微有点不一样,它没有的VEE这个端口。K可调电阻的左边端口直接悬空,VO接可调电阻的中间端口,可调电阻的右边端口接电源负极,此可调电阻在这里用来调节液晶屏的对比度。模块的复位引脚直接用一个K的电阻跟一个电容搭成上电低电平硬件复位电路,省一个IO口,也就是此IO口接一个K的上拉电阻,然后对地再接一个电容。模块不背光的电源线接上V,其它数据线跟单片机的IO口连接上。这个大家都懂。源码适合的单片机:PICf,晶振为MHz。源代码讲解如下:#include<pich>包含芯片相关头文件补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是dr,凡是输入的IO后缀都是sr,凡是数据总线后缀都是bus#defineEdrLATD#defineEdrLATD#defineRWdrLATD#defineRSdrLATD#defineLcmDataBusPORTBvoiddelay(unsignedintt)时序延时函数声明voidchkbusyleft()左屏忙检测,液晶驱动时序的一部分voidchkbusyright()左屏忙检测,液晶驱动时序的一部分voidwritecomleft(unsignedcharcmdcode)往左液晶模块写入指令voidwritecomright(unsignedcharcmdcode)往右液晶模块写入指令voidwritedataleft(unsignedcharDidrspdata)往左液晶模块写入数据voidwritedataright(unsignedcharDidrspdata)往右液晶模块写入数据voidscreenclear()清空屏的内容voidzfdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)左显示X的字符函数,本节的核心内容voidzfdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)右显示X的字符函数,本节的核心内容voidhzdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)左屏,显示X的汉字函数,本节的核心内容voidhzdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)右屏,显示X的汉字函数,本节的核心内容voidhzdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)左屏,显示X的汉字函数,本节的核心内容voidhzdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag)右屏,显示X的汉字函数,本节的核心内容voidinitlcd()初始化液晶模块补充说明:吴坚鸿程序风格是这样的,凡是字库内容,如果是字符,则前缀用zf,然后紧跟着点阵数,接着下划线,最后紧跟显示的字符。如果有重复的,则多加一个序列号标识。如果是汉字,则前缀用hz,其它的一样。constunsignedcharzfV=从取模软件中复制的字库,纵向取模,字节倒序{*文字:V**宋体此字体下对应的点阵为:宽x高=x*x,x,x,x,x,xC,x,x,x,x,x,x,xE,x,x,x,}constunsignedcharzf={*文字:**宋体此字体下对应的点阵为:宽x高=x*x,xF,x,x,x,x,x,x,x,x,x,x,x,x,xE,x,}constunsignedcharhzhong={*文字:鸿**宋体此字体下对应的点阵为:宽x高=x*x,x,x,x,x,xF,x,x,xFC,xE,x,x,x,xC,x,x,x,xC,x,x,x,x,xA,x,x,x,x,x,x,x,xF,x,}constunsignedcharhzge={*文字:哥**宋体此字体下对应的点阵为:宽x高=x*x,x,x,xA,xA,xA,xA,xA,xA,x,x,xE,x,x,x,x,x,x,x,xD,x,x,x,x,xD,x,x,xF,x,x,x,x,}constunsignedcharhzhong={*文字:鸿**宋体此字体下对应的点阵为:宽x高=x*x,x,x,x,x,x,x,x,x,xC,x,x,x,xE,x,x,xAC,x,x,xE,xE,x,x,x,x,x,x,x,xF,x,x,x,x,xFF,x,x,x,xF,x,x,x,x,x,xF,xC,xE,x,x,x,x,x,xF,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,xF,x,x,x,}constunsignedcharhzge={*文字:哥**宋体此字体下对应的点阵为:宽x高=x*x,x,x,x,x,x,xE,x,x,x,x,x,xE,x,x,x,x,xF,x,xC,x,x,x,x,x,x,x,x,x,xD,xD,x,x,x,x,x,xD,x,x,x,x,xF,x,x,x,x,x,x,x,x,x,x,x,xF,xF,x,x,x,x,x,xF,x,x,x,x,xF,x,x,x,x,x,x,}主程序main(){ADCON=xADCON=xfADCON=xTRISA=xTRISE=xTRISC=xfTRISD=xfTRISB=xRBPU=SSPEN=决定RA作为IOTRISE=补充说明,以上的内容为寄存器配置,每种不同的单片机会有点差异,大家不用过度关注以上寄存器的配置,只要知道有这么一回事即可initlcd()初始化液晶屏screenclear()清空整屏显示内容左屏,正显,X的汉字,“鸿哥V”hzdisplayleft(,,hzhong,)hzdisplayleft(,,hzge,)zfdisplayleft(,,zfV,)zfdisplayleft(,,zf,)右屏,反显,X的汉字,“鸿哥”hzdisplayright(,,hzhong,)hzdisplayright(,,hzge,)while(){CLRWDT()喂看门狗,大家不用过度关注此行}}时序延时子程序voiddelay(unsignedintt){unsignedintifor(i=i<ti)CLRWDT()}左屏忙闲检查,驱动液晶程序的一部分voidchkbusyleft(){RSdr=RWdr=Edr=左屏时钟线TRISB=xffwhile(LcmDataBusx)TRISB=x}右屏忙闲检查,驱动液晶程序的一部分voidchkbusyright(){RSdr=RWdr=Edr=右屏时钟线TRISB=xffwhile(LcmDataBusx)TRISB=x}写命令到左LCD,,驱动液晶程序的一部分voidwritecomleft(unsignedcharcmdcode){chkbusyleft()左屏忙检测Edr=左屏时钟线LcmDataBus=cmdcodeRSdr=RWdr=Edr=delay()Edr=delay()}写命令到右LCD,,驱动液晶程序的一部分voidwritecomright(unsignedcharcmdcode){chkbusyright()右屏忙检测Edr=右屏时钟线LcmDataBus=cmdcodeRSdr=RWdr=Edr=delay()Edr=delay()}写数据到左LCD,,驱动液晶程序的一部分voidwritedataleft(unsignedcharDidrspdata){chkbusyleft()左屏忙检测Edr=左屏时钟线LcmDataBus=DidrspdataRSdr=RWdr=Edr=delay()Edr=delay()}写数据到右LCD,,驱动液晶程序的一部分voidwritedataright(unsignedcharDidrspdata){chkbusyright()右屏忙检测Edr=右屏时钟线LcmDataBus=DidrspdataRSdr=RWdr=Edr=delay()Edr=delay()}*清空屏幕的内容,本节的核心内容*voidscreenclear(){unsignedcharj,i清空左屏for(j=j<j)此处的j代表Y轴的坐标,范围是(到),()={for(i=i<i)此处i代表X轴,范围是(到),={writecomleft(xj|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomleft(xFi)每发送一次显示数据,都重新设定一次X轴的当前位置writedataleft(x)都显示空内容,达到清空的目的}}清空右屏for(j=j<j)此处的j代表Y轴的坐标,范围是(到),()={for(i=i<i)此处i代表X轴,范围是(到),={writecomright(xj|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomright(xFi)每发送一次显示数据,都重新设定一次X轴的当前位置writedataright(x)都显示空内容,达到清空的目的}}}左屏,显示X的字符函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidzfdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X字符只占用两行,每行个点,两行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个字符的宽度是个点,因此范围是(到),={writecomleft(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomleft(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataleft(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataleft(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}右屏,显示X的字符函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidzfdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X字符只占用两行,每行个点,两行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个字符的宽度是个点,因此范围是(到),={writecomright(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomright(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataright(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataright(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}左屏,显示X的汉字函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidhzdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X汉字只占用两行,每行个点,两行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个X汉字的宽度是个点,因此范围是(到),={writecomleft(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomleft(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataleft(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataleft(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}右屏,显示X的汉字函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidhzdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X汉字只占用两行,每行个点,两行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个X汉字的宽度是个点,因此范围是(到),={writecomright(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomright(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataright(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataright(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}左屏,显示X的汉字函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidhzdisplayleft(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X汉字只占用三行,每行个点,三行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个X汉字的宽度是个点,因此范围是(到),={writecomleft(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomleft(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataleft(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataleft(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}右屏,显示X的汉字函数,本节的核心内容。col代表X轴,pag代表Y轴,zk代表显示相对应的字库,oppositeflag代表是否反显,表示正常显示,表示反显voidhzdisplayright(unsignedcharcol,unsignedcharpag,constunsignedchar*zk,unsignedcharoppositeflag){unsignedcharj=,i=for(j=j<j)此处j代表Y轴的数据,也就是显示第几行了,一个X汉字只占用三行,每行个点,三行的高度就是个点,{for(i=i<i)此处i代表X轴的数据,因为一个X汉字的宽度是个点,因此范围是(到),={writecomright(x(pagj)|xB)每发送一次显示数据,都重新设定一次Y轴的当前位置writecomright(xF(coli))每发送一次显示数据,都重新设定一次X轴的当前位置if(oppositeflag==)反显{writedataright(~zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}else正显{writedataright(zk*ji)发送显示的字节数据,纵向显示八个点,一行个点,因此*j}}}}*初始化LCD屏*voidinitlcd(){左屏初始化writecomleft(xE)writecomleft(xA)writecomleft(xA)writecomleft(xA)writecomleft(xC)writecomleft()writecomleft(xAF)右屏初始化writecomright(xE)writecomright(xA)writecomright(xA)writecomright(xA)writecomright(xC)writecomright()writecomright(xAF)}小结:读者要重点弄清楚voidscreenclear,voidzfdisplayleft,voidzfdisplayright,voidhzdisplayleft,voidhzdisplayright,voidhzdisplayleft,voidhzdisplayright这七个函数他们之间的联系不规律,即可掌握本节内容的精髓。我是今年月份第一次接触电子发烧友论坛,这里的版主很用心,也很包容。要不是他们一步步的发掘不引导,也许我也不会在不知不觉中写了这么多文章。到目前为止,我觉得电子发烧友已经是我的精神家园。以前我的程序都是直接在word文档里编写的,没有经过编译,因此很多语法错误。为了感谢电子发烧友网站,我决定从这一节开始,所有的程序都一律先经过编译器编译通过,然后再发表。也许以后复杂一点的程序,我还会附上原理图。(未完待续,下节更精彩,不要走开哦

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/21

第十三节:液晶屏第一大类定律--纵向显示八个点&#40;SED1520驱动12232屏&#41;

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利