0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用7段码数码管?

汽车电子威廉希尔官方网站 来源:dotNet工控上位机 作者: 新阁教育付工 2023-02-22 15:50 次阅读

数码管

在开发上位机UI界面时,我们常常会希望数值可以以7段数码管的形式呈现。

关于7段数码管,最早接触应该是学习单片机的时候,它可以将数字或者字母以7段字符来呈现,所以有时候也叫7段LED数码管显示。

实现思路

C#想要实现7段数码管显示,一般会有两种思路,一种是GDI+,通过代码绘制的方式来实现,今天,给大家介绍另外一种简单而又方便的方式,那就是通过设置字体,提前做好一个7段码的字体,在电脑中安装好即可,当然字体也可以用现成的,这里给大家提供一个线程的7段码字体,公众号回复关键词:7SEG 或 124

使用也很简单,就是拖放一个Label标签到界面上,然后设置字体选择为7SEG,设置合适的字体大小即可。

图片

使用7SEG字体,前提要安装这个字体,安装也很简单,双击下载的7SEG.ttf即可。

最终呈现的效果如下所示:

图片

项目应用

这个提及一下项目应用,如果我们开发好项目,把程序放到其他电脑上使用,由于其他电脑没有安装7SEG的字体,效果肯定会不一样。

一种方法就是提前手动安装好字体,然后再运行程序,但是也没有其他好的方法呢?

也许你们也想到了,就是通过代码自动完成,思路就是检测字体是否存在,存在则继续,不存在则通过代码安装字体。

所以首先需要第一个方法,检测某个字体是否存在,方法如下:

/// 
        /// 检测某种字体样式是否可用
        /// 
        /// 字体名称
        /// 字体样式
        /// 
        private bool CheckFont(string familyName, FontStyle fontStyle = FontStyle.Regular)
        {
            InstalledFontCollection installedFontCollection = new InstalledFontCollection();
            FontFamily[] fontFamilies = installedFontCollection.Families;
            foreach (var item in fontFamilies)
            {
                if (item.Name.Equals(familyName))
                {
                    return item.IsStyleAvailable(fontStyle);
                }
            }
            return false;
        }

有了这个方法之后,还需要另外一个方法就是安装字体,安装字体需要提供字体的路径,代码如下:

/// <summary>
        /// 安装字体
        /// class="hljs-keyword"summary>
        /// name="fontFilePath">字体文件全路径
        /// <returns>是否成功安装字体class="hljs-keyword"returns>
        /// <exception cref="UnauthorizedAccessException">不是管理员运行程序class="hljs-keyword"exception>
        /// <exception cref="Exception">字体安装失败class="hljs-keyword"exception>
        private bool InstallFont(string fontFilePath)
        {
            try
            {
                System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
                System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
                //判断当前登录用户是否为管理员
                if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator) == false)
                {
                    throw new UnauthorizedAccessException("当前用户无管理员权限,无法安装字体");
                }
                //获取Windows字体文件夹路径
                string fontPath = Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR"), "fonts", Path.GetFileName(fontFilePath));
                //检测系统是否已安装该字体
                if (!File.Exists(fontPath))
                {                 
                    //将某路径下的字体拷贝到系统字体文件夹下
                    File.Copy(fontFilePath, fontPath); //font是程序目录下放字体的文件夹
                    AddFontResource(fontPath);
                    //安装字体
                    WriteProfileString("fonts", Path.GetFileNameWithoutExtension(fontFilePath) + "(TrueType)", Path.GetFileName(fontFilePath));
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

最终在项目运行初始化里执行如下代码:

if (!CheckFont("7SEG"))
            {
                if (InstallFont(FontPath))
                {
                    MessageBox.Show("字体安装成功,重启生效!", "字体安装");
                }
                else
                {
                    MessageBox.Show("字体安装失败!", "字体安装");
                }
            }

其中FontPath是字体文件的路径,一般可以提前方法根目录下。这样即使是没有安装字体的电脑,也可以直接正常显示了。

-END-

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44553

    浏览量

    634767
  • 数码管
    +关注

    关注

    32

    文章

    1882

    浏览量

    91073
  • 字符
    +关注

    关注

    0

    文章

    233

    浏览量

    25199
收藏 人收藏

    评论

    相关推荐

    7段数码管管脚顺序及译码驱动集成电路

    7段数码管管脚顺序及译码驱动集成电路74LS47,48  这里介绍一下7段数码管见下图 7段数码管
    发表于 11-06 13:42 1.2w次阅读

    红外遥控解码数码管显示实验

    红外遥控解码数码管显示实验[hide]红外遥控解码数码管显示实验.rar[/hide] [此贴子已经被作者于2009-12-7 18:25:13编辑过]
    发表于 12-07 18:22

    proteus的7段数码管的问题

    最近刚开始接触proteus,调用里面的数码管时,发现CC驱动是位选为低,选为高才能亮,CA驱动是位选为高,选为低才能亮,那么7段数码管
    发表于 07-25 22:29

    如何去解决编码数码管的数值问题

    最佳答案你那个编码数码管的数值可能有问题,写出来全是乱码。(这是我写的,你可以做个参考):#include***it wela=P2^7;***it dula=P2^6;#define uchar
    发表于 07-15 07:45

    数码管简介

    数码管简介 组成:LED数码管7或8发光二极组成,在平面上排成8字型。
    发表于 12-20 03:01 2593次阅读
    <b class='flag-5'>数码管</b>简介

    共阴极7段数码管

    共阴极7段数码管 LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这
    发表于 03-14 13:03 3.3w次阅读
    共阴极<b class='flag-5'>7</b><b class='flag-5'>段数码管</b>

    共阳极7段数码管

    共阳极7段数码管 LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了
    发表于 03-14 13:04 3.5w次阅读
    共阳极<b class='flag-5'>7</b><b class='flag-5'>段数码管</b>

    7段数码管显示实验报告

    EDA实验中,7段数码管显示实验报告,程序和波形仿真。
    发表于 11-24 14:50 0次下载

    【实验114】红外解码数码管显示

    HL配套C实验例程红外解码数码管显示,配合开发板学习效果更好。
    发表于 04-11 17:14 24次下载

    段数码管驱动方式_七段数码管怎么接

    本文首先介绍了七段数码管驱动方式,其次介绍了七段数码管引脚图,最后介绍了七段数码管引脚连接方法。
    发表于 10-09 11:16 1.7w次阅读

    7段数码管显示实验的Proteus仿真电路图和程序免费下载

    7段数码管显示 包括2个任务1:protues上仿真实现8个数码管动态显示0~7,2:在实验箱上完成8个数码管动态显示0~
    发表于 12-10 08:00 13次下载
    <b class='flag-5'>7</b><b class='flag-5'>段数码管</b>显示实验的Proteus仿真电路图和程序免费下载

    使用Proteus实现7段数码管显示的实验资料合集免费下载

    7段数码管显示 包括2个任务1:protues上仿真实现8个数码管动态显示0~7,2:在实验箱上完成8个数码管动态显示0~
    发表于 06-19 08:00 24次下载
    使用Proteus实现<b class='flag-5'>7</b><b class='flag-5'>段数码管</b>显示的实验资料合集免费下载

    C51单片机实验——7段数码管实验

    实验二 7段数码管实验报告实验名称:7段数码管实验实验环境:普中实验系统;Keil μVision 4软件;实验目的:(1)掌握7
    发表于 11-23 16:36 19次下载
    C51单片机实验——<b class='flag-5'>7</b><b class='flag-5'>段数码管</b>实验

    led数码管码是如何确定的,led数码管码怎么求

    根据所选用的LED数码管的极性(共阳极还是共阴极)以及数码中每一个笔的引脚与CPU(或其它控制芯片) IO口的引脚的连接来定(称自定的码表)。一般资料上提供的
    的头像 发表于 07-21 11:43 8747次阅读
    led<b class='flag-5'>数码管</b>的<b class='flag-5'>段</b>码是如何确定的,led<b class='flag-5'>数码管</b>的<b class='flag-5'>段</b>码怎么求

    7段数码管共阴共阳如何显示数字

    7段数码管是一种常见的显示设备,用于显示数字和部分字母。它由7个LED发光二极组成,每个LED可以独立控制,从而实现数字和字母的显示。 一、共阴共阳
    的头像 发表于 08-28 16:19 2146次阅读