专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
LCD显示的字体大小如何调整
2019-07-21 05:15
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
19539
41
1194
1、 LCD的程序都看了 最后主程序显示感觉16的字体有点小,不知道在哪地方可以进行调整,或者哪个子程序是关于调节大小的,我照了好久没找到哪部分写道字体大小的,16的就是最大了吗求指教
2、另外还有一个请教 是不是显示的字符 都是根据font.h内有的才能显示,因为我发现输入汉字显示不了,想求教是不是这个原因
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
beisiqiu
1楼-- · 2019-07-23 03:05
回复【13楼】正点原子:
---------------------------------
下面是想做18*18字体的改动,18*18只显示!.调试没成功,想拜托师兄指教,下面的哪改错了,如何修改呢 红 {MOD}为修改部分,请师兄帮忙,不胜感激
const unsigned char asc2_1808[2][36]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" " 0*/
{0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!"1*/
};
ILI93xx.c文件改动
void LCD_ShowString(u16 x,u16 y,const u8 *p,u8 size )
{
while(*p!=' ')
{
if(x>MAX_CHAR_POSX){x=0;y+=16;}
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
if(size==16) LCD_ShowChar(x,y,*p,16,1);
if(size==12) LCD_ShowChar(x,y,*p,12,1);
if(size==18) LCD_ShowChar(x,y,*p,18,1);
x+=8;
p++;
}
}
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
#if USE_HORIZONTAL==1
#define MAX_CHAR_POSX 312
#define MAX_CHAR_POSY 232
#else
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 312
#endif
u8 temp,a=0;
u8 pos,t;
u16 x0=x;
u16 colortemp=POINT_COLOR;
if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
//设置窗口
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
for(pos=0;pos<size;pos++)
{
if(size==12||size==16)
{
if(size==12)temp=asc2_1206[num][pos]; //调用1206字体
if(size==16)temp=asc2_1608[num][pos]; //调用1608字体
for(t=0;t<size/2;t++)
{
if(temp&0x01)POINT_COLOR=colortemp;
else 
OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
}
if(size==18)
{
temp=asc2_1808[num][a];
for(t=0;t<8;t++)
{
if(temp&0x01)POINT_COLOR=colortemp;
else 
OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
a++;
temp=asc2_1808[num][a];
for(t=0;t<8;t++)
{
temp=asc2_1808[num][a];
if(temp&0x01)POINT_COLOR=colortemp;
else 
OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
a++;
}
x=x0;
y++;
}
}
}
主函数改动
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
LCD_Init();
 
OINT_COLOR=YELLOW;
LCD_Clear(BLACK);
LCD_ShowString(30,110,"11haha#3034",16);
LCD_ShowString(30,50,"!",18);
LCD_ShowString(30,70,"11haha#3034",12);
LED0=!LED0;
delay_ms(1000);
}
以上的12和16都现显示正常,但是18不行,想拜托师兄,如果有时间帮忙指正一下。 万分感激。
加载中...
正点原子
2楼-- · 2019-07-23 04:35
精彩回答 2 元偷偷看……
加载中...
正点原子
3楼-- · 2019-07-23 08:09
//在指定位置 显示1个24*24的汉字
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜 {MOD}
void Test_Show_CH_Font24(u16 x,u16 y,u8 index,u16 color)
{
u8 temp,t,t1;
u16 y0=y;
for(t=0;t<72;t++)//每个24*24的汉字点阵 有72个字节
{
if(t<24)temp=tfont24[index*3][t]; //前24个字节
else if(t<48)temp=tfont24[index*3+1][t-24]; //中24个字节
else temp=tfont24[index*3+2][t-48]; //后24个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Draw_Point(x,y,color);//画实心点
else LCD_Draw_Point(x,y,BACK_COLOR); //画空白点(使用背景 {MOD})
temp<<=1;
y++;
if((y-y0)==24)
{
y=y0;
x++;
break;
}
}
}
}
加载中...
beisiqiu
4楼-- · 2019-07-23 11:43
回复【16楼】正点原子:
---------------------------------
嗯 谢谢师兄 师兄有个小请求 我在修改18*18字体时 LCD显示都是同种状态 我想您是否可以帮我看一下我写得代码 看看我哪里逻辑错误了 因为只有我自己学 没人可以请教 希望您能帮我
加载中...
正点原子
5楼-- · 2019-07-23 12:52
没时间看代码,自己仿真调试吧.
加载中...
beisiqiu
6楼-- · 2019-07-23 17:29
嘿嘿 好用了 重新下载了一下 这个代码是对的 不知道那天是咋搞的 谢谢原子师兄
加载中...
上一页
1
2
3
4
5
6
7
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
---------------------------------
下面是想做18*18字体的改动,18*18只显示!.调试没成功,想拜托师兄指教,下面的哪改错了,如何修改呢 红 {MOD}为修改部分,请师兄帮忙,不胜感激
const unsigned char asc2_1808[2][36]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" " 0*/
{0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!"1*/
};
ILI93xx.c文件改动
void LCD_ShowString(u16 x,u16 y,const u8 *p,u8 size )
{
while(*p!=' ')
{
if(x>MAX_CHAR_POSX){x=0;y+=16;}
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
if(size==16) LCD_ShowChar(x,y,*p,16,1);
if(size==12) LCD_ShowChar(x,y,*p,12,1);
if(size==18) LCD_ShowChar(x,y,*p,18,1);
x+=8;
p++;
}
}
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
#if USE_HORIZONTAL==1
#define MAX_CHAR_POSX 312
#define MAX_CHAR_POSY 232
#else
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 312
#endif
u8 temp,a=0;
u8 pos,t;
u16 x0=x;
u16 colortemp=POINT_COLOR;
if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
//设置窗口
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
for(pos=0;pos<size;pos++)
{
if(size==12||size==16)
{
if(size==12)temp=asc2_1206[num][pos]; //调用1206字体
if(size==16)temp=asc2_1608[num][pos]; //调用1608字体
for(t=0;t<size/2;t++)
{
if(temp&0x01)POINT_COLOR=colortemp;
else OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
}
if(size==18)
{
temp=asc2_1808[num][a];
for(t=0;t<8;t++)
{
if(temp&0x01)POINT_COLOR=colortemp;
else OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
a++;
temp=asc2_1808[num][a];
for(t=0;t<8;t++)
{
temp=asc2_1808[num][a];
if(temp&0x01)POINT_COLOR=colortemp;
else OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
}
a++;
}
x=x0;
y++;
}
}
}
主函数改动
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
LCD_Init();
 OINT_COLOR=YELLOW;
LCD_Clear(BLACK);
LCD_ShowString(30,110,"11haha#3034",16);
LCD_ShowString(30,50,"!",18);
LCD_ShowString(30,70,"11haha#3034",12);
LED0=!LED0;
delay_ms(1000);
}
以上的12和16都现显示正常,但是18不行,想拜托师兄,如果有时间帮忙指正一下。 万分感激。
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜 {MOD}
void Test_Show_CH_Font24(u16 x,u16 y,u8 index,u16 color)
{
u8 temp,t,t1;
u16 y0=y;
for(t=0;t<72;t++)//每个24*24的汉字点阵 有72个字节
{
if(t<24)temp=tfont24[index*3][t]; //前24个字节
else if(t<48)temp=tfont24[index*3+1][t-24]; //中24个字节
else temp=tfont24[index*3+2][t-48]; //后24个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Draw_Point(x,y,color);//画实心点
else LCD_Draw_Point(x,y,BACK_COLOR); //画空白点(使用背景 {MOD})
temp<<=1;
y++;
if((y-y0)==24)
{
y=y0;
x++;
break;
}
}
}
}
---------------------------------
嗯 谢谢师兄 师兄有个小请求 我在修改18*18字体时 LCD显示都是同种状态 我想您是否可以帮我看一下我写得代码 看看我哪里逻辑错误了 因为只有我自己学 没人可以请教 希望您能帮我
一周热门 更多>