OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10055|回复: 20

支持任意数码管字体的库,非常小巧

[复制链接]

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
发表于 2019-4-4 13:42:11 | 显示全部楼层 |阅读模式
本帖最后由 xcc521 于 2021-1-11 14:45 编辑

如下图,可以在任何界面显示任意大小的数码管字体,支持有效及无效部分的空心及实心绘制,可以自定义数码管体宽度及尺寸坐标
下图均来源于开发板截图
PIC08.png
PIC10.png

PIC11.png

PIC12.png

PIC13.png

PIC17.png

PIC18.png



PIC20.png

PIC21.png

PIC22.png

PIC23.png

PIC_BIG00.png

PIC_BIG01.png

PIC_BIG02.png

PIC_BIG03.png

PIC_BIG04.png

PIC_BIG05.png

PIC_BIG06.png

PIC_BIG07.png

PIC_BIG08.png

PIC_BIG09.png

PIC_BIG10.png

PIC_BIG11.png

PIC_BIG12.png

PIC_BIG13.png

PIC_BIG14.png

PIC_BIG15.png

使用非常简单,现已集成到开发板

首先自己实现画线函数

void Draw_Line(unsigned short xs,unsigned short ys,unsigned char xe,unsigned short ye,unsigned short color)
{
        POINT_COLOR = color;
        LCD_DrawLine(xs,ys,xe,ye);
}


#ifndef __DIGITAL_LED_H
#define __DIGITAL_LED_H

typedef struct
{
  unsigned char (*IF_DrawLine)(unsigned short xs,unsigned short ys,unsigned short xe,unsigned short ye);                //IO初始化函数
        void (*Digital_Draw_Line)(unsigned short xs,unsigned short ys,unsigned short xe,unsigned short ye,unsigned short color);
}_Draw_Str;

extern  unsigned short DIGITAL_COLOR_FRONT;
extern  unsigned short DIGITAL_COLOR_FRONT_EMP;
extern unsigned short DIGITAL_COLOR_BACK;
extern _Draw_Str draw_str;
extern unsigned short DIGITAL_POINT_COLOR;

void Draw_Digital_num(unsigned short x,unsigned short y,unsigned char lw,unsigned short w,unsigned short h,unsigned char num,unsigned char fill);
/**
        *起始坐标XY,数码管段线宽,显示大小宽高,显示的数字
  *mode :bit7 是否填充主显示段,bit6 是否填充副显示段,bit5 是否显示副显示段 bit4 增强使能,即强制划断数码管段之间的联系
        */
void Digital_Draw_num(unsigned short x,unsigned short y,unsigned char lw,unsigned short w,unsigned short h,unsigned char num,unsigned char mode);

#endif

根据头文件使用函数

draw_str.IF_DrawLine = (void *)LCD_DrawLine;//旧接口可以不写
DIGITAL_COLOR_BACK = BLACK;
DIGITAL_COLOR_FRONT = RED;
DIGITAL_COLOR_FRONT_EMP = WHITE;
draw_str.Digital_Draw_Line = (void *)Draw_Line;

例如
Digital_Draw_num(20,20,75,440,760,6,0x90);
在20,20位置显示宽度为75的440宽760高的数码管字体6

主函数

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"
#include "digital_led.h"
//ALIENTEK战舰STM32开发板实验13
//TFTLCD显示 实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司  

void Draw_Line(unsigned short xs,unsigned short ys,unsigned char xe,unsigned short ye,unsigned short color)
{
        POINT_COLOR = color;
        LCD_DrawLine(xs,ys,xe,ye);
}

int main(void)
{
        u8 lcd_id[12];                        //存放LCD ID字符串
  Stm32_Clock_Init(9);        //系统时钟设置
        uart_init(72,115200);        //串口初始化为115200
        delay_init(72);                            //延时初始化
        LED_Init();                                  //初始化与LED连接的硬件接口
         LCD_Init();
        POINT_COLOR=RED;
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
        LCD_ShowString(30,40,210,24,24,"WarShip STM32 ^_^");
        LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
        
        draw_str.IF_DrawLine = (void *)LCD_DrawLine;
        DIGITAL_COLOR_BACK = BLACK;
        DIGITAL_COLOR_FRONT = RED;
        DIGITAL_COLOR_FRONT_EMP = WHITE;
        draw_str.Digital_Draw_Line = (void *)Draw_Line;
        if(1)
        {
                int stp;
                for(stp=0;stp<32;stp++)
                {
                        
                        //Draw_Digital_num(20,20,20,120,300,stp,0);
                        
                        Digital_Draw_num(20,0,10,120,180,stp++%16,0x00);
                        Digital_Draw_num(20,200,15,120,180,stp++%16,0x20);
                        //Digital_Draw_num(20,400,10,120,180,stp%16,0x40);
                                                                                                                                                                                                                                        Digital_Draw_num(20,400,20,120,180,stp++%16,0x90);
                        Digital_Draw_num(20,600,25,120,180,stp++%16,0x60);
               
                        Digital_Draw_num(260,0,10,120,180,stp++%16,0x80);
                        Digital_Draw_num(260,200,10,120,180,stp++%16,0xA0);
                        //Digital_Draw_num(260,400,10,120,180,stp%16,0xC0);
                                                                                                                                                                                                                                        Digital_Draw_num(260,400,10,120,180,stp++%16,0xF0);
                        Digital_Draw_num(260,600,10,120,180,stp++%16,0xE0);
                        delay_ms(1200);
                        LCD_Clear(BLACK);stp -= 8;
                }
                for(stp=0;stp<32;stp++)
                {
                        Digital_Draw_num(20,20,75,440,760,stp%16,0x90);
                        delay_ms(1200);delay_ms(1200);delay_ms(1200);
                        LCD_Clear(BLACK);
                }
        }
  while(1)
        {
                LED0=!LED0;                                
                LED1=!LED1;                        
                delay_ms(100);        
        }
}
效果:https://www.bilibili.com/video/BV1eb411M7Rv

精英战舰代码如下
数码管显示实验.zip (204.14 KB, 下载次数: 153)
PIC09.png
PIC14.png
PIC15.png
PIC16.png
PIC19.png
天然懒,天然呆
能吃会睡,未来可期
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-8 14:06:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

8

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2011-11-12
在线时间
149 小时
发表于 2019-5-11 17:52:11 | 显示全部楼层
感谢楼主分享,要是在上点在开发板上显示的效果就更好啦
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2019-5-12 21:21:27 | 显示全部楼层
本帖最后由 xcc521 于 2021-1-11 14:44 编辑
BowenQQ 发表于 2019-5-11 17:52
感谢楼主分享,要是在上点在开发板上显示的效果就更好啦

补充演示视频
https://www.bilibili.com/video/BV1eb411M7Rv
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

8

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2011-11-12
在线时间
149 小时
发表于 2019-5-13 08:38:57 | 显示全部楼层
感谢楼主,效果不错,赞!!
回复 支持 反对

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
949
金钱
949
注册时间
2018-4-21
在线时间
264 小时
发表于 2019-5-13 09:52:01 来自手机 | 显示全部楼层
谢谢分享!!学习一下
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2019-4-5
在线时间
26 小时
发表于 2019-5-26 23:13:20 | 显示全部楼层
本帖最后由 network628 于 2019-5-26 23:21 编辑

您好,谢谢分享!!
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2019-8-27 09:29:04 | 显示全部楼层
本帖最后由 xcc521 于 2021-1-11 14:46 编辑

微信图片_20190827092751.png
更新一个注释


演示效果:https://www.bilibili.com/video/BV1eb411M7Rv
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1835
金钱
1835
注册时间
2014-12-4
在线时间
717 小时
发表于 2019-12-17 14:49:35 | 显示全部楼层
本帖最后由 loudianxin 于 2019-12-17 15:10 编辑

谢谢分享
回复 支持 反对

使用道具 举报

4

主题

203

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2923
金钱
2923
注册时间
2019-8-16
在线时间
315 小时
发表于 2020-6-2 20:58:51 | 显示全部楼层
冲冲冲
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2020-8-11 16:36:36 | 显示全部楼层

giao                                 
006APoFYly1g5k7vojazqg309l09lh4l.gif
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2019-12-3
在线时间
86 小时
发表于 2021-1-8 20:13:39 | 显示全部楼层
代码不能用吧...
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2021-1-9 10:44:03 | 显示全部楼层
asdfa 发表于 2021-1-8 20:13
代码不能用吧...

貌似有点问题,稍作修改即可,也没人反馈给我
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2019-12-3
在线时间
86 小时
发表于 2021-1-11 12:06:04 | 显示全部楼层
里面好像只声明了函数Digital_Draw_num,函数并没有内容,这应该怎么改呢
我想改个名字
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2021-1-11 14:42:22 | 显示全部楼层
asdfa 发表于 2021-1-11 12:06
里面好像只声明了函数Digital_Draw_num,函数并没有内容,这应该怎么改呢

对接上自己的画线函数即可
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2019-12-3
在线时间
86 小时
发表于 2021-1-11 21:59:50 | 显示全部楼层
xcc521 发表于 2021-1-11 14:42
对接上自己的画线函数即可

void Draw_Digital_num(unsigned short x,unsigned short y,unsigned char lw,unsigned short w,unsigned short h,unsigned char num,unsigned char fill);
void Digital_Draw_num(unsigned short x,unsigned short y,unsigned char lw,unsigned short w,unsigned short h,unsigned char num,unsigned char mode);
这俩个函数都只是声明一下了,没定义没内容,这俩应该是画数码管字体的函数吧,那里面应该调用了画线函数吧而不是对接上画线函数吧。工程里只有digital_led.h这个H文件,是不是少对应的C文件那,不然找不到画数码管字体的函数定义
我想改个名字
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2021-1-19 15:18:53 | 显示全部楼层
asdfa 发表于 2021-1-11 21:59
void Draw_Digital_num(unsigned short x,unsigned short y,unsigned char lw,unsigned short w,unsigned ...

还有个lib文件实现的
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2019-12-3
在线时间
86 小时
发表于 2021-1-20 17:25:19 | 显示全部楼层
xcc521 发表于 2021-1-19 15:18
还有个lib文件实现的

奥 那就没错了 把目录下的Lib文件添加到工程就好了 就没报错了,感谢大佬分享
我想改个名字
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2021-1-20 19:10:52 | 显示全部楼层
asdfa 发表于 2021-1-20 17:25
奥 那就没错了 把目录下的Lib文件添加到工程就好了 就没报错了,感谢大佬分享

很少人跟我反馈,我也没发现
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2019-4-24
在线时间
18 小时
发表于 2021-7-1 10:46:30 | 显示全部楼层
支持支持!lz非常强
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2011-11-14
在线时间
130 小时
发表于 2021-7-28 18:11:09 | 显示全部楼层

谢谢分享!!学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 09:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表