点阵LCD中具体的像素点和十六进制数怎么相除的关系

点阵LCD的显示原理
点阵LCD的显示原理
&&&&在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。
&&&&那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:
图1 “A”字模图
&&&&而中文的“你”在字模中的记载却如图2所示:
图2 “你”字模图
12864点阵型LCD简介
&&&&12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128&64全点阵液晶显示器组成。可完成图形显示,也可以显示8&4个(16&16点阵)汉字。
管脚功能描述
液晶显示器驱动电压
D/I=“H”,表示DB7∽DB0为显示数据
D/I=“L”,表示DB7∽DB0为显示指令数据
R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
R/W=“L”,E信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
H:选择芯片(右半屏)信号
H:选择芯片(左半屏)信号
复位信号,低电平复位
LCD驱动负电压
LED背光板电源
LED背光板电源
表1:12864LCD的引脚说明
&&&&在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:
1. 指令寄存器(IR)
&&&&IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)
&&&&DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。
3.忙标志:BF
&&&&BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。
&&&&利用STATUS
READ指令,可以将BF读到DB7总线,从检验模块之工作状态。
4.显示控制触发器DFF
&&&&此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY
OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。
&&&&DDF的状态是指令DISPLAY
ON/OFF和RST信号控制的。
5.XY地址计数器
&&&&XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。
&&&&X地址计数器是没有记数功能的,只能用指令设置。
&&&&Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
6.显示数据RAM(DDRAM)
&&&&DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。
7.Z地址计数器
&&&&Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。
&&&&Z地址计数器可以用指令DISPLAY
LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
12864LCD的指令系统及时序
&&&&该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表2所示:
显示起始行设置
列地址设置
表2:12864LCD指令表
各功能指令分别介绍如下。
显示开/关指令
DB7 DB6 DB5 DB4 DB3DB2DB1
当DB0=1时,LCD显示RAM中的内容;DB0=0时,关闭显示。
2、显示起始行(ROW)设置指令
DB7 DB6 DB5 DB4 DB3DB2DB1
11显示起始行(0~63)
该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。
3、页(PAGE)设置指令
DB7 DB6 DB5 DB4 DB3DB2DB1
10111页号(0~7)
显示RAM共64行,分8页,每页8行。
4、列地址(Y Address)设置指令
DB7 DB6 DB5 DB4 DB3DB2DB1
01显示列地址(0~63)
设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以
用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
5、读状态指令
DB7 DB6 DB5 DB4 DB3DB2DB1
BUSY0ON/OFFREST0000
该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:
BUSY:1-内部在工作0-正常状态
ON/OFF:1-显示关闭0-显示打开
RESET:1-复位状态0-正常状态
在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。
在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。
6、写数据指令
DB7 DB6 DB5 DB4 DB3DB2DB1
读数据指令
DB7 DB6 DB5 DB4 DB3DB2DB1
读显示数据
&&&&读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。
12864点阵型LCD软硬件设计实例
&&&&通过以上学习,现在就来实际应用12864LCD的软硬件设计。本实例将在LCD上显示如图3所示内容:
图3 模拟显示效果图
&&&&在调试前先将显示切换开关切换到LCD显示状态。
图4 128*64LCD实验演示图
硬件原理图
图5 硬件原理图
程序流程图
图6 软件流程图
&&&&在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,我们可以借助取模软件来完成。目前点阵LCD的取模软件有很多,我们以本开发板配套的取模软件为例来介绍一下汉字的取模方法。
&&&&打开取模软件出现如下显示界面:
&&&&在文字输入区中输入文字,我们以输入一个欢迎的“欢”字为例,了解其取模过程。在文字输入区中输入“欢”后按CTRL+ENTER组合键后就看到“欢”字已经在模拟显示区显示出来了
&&&&在“取模方式”中选择“C51格式”就可以在“点阵生成区”得到你要的汉字“欢”的显示代码。
&&&&经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字“欢”了,其它汉字也用同样的方法。取完要显示的全部汉字代码后我们就可以编程了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。正在初始化报价器lcd点阵屏和lcd液晶屏有哪些区别谁说说看?3个回答孤TT独点阵LCD像素都是由固定大小的点组成 这些点按照阵列的方式排列
比如12864 就是由横向128 X竖向64个点 组成的
竺觅珊  点样式lcd显示屏:是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上全面赶上和超过CRT的显示器件,它的性能优良、大规模生产特性好,自动化程度高,原材料成本低廉,发展空间广阔,抗干扰性能好、安全性强 段式显示屏:就像课表上的数字显示一样,只能显示数字。而没有其他.段式液晶屏就像计算器上的显示类型,只能显示8字或者像座机上面的显示类型。 点阵的液晶屏就是屏幕里有很多颗点,通过控制这些点来显示想要显示的图形或者汉字。段式的很便宜,点阵贵点。点阵例子:12864点阵的就是竖行有128列,横行有64行。一共有128*64这么多的点。
smallbiao2012lcd点阵屏和lcd液晶屏区别:
1、LCD和LED电视用的显示屏都是一样的,都是液晶屏。
2、不同的是它的背光源,LCD一般是CCFL的,LED用的是发光二极管
3、相对来说,LED省电,环保,寿命长,发热量小,亮度好,色彩均匀,一两个LED坏了可以继续使用。
希望我的回答可以帮助到您。
其他回答热门问答1234567891011121314151617181920查看更多21222324252627282930相关问答2个回答腌麳蚹柕桶感应
估计跟LED灯的2极设计有关2个回答go香仿1.每个led有一个光敏原件?和矩阵键盘一样的道理? 2.亮度的原因?(激光笔亮度是很高的) ps:以上回答都是猜的2个回答亀山俊樹1.每个led有一个光敏原件?和矩阵键盘一样的道理? 2.亮度的原因?(激光笔亮度是很高的) ps:以上回答都是猜的1个回答一生气就咬嘴唇你好啊,约1~3天,消肿后即形成微痂,5~7天脱落,形成的新生皮肤呈淡淡的粉色,恢复期为7-10天。一般需要多次(3~5次)治疗。
查看原帖&&1个回答万物比作热干面点阵液晶释义:点阵液晶,是按照一定规则排列起来的列阵。常见的有图行点阵液晶模组。2个回答cloretta现在市场价格。液晶显示器,或称LCD(LiquidCrystalDisplay),为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前...2个回答1_1561现在市场价格。液晶显示器,或称LCD(LiquidCrystalDisplay),为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前...1个回答TEL点阵屏是指由规则排列的像素点组成的屏幕,从这个意义上来说,大部分TFT屏幕都属于点阵屏。平时所说的点阵屏,大多默认是指LED点阵屏。 TFT是LCD屏幕的一种。3个回答龚zdled点阵屏价格大概100元。LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块LED点阵屏化的显示器件,通常由显示模块、控制系...2个回答wzz5051.每个led有一个光敏原件?和矩阵键盘一样的道理? 2.亮度的原因?(激光笔亮度是很高的) ps:以上回答都是猜的点阵汉字显示原理及其在点阵LCD&LED中的应用_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
点阵汉字显示原理及其在点阵LCD&LED中的应用
&&字库显示
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩3页未读,
定制HR最喜欢的简历
你可能喜欢第71节:液晶屏的字符,16点阵,24点阵和32点阵的显示程序
> 第71节:液晶屏的字符,16点阵,24点阵和32点阵的显示程序
第71节:液晶屏的字符,16点阵,24点阵和32点阵的显示程序
开场白:这一节要教会大家二个知识点:本文引用地址:第一个:如何利用任意点阵字体显示函数display_lattice来显示8x16的字符,16点阵汉字,24点阵汉字和32点阵汉字。第二个:纠正上一节的一个小错误。C51编译器跟其它单片机的编译器有点不一样。想把常量数据保存在ROM程序存储区里并不是用const关键字,而是是用code关键字。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。(2)实现功能:开机上电后,可以看到液晶屏分别显示32点阵,24点阵和16点阵的&馒头&两个字,还有&V5&这两个8x16点阵的字符。(3)源代码讲解如下:#include "REG52.H"sbit LCDCS_dr = P1^6; //片选线sbit LCDSID_dr = P1^7; //串行数据线sbit LCDCLK_dr = P3^2; //串行时钟线sbit LCDRST_dr = P3^4; //复位线void SendByteToLcd(unsigned char ucData); //发送一个字节数据到液晶模块void SPIWrite(unsigned char ucWData, unsigned char ucWRS); //模拟SPI发送一个字节的命令或者数据给液晶模块的底层驱动void WriteCommand(unsigned char ucCommand); //发送一个字节的命令给液晶模块void LCDWriteData(unsigned char ucData); //发送一个字节的数据给液晶模块void LCDInit(void); //初始化 函数内部包括液晶模块的复位void display_lattice(unsigned int x,unsigned int y,const unsigned char *ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount); //显示任意点阵函数void display_clear(void); // 清屏void delay_short(unsigned int uiDelayshort); //延时/* 注释一:* 纠正上一节的一个小错误。C51编译器跟其它的编译器有点不一样。* 存在ROM程序存储区里的常量数据并不是用const关键字,而是是用code关键字。*/code unsigned char Hz3232_man[]= /*馒 横向取模 32x32点阵 */{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x03,0x00,0x0F,0x87,0xFF,0x80,0x0F,0x07,0x03,0x80,0x0E,0x07,0x03,0x80,0x0E,0x37,0xFF,0x80,0x1C,0x7F,0x03,0x80,0x1F,0xFF,0x03,0x80,0x18,0x77,0xFF,0x00,0x38,0xE0,0x00,0xC0,0x36,0xDF,0xFF,0xF0,0x77,0x9C,0xCE,0xE0,0x67,0x1C,0xCE,0xE0,0xC7,0x1C,0xCE,0xE0,0x07,0x1C,0xCE,0xE0,0x07,0x1F,0xFF,0xE0,0x07,0x18,0x00,0x00,0x07,0x00,0x03,0x80,0x07,0x0F,0xFF,0xC0,0x07,0x71,0x8F,0x00,0x07,0xE0,0xDE,0x00,0x07,0xC0,0xFC,0x00,0x07,0x80,0x78,0x00,0x0F,0x01,0xFE,0x00,0x07,0x03,0x8F,0xE0,0x00,0x1E,0x03,0xF0,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char Hz3232_tou[]= /*头 横向取模 32x32点阵 */{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xE0,0x00,0x03,0xC3,0xC0,0x00,0x00,0xF3,0x80,0x00,0x00,0x7B,0x80,0x00,0x00,0x7B,0x80,0x00,0x00,0x3B,0x80,0x00,0x0E,0x03,0x80,0x00,0x07,0x83,0x80,0x00,0x03,0xC3,0x80,0x00,0x01,0xE3,0x80,0x00,0x01,0xE3,0x80,0x00,0x00,0xC3,0x80,0x00,0x00,0x03,0x81,0xE0,0x7F,0xFF,0xFF,0xF0,0x00,0x07,0x80,0x30,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x0E,0xE0,0x00,0x00,0x1E,0x7C,0x00,0x00,0x3C,0x1F,0x00,0x00,0x78,0x0F,0xC0,0x00,0xF0,0x03,0xC0,0x03,0xC0,0x01,0xE0,0x0F,0x00,0x00,0xE0,0x78,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char Hz2424_man[]= /*馒 横向取模 24x24点阵 */{0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x1E,0x1F,0xF8,0x1C,0x1C,0x38,0x1C,0x1F,0xF8,0x19,0xFC,0x38,0x3F,0xFF,0xF8,0x31,0x98,0x30,0x7B,0xE0,0x0E,0x6F,0x7F,0xFE,0x6E,0x76,0xEE,0xCC,0x76,0xEE,0x0C,0x7F,0xFE,0x0C,0x70,0x0C,0x0C,0x00,0x38,0x0C,0x3F,0xF8,0x0D,0xCE,0x70,0x0F,0x87,0xE0,0x0F,0x03,0x80,0x1E,0x07,0xE0,0x0C,0x1C,0x7E,0x01,0xF0,0x1F,0x00,0x00,0x00,};code unsigned char Hz2424_tou[]= /*头 横向取模 24x24点阵 */{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x06,0x0F,0x00,0x07,0x8E,0x00,0x01,0xEE,0x00,0x00,0xEE,0x00,0x00,0xEC,0x00,0x1C,0x0C,0x00,0x0F,0x0C,0x00,0x07,0x9C,0x00,0x03,0x9C,0x00,0x00,0x1C,0x0C,0x00,0x1C,0x1E,0x7F,0xFF,0xF6,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x3F,0x80,0x00,0x71,0xE0,0x00,0xE0,0xF8,0x01,0xC0,0x3C,0x07,0x00,0x1C,0x3C,0x00,0x0C,0x70,0x00,0x00,};code unsigned char Hz1616_man[]= /*馒 横向取模 16X16点阵 */{0x21,0xF8,0x21,0x08,0x21,0xF8,0x3D,0x08,0x45,0xF8,0x48,0x00,0x83,0xFC,0x22,0x94,0x23,0xFC,0x20,0x00,0x21,0xF8,0x20,0x90,0x28,0x60,0x30,0x90,0x23,0x0E,0x00,0x00,};code unsigned char Hz1616_tou[]= /*头 横向取模 16X16点阵 */{0x00,0x80,0x10,0x80,0x0C,0x80,0x04,0x80,0x10,0x80,0x0C,0x80,0x08,0x80,0x00,0x80,0xFF,0xFE,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x30,0x08,0x18,0x10,0x0C,0x20,0x08,};code unsigned char Zf816_V[]= /*V 横向取模 8x16点阵 */{0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10,0x00,0x00,};code unsigned char Zf816_5[]= /*5 横向取模 8x16点阵 */{0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,};void main(){LCDInit(); //初始化12864 内部包含液晶模块的复位display_clear(); // 清屏display_lattice(0,0,Hz3232_man,0,4,32); //显示32点阵的字display_lattice(2,0,Hz3232_tou,0,4,32); //显示32点阵的字display_lattice(4,0,Hz2424_man,0,3,24); //显示24点阵的字display_lattice(6,0,Hz2424_tou,0,3,24); //显示24点阵的字display_lattice(8,0,Hz1616_man,0,2,16); //显示16点阵的字display_lattice(9,0,Hz1616_tou,0,2,16); //显示16点阵的字display_lattice(11,0,Zf816_V,0,1,16); //显示8x16点阵的字符display_lattice(12,0,Zf816_5,0,1,16); //显示8x16点阵的字符while(1){;}}void display_clear(void) // 清屏{unsigned char x,y;WriteCommand(0x34); //关显示缓冲指令WriteCommand(0x34); //关显示缓冲指令 故意写2次,怕1次关不了 这个是因为我参考到某厂家的驱动程序也是这样写的y=0;while(y<32) //y轴的范围0至31{WriteCommand(y+0x80); //垂直地址WriteCommand(0x80); //水平地址for(x=0;x<32;x++) //256个横向点,有32个字节{LCDWriteData(0x00);}y++;}WriteCommand(0x36); //开显示缓冲指令}/* 注释二:本节的核心函数,读者尤其要搞懂x_amount和y_amount对应的显示关系。* 第1,2个参数x,y是坐标体系。x的范围是0至15,y的范围是0至31.* 第3个参数*ucArray是字模的数组。* 第4个参数ucFbFlag是反白显示标志。0代表正常显示,1代表反白显示。* 第5,6个参数x_amount,y_amount分别代表字模数组的横向有多少个字节,纵向有几横。*/void display_lattice(unsigned int x,unsigned int y,const unsigned char *ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount){unsigned int j=0;unsigned int i=0;unsigned char ucTWriteCommand(0x34); //关显示缓冲指令WriteCommand(0x34); //关显示缓冲指令 故意写2次,怕1次关不了 这个是因为我参考到某厂家的驱动程序也是这样写的for(j=0;j{WriteCommand(y+j+0x80); //垂直地址WriteCommand(x+0x80); //水平地址for(i=0;i{ucTemp=ucArray[j*x_amount+i];if(ucFbFlag==1) //反白显示{ucTemp=~ucT}LCDWriteData(ucTemp);// delay_short(30000); //把上一节这个延时函数去掉,加快刷屏速度}}WriteCommand(0x36); //开显示缓冲指令}void SendByteToLcd(unsigned char ucData) //发送一个字节数据到液晶模块{for ( i = 0; i < 8; i++ ){if ( (ucData << i) & 0x80 ){LCDSID_dr = 1;}else{LCDSID_dr = 0;}LCDCLK_dr = 0;LCDCLK_dr = 1;}}void SPIWrite(unsigned char ucWData, unsigned char ucWRS) //模拟SPI发送一个字节的命令或者数据给液晶模块的底层驱动{SendByteToLcd( 0xf8 + (ucWRS << 1) );SendByteToLcd( ucWData & 0xf0 );SendByteToLcd( (ucWData << 4) & 0xf0);}void WriteCommand(unsigned char ucCommand) //发送一个字节的命令给液晶模块{LCDCS_dr = 0;LCDCS_dr = 1;SPIWrite(ucCommand, 0);delay_short(90);}void LCDWriteData(unsigned char ucData) //发送一个字节的数据给液晶模块{LCDCS_dr = 0;LCDCS_dr = 1;SPIWrite(ucData, 1);}void LCDInit(void) //初始化 函数内部包括液晶模块的复位{LCDRST_dr = 1; //复位LCDRST_dr = 0;LCDRST_dr = 1;}void delay_short(unsigned int uiDelayShort) //延时函数{for(i=0;i{;}}总结陈词:我们现在讲的字体显示都是横向的,如果某个项目要把整个液晶屏顺时针旋转90度,要求像对联一样纵向显示一串字体的时候,该怎么办?我前两个月就遇到了这样的项目,当时我的做法就是把字体的字库数组通过算法旋转90度就达到了目的。这种算法程序是怎样编写的?欲知详情,请听下回分解-----把字体顺时针旋转90度显示的算法程序。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一点阵图像的基本概念_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
点阵图像的基本概念
阅读已结束,下载本文需要
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 十六进制运算法则 的文章

 

随机推荐