无字库12864字库怎样任意设置字体大小

1097人阅读
力天电子lpc2148开发板中配的12864小屏是不带字库的,并且没有所谓的左右屏,上下屏之分,是一个整屏.(是北京集粹电子设备有限公司生产的,资料详见
&此资料介绍的芯片的相关东西
&此资料介绍的是驱动函数
&此资料介绍的是小小日历钟,这个里面的函数更全一点)
(再说点题外话,当初买板子的时候老板服务很周到,也很热心,问什么说什么!可是一旦板子买回来了,有些地方不懂的时候,想问问老板,就变得爱理不理了啊,美哦办法啊!谁让咱是菜鸟呢?没人说,咱就自己想办法解决吧!)
#include &NXP/iolpc2148.h&
//管脚宏定义
#define &SCLK 0x01&&24 &//595时钟端
#define &MISO 0x01&&5 & //数据输入端
#define &MOSI 0x01&&6 &
//数据输出端
#define &RCK &0x01&&7 & //SO12864时钟输入端
//LCD Define&
#define LCD_A 1&&30 &//命令数据选择端,高电平:数据 &低电平:命令
#define LCD_CLK 1&&4 //时钟端
#define LCD_DATA MOSI //数据端
#define B_LED & 1&&13 //背光
#define Sclk_L() IO0CLR |=LCD_CLK //时钟高电平
#define Sclk_H() IO0SET |=LCD_CLK //时钟低电平
#define Res_L() &HC595_DATA &=~(1&&2);Write595() //复位低电平
#define Res_H() &HC595_DATA |=(1&&2); Write595() //复位高电平
#define Data_L() IO0CLR |=LCD_DATA //数据低电平
#define Data_H() IO0SET |=LCD_DATA //数据高电平
#define CS_L() HC595_DATA &=~1; Write595() //片选低电平
#define CS_H() HC595_DATA |=1; &Write595() //片选高电平
#define Write_C() IO0CLR |=LCD_A //选择写命令
#define Write_D() IO0SET |=LCD_A //选择写数据
#define Writecommand
//#define pgm_read_byte
//#define LcdCls
//函数声明
void Delayn(unsigned long n);
void Write595();
void HC595_Init(void);
void Lcd_Init(void);
void display_HZ(unsigned char x,unsigned char y,unsigned char *p);
void LcdCls(unsigned char data);
void Setxy(unsigned char x,unsigned char y);
//全局变量
unsigned int HC595_DATA=0xFFFFFFFF;
unsigned char ZHONG[]={
& //取的字模
0x90,0x8C,0x84,0x84,0x84,0x84,0x85,0xF6,0x84,0x84,0x84,0x84,0x84,0xD4,0x8C,0x00,
0x00,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x04,0x08,0x18,0x08,0x00, & & //&宋&
int main(void)
& HC595_Init(); //初始化74HC595
& IO0DIR |=LCD_A|B_LED|LCD_CLK; //初始化IO口
& Lcd_Init(); //初始化液晶屏
& LcdCls(0x00);//清屏
& Delayn(); //此处是自己加的,清屏的时候可能会出现正在清上一次的图案时,字就显示出来了
& display_HZ(6,2,ZHONG); //在第2页,第6列开始显示一个&宋&
& while(1); //stop
//初始化595接口
void HC595_Init(void)
& IO0DIR |= MOSI|RCK;
& IO1DIR |= SCLK;
& IO1CLR |= SCLK;
& IO0DIR |= RCK;
& HC595_DATA =0xFFFFFFFF;Write595();
void WriteByte(unsigned char data)
& //IO0CLR;
& for(i=0;i&8;i++)
& & if(data&0x01) IO0SET=MOSI;
& & else IO0CLR =MOSI;
& & IO1SET=SCLK;
& & data&&=1;
& & IO1CLR=SCLK;
& & //IO0SET=RCK;
&//刷新595的数据
void Write595()
& IO0CLR=RCK;
& WriteByte(HC595_DATA&0xff);
& WriteByte((HC595_DATA&0xff00)&&8);
& WriteByte((HC595_DATA&0xff0000)&&16);
& WriteByte((HC595_DATA&0xff000000)&&24);
& IO0SET=RCK;
//延时周期数
void Delayn(unsigned long n)
while(n--);
//向SPI总线上写一个字节的数据
void LCDWriteByte(unsigned char data)
& unsigned char i,s;
& for(i=0;i&8;i++)
& { //Delayn(1000000); //自己加的
& & if(s&0x80) Data_H();
& & else &Data_L();
& & Sclk_H();
& & s&&=1;
& & Sclk_L();&
//向液晶屏写数据
void WriteData(unsigned char Data)
& Write_D();
& LCDWriteByte(Data);
//向液晶屏写命令
void WriteCommand(unsigned char Command)
& Write_C();
& LCDWriteByte(Command);
//打开液晶背光 &0:关闭 1:打开
void Lcd_BackLed(unsigned char on)
& if(on==1)
& & IO0CLR=B_LED; //打开背光
& else if(on==0)
& & IO0SET=B_LED; //关闭背光
//液晶复位
void Lcd_Reset(void)
& Res_L();
& Delayn();
& Res_H();
//列顺序翻转,左右翻转 0:正常 1:翻转
void Lcd_ColRev(unsigned char i)
& WriteCommand(0xa0|(i&0x01));
void LcdCls(unsigned char data)
& unsigned char i,j;
& for(i=0;i&9;i++) & & & & &//依次刷8页
& & Setxy(0,i); & & & & & & & &//每次从0列开始
& & for(j=0;j&128;j++) &//每页写128列
& & & WriteData(data); //128次每次列地址自动递增
//液晶初始化
void Lcd_Init(void)
& Lcd_Reset(); & &//液晶复位
& //Lcd_BackLed(0);
& Lcd_BackLed(1); //打开液晶背光
& WriteCommand(0xaf); //打开显示
& WriteCommand(0x40); //指定显示RAM的行地址,起始行为:0然后63,62,....2,1依次减小
& WriteCommand(0xa1); //ADC正常???
& WriteCommand(0xa6); //没有反白,正常显示
& WriteCommand(0xa4); //全屏显示
& WriteCommand(0xa2); //设置LCD的偏压比
& WriteCommand(0xc0); //正常:意思是下端为0,往上依次为63,62....
& WriteCommand(0x2f); //电源设置
& WriteCommand(0x24); //粗调对比度
& WriteCommand(0x81); //
& WriteCommand(0x24); //跟上一行在一起相当于细调对比度
& Lcd_ColRev(1); & & //左右翻转
//选择列x,页y
void Setxy(unsigned char x,unsigned char y)
& unsigned char tmp=0;
& y=y&0x0F; & &//把页号变换为0XB0……0XB7的页定位码
& y=y|0xb0;
& tmp&&=4; & & //变换出列号的定位码高低4位
& tmp|=0x10;
& x&=0x0F;
& WriteCommand(y); &//写页定位码
& WriteCommand(tmp);//写列定位码(高)
& WriteCommand(x); &//写列定位码(低)
//显示汉字 x是列,y是页,p指向字模数组
void display_HZ(unsigned char x,unsigned char y,unsigned char *p) &//p是汉字的首地址
& & WriteCommand(0xa4);
& & Setxy(x,y); & & &//起始列,页
& & for(i=0;i&16;i++)
& & & WriteData(*p++);//显示上半个汉字 &&
& & } & & & & & & & & & & & & &&
& & y+=1;
& & Setxy(x,y); & & //到下页起点
& & for(i=16;i&32;i++)
& & & WriteData(*p++); //显示下半个汉字
图片如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:288208次
积分:4401
积分:4401
排名:第3234名
原创:149篇
转载:46篇
评论:80条
(3)(5)(1)(1)(3)(4)(1)(4)(1)(1)(5)(5)(5)(1)(2)(6)(10)(7)(13)(2)(7)(8)(7)(18)(23)(22)(17)(1)(3)(10)求助大神给讲解一下关于无字库12864的使用方法_百度知道
求助大神给讲解一下关于无字库12864的使用方法
各位大神,最近想使用12864无字库画图,可是连基本的使用都不会,哪位大神有这方面的资料,请给我传一份吧!谢谢了!!!!!!!!!!!!!!!!!!E-mail:
提问者采纳
没字库的应该是要自己写进去的吧,不像1602的,1602里面就集成了一些BCD
其他类似问题
为您推荐:
字库的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁注册时间: 20:25
论坛积分:19
来自: 北京
原子哥,带字库的12864怎么显示任意的8*16半宽字符。12864自带的半宽字符不好看,自己想显示自己设定的半宽字符。这个怎么弄呢!原子哥给个例程,或给个思路
在吃苦的年纪,何必那么安逸?
注册时间: 12:05
回复数: 864
主题数: 23
论坛积分:1033
ST7920 的字型产生 RAM 提供用户自定义字符生成(造字)功能,可提供 4
组 16×16 点阵的空间,用户可以将 CGROM 中没有的字符定义到 CGRAM 中。
8*16也可以的
/*--------------------------------CGRAM start----------------------------------------------*/
void LCD12864_clearCGRAM(u8 CGRAM_groupNum)//将用户自定义编码区CGRAM清0
{ //参数一是CGRAM的4组用户空间组号码(0~3) ,参数二是用户自定义图表或汉字的编码
u8 i,addr=0;
bShowPicFlag?LCD12864_writeCmd(0x36):LCD12864_writeCmd(0x34);//扩展指令,绘图开关保持
LCD12864_writeCmd(0x02);
//SR等于0,允许设置卷动地址
LCD12864_writeCmd(0x30);
//恢复为8位并行,基本指令集
addr=(CGRAM_groupNum&&4)|0x40; //将CGRAM空间号转换为相应存储地址
LCD12864_writeCmd(addr);
//定位到该位址(用户空间位址范围0x40-0x7F共128字节)
for(i=0;i&16;i++)
//将用户自定义编码写入该16*16位元组空间
LCD12864_writeByte(0);
//连续写2个字节共16位
LCD12864_writeByte(0);
void LCD12864_writeCGRAM(u8 CGRAM_groupNum, u8* pUserCode)//将用户自定义编码写入CGRAM
{ //参数一是CGRAM的4组用户空间组号码(0~3) ,参数二是用户自定义图表或汉字的编码
u8 i,addr=0;
if(bShowPicFlag)
LCD12864_writeCmd(0x36); //开启绘图显示,可流畅播放动画
LCD12864_writeCmd(0x34); //默认关闭绘图显示
LCD12864_writeCmd(0x02);
//SR等于0,允许设置卷动地址
LCD12864_writeCmd(0x30);
//恢复为8位并行,基本指令集
addr=(CGRAM_groupNum&&4)|0x40; //将CGRAM空间号转换为相应存储地址
LCD12864_writeCmd(addr);
//定位到该位址(用户空间位址范围0x40-0x7F共128字节)
for(i=0;i&16;i++)
//将用户自定义编码写入该16*16位元组空间
LCD12864_writeByte(pUserCode[i*2]);
//连续写2个字节共16位
LCD12864_writeByte(pUserCode[i*2+1]);
void LCD12864_showCGRAM(u8 row,u8 cols,u8 CGRAM_groupNum)//定位液晶光标,并显示自定义内容
{ //row(0-3), cols(0-15)
//第三个参数是用户空间号码(0~3共4组空间号码),该号码乘2就是它所对应的[调用用户空间编码]
LCD12864_setPos(row,cols);
LCD12864_writeByte(0x00);//4组用户空间的编码的高字节都固定为0,我猜这是为和E文ASCII码区分开
LCD12864_writeByte(CGRAM_groupNum*2); //对应编码00h,02h,04h,06h
/*--------------------------------CGRAM end----------------------------------------------*/
另一个方法是用打点法绘图绘出来
注册时间: 10:09
论坛积分:13
来自: 北京
用大点法绘图,之前玩的时候也是用打点绘图画出自己想要的东西
注册时间: 00:01
回复数: 178
主题数: 47
论坛积分:419
一种做法是,对于ram比较充足的mcu,可以开辟一个ram区域,作为显存ram,存储画面的ascii或中文字符,注意是编码不是字模。(其实只需要8*4*2=64个byte)
当每次要向半宽位置写字符时,写读取该位置的全款字符编码,修改需要修改的那半宽位置的ascii,再写入整个全款字符(2个ascii字符)。这是我认为比较可行的办法,如果从12864读取显存数据太麻烦了。这种办法和原子的oled例程异曲同工。
哦,看错问题了,我以为是要在半宽坐标写8*16字符。楼主的问题很简单啊,直接开启绘图功能就行了。
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4/F7专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee等通信技术
开发工具专栏
UOL 单片机面向对象语言
四轴飞行器
MICO智能硬件
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |当前位置:
文件名称:12864NC
所属分类:
资源属性:
Linux,gcc,C/C++,源码
上传时间:
文件大小:
浏览/下载:
293次 / 0次
提 供 者:
相关连接:
下载说明:
别用迅雷下载,失败请重下,重下不扣分!
LCD12864 C51 无字库点阵液晶 显示驱动程序 51单片机 STC12C5AS2 -LCD12864 C51 character dot matrix LCD driver 51 microcontroller STC12C5AS2
(系统自动生成,下载前可以参看下载内容)下载文件列表
12864NC\12864.DSN
.......\12864.PWI
.......\c\12864
.......\.\12864.c
.......\.\12864.hex
.......\.\12864.lnp
.......\.\12864.LST
.......\.\12864.M51
.......\.\12864.OBJ
.......\.\12864.plg
.......\.\12864.uvgui.weiwen
.......\.\12864.uvgui_weiwen.bak
.......\.\12864.uvopt
.......\.\12864.uvproj
.......\.\12864driver.c
.......\.\12864driver.h
.......\.\12864driver.LST
.......\.\12864driver.OBJ
.......\.\12864_uvopt.bak
.......\.\12864_uvproj.bak
.......\.\Char.h
.......\.\picture.h
.......\Last Loaded 12864.DBK
.......\pic4.bmp
.......\pic4.jpg
暂无评论内容.
*快速评论:
和说明不符
不是源码或资料
纯粹是垃圾
*内  容:
*验 证 码:
搜珍网是交换下载平台,下载的内容请自行研究使用或咨询上传人.
资源属性分别代表:系统平台,开发平台,开发语言,文件格式四部分.
本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用进行解压.
如果您发现此软件无法下载,请稍后再次尝试;或者.
本站提供下载的内容为网上收集或会员上传提供,若无意中侵犯了您的版权,.
如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
如下载后发现下载的内容跟说明不相乎,可以联系本站的客服,经确认可以退回消费了的积分.
联系我们网站
·电话:(0)
All Rights Reserved.带字库12864的液晶怎样显示字模软件提取的汉字?
带字库12864的液晶怎样显示字模软件提取的汉字?
显示大小是16x16,关键是提取字模后是如何放到CGRAM中,并在显示屏上显示的?请详细解释扫描时的行列地址(这里的行列只是指要显示的字,的那一小块的行列,而不是整个液晶屏的4行7列。当然我也不知道我这样理解成每个字都会像8X8点阵那样进行行列扫描是否正确)的设置。最好能提供程序,小弟我是初学者,还麻烦各位的程序尽量多做注释
带字库的LCD模块不需要取字模只需要向LCD模块写入需要显示的汉字的GB2312代码就可以了,显示位置可用模块手册中的定位指令代码设置 切换到点阵图形模式,并设置好书写规律,在字模相应位置写入对应字模数据就可以了比如16*16点阵,定义第一组两个8字节数据的起始位置,连续列入两字节,然后定位下一行起始地址,再写,重复上述过程直到写完一个字的全部16行原理都是一样的,具体命令与实现方法或有不同,详情参见LCD产品手册
相关知识等待您来回答
硬件领域专家
& &SOGOU - 京ICP证050897号

我要回帖

更多关于 12864不带字库 的文章

 

随机推荐