第十三节液晶屏第一大类定律纵向显示八个点SED1520驱动12232屏.docx
《第十三节液晶屏第一大类定律纵向显示八个点SED1520驱动12232屏.docx》由会员分享,可在线阅读,更多相关《第十三节液晶屏第一大类定律纵向显示八个点SED1520驱动12232屏.docx(12页珍藏版)》请在冰豆网上搜索。
![第十三节液晶屏第一大类定律纵向显示八个点SED1520驱动12232屏.docx](https://file1.bdocx.com/fileroot1/2022-11/15/1cfa61ef-8fd0-49f1-b72f-956ac33529a8/1cfa61ef-8fd0-49f1-b72f-956ac33529a81.gif)
第十三节液晶屏第一大类定律纵向显示八个点SED1520驱动12232屏
第十三节:
液晶屏第一大类定律--纵向显示八个点(SED1520驱动12232屏)
第一大类定律:
纵向显示八个点的类型。
这类液晶屏在纵向上以八个点(一个字节)为基本单位,因此Y坐标数值的最大范围是纵向上的点阵数除以八,然后再减去一(因为从零开始)。
而X坐标数值的最大范围就直接是横向上的点阵数减去一(因为从零开始)。
(1) 开场白:
这节我以驱动芯片为SED1520的12232液晶屏为例子,来继续深入了解第一大类定律:
纵向显示八个点的类型。
12232液晶屏实际上是由左右两块6132的液晶屏合并在一起的,跟前面提到的驱动芯片为KS0107的12864屏稍微有点不一样,它不是由两根IO口来片选不同的屏,而是通过两根不同的时钟线来区分不同的屏。
因此,我们只要弄懂了一块6132液晶屏的显示方法就够了。
6132屏在横向上是61个点,纵向上是32个点,也就是一个长方形的屏。
因为它属于第一大类的屏,所以X轴坐标数值的最大范围是61-1=60,而纵向坐标数值的最大范围是(32/8)-1=3.正常的操作思路是这样的,先发送Y轴与X轴的位置数据,确定位置后,再发送一个字节(八个点)的显示数据。
这类屏跟之前介绍KS0107驱动12864的屏稍微有点不一样,每发送一次显示数据时,都要先重新设置一下Y与X轴的位置,X地址不会自动加一。
字节正序与倒序的概念解释:
当我们一次在纵向上显示八个点的基本单位时,实际上等于我们发送了一个字节的显示数据,比如0x01,如果是正序的屏,那么从上到下的八个点中,只有第8个点是显示的,其它的是空白,而如果是倒序的屏,则只有第1个点是显示的,其它是空白的。
12232这个屏是属于倒序的屏。
取模软件是必须的,读者可以在网上自己下载,资料很多。
(2)功能需求:
在12232屏上的左屏和右屏分别显示8X16的字符,16X16的汉字,24X24的汉字。
(3)硬件原理:
这类屏跟之前介绍KS0107驱动12864的屏稍微有点不一样,它没有的VEE这个端口。
20K可调电阻的左边端口直接悬空,VO接可调电阻的中间端口,可调电阻的右边端口接电源负极,此可调电阻在这里用来调节液晶屏的对比度。
模块的复位引脚直接用一个15K的电阻跟一个104电容搭成上电低电平硬件复位电路,省一个IO口,也就是此IO口接一个15K的上拉电阻,然后对地再接一个104电容。
模块与背光的电源线接上5V,其它数据线跟单片机的IO口连接上。
这个大家都懂。
(4)源码适合的单片机:
PIC18f4520,晶振为11.0592MHz。
(5)源代码讲解如下:
#include //包含芯片相关头文件
//补充说明:
吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的//IO后缀都//是_sr,凡是数据总线后缀都是_bus
#defineE1_drLATD4
#defineE2_drLATD5
#defineRW_drLATD6
#defineRS_drLATD7
#defineLcmDataBusPORTB
voiddelay(unsignedintt); //时序延时函数声明
voidchk_busy_left(); //左屏忙检测,液晶驱动时序的一部分
voidchk_busy_right(); //左屏忙检测,液晶驱动时序的一部分
voidwrite_com_left(unsignedcharcmdcode); //往左液晶模块写入指令
voidwrite_com_right(unsignedcharcmdcode); //往右液晶模块写入指令
voidwrite_data_left(unsignedcharDi_drspdata); //往左液晶模块写入数据
voidwrite_data_right(unsignedcharDi_drspdata); //往右液晶模块写入数据
voidscreen_clear(); //清空屏的内容
voidzf_display816_left(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//左显示8X16的字符函数,本节的核心内容
voidzf_display816_right(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//右显示8X16的字符函数,本节的核心内容
voidhz_display1616_left(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//左屏,显示16X16的汉字函数,本节的核心内容
voidhz_display1616_right(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//右屏,显示16X16的汉字函数,本节的核心内容
voidhz_display2424_left(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//左屏,显示24X24的汉字函数,本节的核心内容
voidhz_display2424_right(unsignedcharcol,unsignedcharpag,constunsignedchar *zk,unsignedcharopposite_flag);//右屏,显示24X24的汉字函数,本节的核心内容
voidinit_lcd(); //初始化液晶模块
//补充说明:
吴坚鸿程序风格是这样的,凡是字库内容,如果是字符,则前缀用zf,然后紧//跟着点阵数,接着下划线,最后紧跟显示的字符。
如果有重复的,则多加一个序列号标////识。
如果是汉字,则前缀用hz,其它的一样。
constunsignedchar zf816_V[]=//从取模软件中复制的字库,纵向取模,字节倒序
{
/*-- 文字:
V --*/
/*-- 宋体12; 此字体下对应的点阵为:
宽x高=8x16 --*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,
};
constunsignedchar zf816_5[]=
{
/*-- 文字:
5 --*/
/*-- 宋体12; 此字体下对应的点阵为:
宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
};
constunsignedchar hz1616_hong[]=
{
/*-- 文字:
鸿 --*/
/*-- 宋体12; 此字体下对应的点阵为:
宽x高=16x16 --*/
0x10,0x61,0x86,0x60,0x08,0xF8,0x08,0x00,0xFC,0x0E,0x35,0x04,0x44,0x7C,0x00,0x00,
0x04,0x7C,0x03,0x04,0x04,0x03,0x0A,0x08,0x09,0x09,0x09,0x09,0x49,0x81,0x7F,0x00,
};
constunsignedchar hz1616_ge[]=
{
/*-- 文字:
哥 --*/
/*-- 宋体12; 此字体下对应的点阵为:
宽x高=16x16 --*/
0x00,0x02,0x02,0x7A,0x2A,0x2A,0x2A,0x2A,0x7A,0x02,0x02,0x7E,0x02,0x82,0x00,0x00,
0x01,0x01,0x01,0x3D,0x15,0x15,0x15,0x15,0x3D,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,
};
constunsignedchar hz2424_hong[]=
{
/*-- 文字:
鸿 --*/
/*-- 宋体18; 此字体下对应的点阵为:
宽x高=24x24 --*/
0x00,0x80,0x00,0x04,0x18,0x90,0x40,0x40,0x40,0xC0,0x40,0x60,0x40,0xE0,0x20,0x30,
0xAC,0x24,0x20,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0xF8,0x07,0x00,0x00,
0x80,0xFF,0x80,0x40,0x00,0x7F,0x40,0x40,0x41,0x49,0x58,0x4F,0xC0,0xE0,0x00,0x00,
0x00,0x00,0x01,0x7F,0x60,0x00,0x01,0x01,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,
0x24,0x22,0x62,0x64,0x3F,0x03,0x00,0x00,
};
constunsignedchar hz2424_ge[]=
{
/*-- 文字:
哥 --*/
/*-- 宋体18; 此字体下对应的点阵为:
宽x高=24x24 --*/
0x00,0x00,0x00,0x08,0x08,0x08,0xE8,0x48,0x48,0x48,0x48,0x48,0xE8,0x08,0x08,0x08,
0x08,0xF8,0x08,0x0C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xD0,0xD3,0x52,
0x52,0x52,0x52,0x52,0xD3,0x10,0x10,0x10,0x10,0xF7,0x10,0x10,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x20,
0x60,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
};
//主程序
main()
{
ADCON0=0x00;
ADCON1=0x0f;
ADCON2=0x00;
TRISA=0x02;
TRISE=0x00;
TRISC=0x7f;
TRISD=0x0f;
TRISB=0x00;
RBPU=0;
SSPEN=0; //决定RA5作为IO
TRISE2=1;
//补充说明