关于12864字模软件取模问题
展开全部 你好:注意你发的图中的一句话“汉字库:宋体16.dot,横向取模左高位...”,这个就是汉字点阵的参数,你要根据LCD的显示原理来正确取模,数据才正确,比如,LCD显示一个汉字是从右到左显示点阵数据,而你取从左到右的数据就会相反显示汉字。
希望我的回答能帮助到你。
...
带字库12864的液晶怎样显示字模软件提取的汉字?
楼上两位大哥,怎么回答是一样的呢,最近我也在做这个东东,是乒乓球的,我先给你个大概的资料。
也是网上搜索到的,这个你懂了基本上都会了,不懂可以qq问我,501216715.带中文字库的液晶12864的C程序(MD12864C-1)!并口连接液晶!#include#include void lcd_init(void);void clr_lcd(void);void send_com(unsigned char cmd);void send_data(unsigned char dat);void chek_busy(void);void set_xy(unsigned char xpos,unsigned char ypos); void print(unsigned char x,unsigned char y,char* str);void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);unsigned char code buf[4] ={0xbb,0xb6,0xd3,0xad};//欢迎#define DATA P2#define CONTROL P0#define E 7 //并行的使能信号 sbit E = P0^7 #define RW 6 //并行的读写信号 sbit RW = P0^6 #define RS 5 //并行的指令数据选择信号 sbit RS = P0^5 #define PSB 4 //并/串行接口选择 sbit PSB = P0^4#define RST 3 //复位 低电平有效 sbit RST = P0^3#define SETB(x,y) (x|=(1<<y))#define CLRB(x,y) (x&=(~(1<<y)))#define CHKB(x,y) (x&(1<<y))/********************测忙碌**********************///测忙碌子程序//RS=0,RW=1,E=H,D0-D7=状态字/************************************************/void chek_busy(void){ unsigned char temp1;//状态信息(判断是否忙) CLRB(CONTROL,RS); // RS = 0; SETB(CONTROL,RW); // RW = 1; SETB(CONTROL,E); // E = 1; do{temp1 = DATA;DATA=0xFF;} while(temp1&0x80); SETB(CONTROL,E); // E = 1; DATA=0xFF;}/********************写命令**********************///写命令子程序///************************************************/void send_com(unsigned char cmd)/*写命令*/{ chek_busy();CLRB(CONTROL,RS); //RS = 0;CLRB(CONTROL,RW); //RW = 0;DATA = cmd;SETB(CONTROL,E); //E = 1;CLRB(CONTROL,E); //E = 0;}/********************写数据**********************///写数据子程序///************************************************/void send_data(unsigned char dat){ chek_busy();SETB(CONTROL,RS); //RS = 1;CLRB(CONTROL,RW); //RW = 0;DATA = dat;SETB(CONTROL,E); //E = 1;CLRB(CONTROL,E); //E = 0;}/********************初始化**********************///复位、通讯方式选择/************************************************/void lcd_init(void){ SETB(CONTROL,RST);//复位RST=1 SETB(CONTROL,PSB); //通讯方式为并口PSB = 1 //send_com(0x34);//34H--扩充指令操作send_com(0x30);//功能设置,一次送8位数据,基本指令集send_com(0x0C);//0000,1100 整体显示,游标off,游标位置offsend_com(0x01);//0000,0001 清DDRAMsend_com(0x02);//0000,0010 DDRAM地址归位send_com(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC}/*******************************************************************/// 设置显示位置 xpos(1~16),tpos(1~4)/*******************************************************************/void set_xy(unsigned char xpos,unsigned char ypos){switch(ypos){ case 1: send_com(0X80|xpos);break; case 2: send_com(0X90|xpos);break; case 3: send_com(0X88|xpos);break; case 4: send_com(0X98|xpos);break; default:break;}}/*******************************************************************/// 在指定位置显示字符串/*******************************************************************/void print(unsigned char x,unsigned char y,char* str){ unsigned char lcd_temp; set_xy(x,y); lcd_temp=*str; while(lcd_temp != 0x00) { send_data(lcd_temp); lcd_temp=*(++str); } }/********************写字符串******************///写字符串子程序//xpos1取0~7共八列,ypos1取0~3共四行。
/**********************************************/ void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k){ unsigned char n; switch (ypos) { case 1: xpos |= 0x80;break; //第一行 case 2: xpos |= 0x90;break; //第二行 case 3: xpos |= 0x88;break; //第三行 case 4: xpos |= 0x98;break; //第四行 default: break; } send_com(xpos); //此处的Xpos已转换为LCM的显示寄存器实际地址 for(n=0;n < k;n++) { send_data(str[n]);//显示汉字时注意码值,连续两个码表示一个汉字 } }/********************清屏************************///清屏/************************************************/void clr_lcd(void){ send_com(0x01); //send_com(0x34); //send_com(0x30);}/**************主函数***********************/void main (){ lcd_init(); //设定液晶工作方式printstr(1,1,buf,4);print(5,1,"光临");print(0,3," SEEGU百度空间");while(1) { }}/////////////////////////////////////////////////////////而你的问题是,只要字体不符合要求,你就先用软件把字的代码生成出来,然后用for循环把每个代码搞进去就可以了。
液晶屏显示汉字都需要取模吗?
展开全部点阵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点阵)汉字。
管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/LD/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5R/WH/LR/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6EH/LR/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/LH:选择芯片(右半屏)信号16CS2H/LH:选择芯片(左半屏)信号17RETH/L复位信号,低电平复位18VOUT-10VLCD驱动负电压19LED+-LED背光板电源20LED--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.忙标志:BFBF标志提供内部工作情况。
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 START LINE预置。
因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。
此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
12864LCD的指令系统及时序该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。
其指令表如表2所示:指令名称控制信号控制代码R/WRSDB7DB6DB5DB4DB3DB2DB1DB0显示开关0000111111/0显示起始行设置0011XXXXXX页设置0010111XXX列地址设置0001XXXXXX读状态10BUSY0ON/OFFRST0000写数据01写数据读数据11读数据表2:12864LCD指令表各功能指令分别介绍如下。
显示开/关指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00000111111/0当DB0=1时,LCD显示RAM中的内容;DB0=0时,关闭显示。
2、显示起始行(ROW)设置指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00011显示起始行(0~63)该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。
文章转载于12864:http://www.hzjingxian.com3、页(PAGE)设置指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00010111页号(0~7)显示RAM共64行,分8页,每页8行。
4、列地址(Y A...
在LCD12864显示汉字字体,大小能设置吗
带字库的LCD模块不需要取字模展开全部只需要向LCD模块写入需要显示的汉字的GB2312代码就可以了,显示位置可用模块手册中的定位指令代码设置 切换到点阵图形模式,并设置好书写规律,在字模相应位置写入对应字模数据就可以了比如16*16点阵,定义第一组两个8字节数据的起始位置,连续列入两字节,然后定位下一行起始地址,再写,重复上述过程直到写完一个字的全部16行原理都是一样的,具体命令与实现方法或有不同,详情参见LCD产品手册...
转载请注明出处51数据库 » 12864字模取模软件
二郎22861586