这样的字模编码怎么编的?为什么我用自摸软件编出来的不一样?
不同的取模软件有不同的默认设置,这就有很多方面的不一样了,比如字模的点阵可以是8*8的,也可以是16*16的,取模的方式了有不同,可以有横有竖,有逆序、顺序的,还有可能有阴阳极取的,并且不同的字体取出来编码也不同,这就要看实际的要求以及不同的LCD的要求是如何的了,但是一般情况下这些都没多大影响的,若符合都能正确显示出你想要的字的!!
点阵lcd屏 一个汉字用多少点阵
楼上两位大哥,怎么回答是一样的呢,最近我也在做这个东东,是乒乓球的,我先给你个大概的资料。
也是网上搜索到的,这个你懂了基本上都会了,不懂可以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循环把每个代码搞进去就可以了。
51单片机驱动160160点阵显示屏字太大的问题
字模从哪里来?生成顺序如何?保存在什麽地方?字模由取字模软件生成的,生成时可设置阴码 阳码,扫描顺序,高位在前在后等选择项,显示程序与此密切相关,生成后可直接以数组的形式写在程序中,也可以保存在SD卡或FLASH中如果只显示少数几个汉字,则可以把字模以表格等形式写在代码中,如果有显示时要调用大量汉字则要生成字库保存於SD卡或EEPROM中16*16字模占32字节,1 行是2 个字节写入原理很简单,就是按照取模时的顺序,一个点一个点逐次写入以下程序供参考,假设字模存在於表格hanzi[ ][ ]中,一个汉字占32 个字节逐行扫描 低位在前输入参数:X,Y是坐标位置 n是汉字编号(一个二维表格里可以存多个汉字假设存20个字表格就是hanzi[20 ][ 32] ) color是字符颜色 void LCD_Disphanzi(uint16_t x, uint16_t y,uint16_t n,uint16_t color){uint16_t page, column,temp1,temp2;LCD_OpenWindow(x, y,16, 16); //16 *16 LCD_ILI9341_CMD(0X2C); //这是ILI9341的一个命令for( page=0; page < 32; page+=2 ) //16行写16次{temp1 = hanzi[n][page];//一行的左半部8个点 占一字节temp2 = hanzi[n][page+1];//一行的右半部8个点 占另一字节for( column=0; column < 8; column++ )//写左半行 8 个点, 循环8 次{if( temp1 & 0x01 ) //取最低位 是1时写入字形的颜色{LCD_WR_Data( color );}else //是0时写入背景的颜色BACKGROUND{LCD_WR_Data( BACKGROUND ); }temp1>>= 1; //把高位往低位推进}for( column=0; column < 8; column++ )//写右半行 8 个点, 循环8 次{if( temp2 & 0x01 ){LCD_WR_Data( color );}else{LCD_WR_Data( BACKGROUND ); }temp2>>= 1; }}}
转载请注明出处51数据库 » lcd取模软件 16*16
鹏程缘