标题:
STM32单片机变量以十进制方式显示函数代码
[打印本页]
作者:
hujj
时间:
2019-2-25 15:05
标题:
STM32单片机变量以十进制方式显示函数代码
花了半天时间调试完成了一个变量显示函数,可以任意指定显示数字的位数(通常不超过10位),还可以设定是否显示前导‘0’,并可在任意位置插入小数点(当然这个小数点是人为确定的,不是数据中计算出来的,因为数据是无符号类型)。这个函数很容易移植到其他应用中的,只要修改一下相关显示的代码就行。
STM32单片机源程序:
/****************************************************************
* 显示变量函数display_value()
* 输入参数:开始显示(左上角)坐标:x,y,(uint16_t)
* 前景色,背景色,(White,Black,Red,Green,Blue,Yellow)
* 变量,(uint32_t)
* 显示长度(不含小数点),小数位数,(uint8_t)
* 前导0(0=显示,1=空格)
*****************************************************************/
void display_value(uint16_t x,uint16_t y,uint16_t fc,uint16_t bc,uint32_t v,uint8_t l,uint8_t b,uint8_t z)
{
unsigned char i,j,m;
unsigned short k,x0;
uint32_t u,n;
x0 = x;
u = v;
z = z > 0 ? 0: 16; //前导0:z=16;前空格:z=0
n = 1;
for(j = 1; j < l; j++) //计算倍数
n = n * 10;
LCD_CS_CLR; //选择LCD
for(m = l;m > 0;m --) //开始分拆变量
{
k = u / n; //当前位数字
u = u - (k * n); //剩余数字
if(k > 0) z = 16; //只要有一位数字>0,之后不能显示空格
if(m == 1) z = 16; //小数点之前的'0'显示
n = m < 2 ? 1: n / 10; //计算当前的倍数
if((m == b) & (m > 0)) //显示小数点
{
for(i = 0;i < 16;i ++){
for(j = 0;j < 8;j ++){
if(asc16[14 * 16 + i] & (0x80 >> j))//从asc16[]数组中取字符.数据
/* draw a point on the lcd */
lcd_draw_point(x + j,y + i,fc);
else{
if(fc != bc)
/* draw a point on the lcd */
lcd_draw_point(x + j,y + i,bc);
}
}
}
x += 8;
}
for(i = 0;i < 16;i ++){ //显示字符(k=字符序号)
for(j = 0;j < 8;j ++){
if(asc16[(k+z) * 16 + i] & (0x80 >> j))//从asc16[]数组中取字符数据
/* draw a point on the lcd */
lcd_draw_point(x + j,y + i,fc);
else{
if(fc != bc)
/* draw a point on the lcd */
lcd_draw_point(x + j,y + i,bc);
}
}
}
x += 8;
}
LCD_CS_SET;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1