本帖最后由 rjx007 于 2018-2-10 13:04 编辑
想在LCD上显示尺寸较大的数字,但经试验,这个函数最大只能显示24*12的数字,现在想显示如48*24,64*32的数字,该怎么修改这个函数才能行?或能提供一个能显示大字符的函数也可。
//显示数字,高位为0,则不显示
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//color:颜 {MOD}
//num:数值(0~4294967295);
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/LCD_Pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
continue;
}else enshow=1;
}
LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我的意思是,修改LCD_ShowChar使他能够正确显示大尺寸的字符。
由于不知道你的代码是怎样的思路,所以,,
请自行努力。
给你一个写汉字过程自己分析
/***写汉字 同步显示0-32字节写过程程序测试***/
/***2018 1 28 21:15 L217 CODE 220340*********/
#include <stm32f10x_lib.h>
#include "sys.h"
#include "stdio.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "flash.h"
#include "lcd.h"
#include "text.h"
#include "fat.h"
#include "fontupd.h"
#include "mmc_sd.h"
const unsigned char Hz1[32]=
{
0x10,0x00,0x10,0x00,0x3D,0xFC,0x20,0x20,
0x40,0x20,0xBC,0x20,0x10,0x20,0x10,0x20,
0xFD,0xFC,0x10,0x20,0x10,0x28,0x10,0x24,
0x14,0x24,0x18,0x20,0x13,0xFE,0x00,0x00
};/*"钰"*/
const unsigned char Hz2[32]=
{
0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,
0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,
0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,
0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF
};/*"竖条"*/
const unsigned char Hz3[32]=
{
0X00,0X01,0X00,0X03,0X00,0X07,0X00,0X0F,
0X00,0X1F,0X00,0X3F,0X00,0X7F,0X00,0XFF,
0X01,0XFF,0X03,0XFF,0X07,0XFF,0X0F,0XFF,
0X1F,0XFF,0X3F,0XFF,0X7F,0XFF,0XFF,0XFF
};/*三角形*/
const u8 disdt[]={48,49,50,51,52,53,54,55,56,57};
/**************写汉字字节数显示*********/
void dispvavel(u8 vel)
{
u8 l,m,n;
l=vel/100;
m=(vel-l*100)/10;
n=vel-l*100-m*10;
POINT_COLOR=RED;//设置字体为红 {MOD}
LCD_ShowChar(10,32,disdt[l],16,0); //10横向 90纵向disdt[]
POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
LCD_ShowChar(18,32,disdt[m],16,0); //18横向 90纵向disdt[]
POINT_COLOR=BROWN;//设置字体为棕 {MOD}
LCD_ShowChar(26,32,disdt[n],16,0); //26横向 90纵向disdt[]
}
/**************写一个“沁”字***********Hz1************/
void LcdShowHz1(u16 x,u16 y)
{
u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数
u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数
for(t=0;t<16;t++) //共16个字节
{
x0=x; //汉字左边缘等于实参
for(k=0;k<2;k++) //两行等于两字节,左右结构
{
dispvavel(s); //临时函数,写汉字字节显示
temp=Hz1[s]; //取字符表代码
for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1
{
if(temp&0x80)
{
LCD_DrawPoint(x0,y); //如为1在XY地址写显示
}
temp<<=1; //左移一位
x0++; //水平位置加1共0--15计16个点
}
s++; // 写完1字节八个点 字符表位置加1
delay_ms(600);
}
y++; //两个字节换一行
}
}
/**************画一个竖条 左部00H 右部FFH***Hz2*************/
void LcdShowHz2(u16 x,u16 y)
{
u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数
u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数
for(t=0;t<16;t++) //共16个字节
{
x0=x; //汉字左边缘等于实参
for(k=0;k<2;k++) //两行等于两字节,左右结构
{
dispvavel(s); //临时函数,写汉字字节显示
temp=Hz2[s]; //取字符表代码
for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1
{
if(temp&0x80)
{
LCD_DrawPoint(x0,y); //如为1在XY地址写显示
}
temp<<=1; //左移一位
x0++; //水平位置加1共0--15计16个点
}
s++; // 写完1字节八个点 字符表位置加1
delay_ms(600);
}
y++; //两个字节换一行
}
}
/***************画一个三角形****Hz3******************/
void LcdShowHz3(u16 x,u16 y)
{
u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数
u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数
for(t=0;t<16;t++) //共16个字节
{
x0=x; //汉字左边缘等于实参
for(k=0;k<2;k++) //两行等于两字节,左右结构
{
dispvavel(s); //临时函数,写汉字字节显示
temp=Hz3[s]; //取字符表代码
for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1
{
if(temp&0x80)
{
LCD_DrawPoint(x0,y); //如为1在XY地址写显示
}
temp<<=1; //左移一位
x0++; //水平位置加1共0--15计16个点
}
s++; // 写完1字节八个点 字符表位置加1
delay_ms(600);
}
y++; //两个字节换一行
}
}
/*************************************/
int main(void)
{
u8 i;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
SPI_Flash_Init(); //SPI FLASH初始化
if(Font_Init()) //字库不存在,则更新字库
{
POINT_COLOR=RED;
LCD_Clear(WHITE);
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"Font Updating...");
//字体更新
SD_Initialize(); //初始化SD卡
while(FAT_Init()) //FAT 错误
{
LCD_ShowString(60,90,"FAT SYS ERROR");
i=SD_Initialize();
if(i)//SD卡初始化
{
LCD_ShowString(60,110,"SD_CARD ERROR");
}
delay_ms(500);
LCD_Fill(60,90,240,126,WHITE);//清除显示
delay_ms(500);
LED0=!LED0;
}
LCD_Fill(60,90,240,126,WHITE);//清除显示
while(Update_Font()!=0)//字体更新出错
{
LCD_ShowString(60,90,"SYSTEM FILE LOST");
delay_ms(500);
LCD_ShowString(60,90,"Please Check....");
delay_ms(500);
LED0=!LED0;
};
LCD_Clear(WHITE);
}
while(1)
{
POINT_COLOR=BLUE;
Show_Str(60,50,"2016 10 5",16,0);
Show_Str(10,70,"蔡沁钰 常州市北实验中学",16,0);
Show_Str(60,90,"八(8)班",16,0);
delay_ms(5000);
delay_ms(5000);
LCD_Clear(WHITE); //清除显示
delay_ms(5000);
POINT_COLOR=RED;
Show_Str(60,32,"1",16,0); //1
LcdShowHz1(00,00); //画横线 已实现
for(i=0;i<20;i++)
{
delay_ms(200);
LED0=!LED0;
LED1=!LED1;
}
LCD_Clear(WHITE); //清除显示
for(i=0;i<50;i++) //已实现
{
delay_ms(20);
LED1=!LED1;
}
Show_Str(60,32,"2",16,0); //2
LcdShowHz2(00,00); //画横线 已实现
for(i=0;i<20;i++)
{
delay_ms(200);
LED0=!LED0;
LED1=!LED1;
}
LCD_Clear(WHITE); //清除显示
Show_Str(60,32,"3",16,0); //3
LcdShowHz3(00,00); //画横线 已实现
for(i=0;i<20;i++)
{
delay_ms(200);
LED0=!LED0;
LED1=!LED1;
}
}
}
你有毒吧。。。
你倒是显示个大的呀,你这不也是小的吗。才16x16的。。。然后你那个钰呀沁呀的是女朋友名字吧hhhhh
自己动一点点脑子很难么?
一周热门 更多>