从0开始手撸HPDL -1414驱动

  暑假的时候被人安利了HPDL1414这款数码管,当时还不清楚这个数码管是啥,就是看外形比较中意吧。最近因为武汉发生了新型肺炎这破事,于是这个买回来吃灰了半年的数码管被我翻出来了,准备写一写他的驱动。找到淘宝卖家要到了一份datasheet才知道他的名字是HPDL-1414。带着这个名字去百度搜索一下,也能搜索到一些文章,用HPDL-1414作电脑状态显示等。

  这些文章我也点进去看了,其中电脑状态显示的那个是开源的,但是我没有积分,故没有下载他的代码,我只看了文章。文章对底层也没有一个清晰明确的讲解,很多地方都是一笔带过,可能对于萌新电子爱好者,以及其他非电子类的朋友而言比较难于理解。所以本文会结合1414的datasheet来讲解如何驱动1414数码管。

  首先来说说要准备的东西:主控一块、3.3v电源一个、5v电源一个、1414数码管一个、杜邦线若干、焊台、焊锡、洞洞板、2.54mm间距的电子积木插座(圆孔排母)若干、2.54mm间距排针若干。

  我使用的主控是STM32F429IGT6,这块芯片要用3.3V供电,然而1414使用的是5V(Typ)供电,因此要准备两个电源。但是如果你使用的是51或者Arduino这类本身就是5V供电的芯片,可以共用一个电源。

  洞洞板、插座、排针这些自然是制作一个固定1414的底座,并且能引出1414的引脚,通过杜邦线与主控相连。

  打开1414的datasheet,首先看引脚部分:

  1414一共有12个引脚,6、7脚作为供电脚,7个数据脚和一个写使能脚写使能脚为3脚,并且低电平有效

  datasheet中告知了如何辨别1脚:

  即有字的一面左边第一个引脚是一脚,按照逆时针旋转过去依次为12个引脚的排序。

  

  接着来看时序图:

  这个时序图是我们写程序的说明书,根据时序图我们可以知道操作引脚的顺序,并且引脚保持高/低电平的时间也有标注:

  主要是值得我们关注。在操作的时候,先把D0~D6(段选)操作到自己想要的结果,然后操作A0、A1(位选),操作完成后,经过操作WS对1414进行写操作,WS要维持时间,也就是说,每次写操作的间隔要在以上(也可以理解为这款数码管的刷新率吧)。不过从上表可以看到典型值为100ns,这个时间已经非常短了。

  以上大概是这么个思路,为了更加简洁明了一些,我画了一个流程图来表示:

  接着开始写代码了,由于我使用的是STM32的芯片,ST提供了一个叫做STM32CUBEMX的工具,我直接使用这个工具对代码环境进行配置。

  引脚配置:

  

  时钟配置:

  

  工程配置:

  这个软件比较方便的就是配置起来很舒服,不用自己再去开时钟,开外设,并且我配置的GPIO它在生成代码时会自动帮我我宏定义在main.h中:

  这样做有什么好处呢?如果我更换了一款芯片,或者我跟换了引脚,我的程序可以不需要任何修改,直接修改软件中的配置然后生成新的代码就可以使用了。

  下面是具体代码

  写使能与写失能:非常简单,拉低WR线就是代表1414可以写入显示的数据,拉高WR线就是代表1414显示当前数据保持不变。

  位选:这个要看datasheet

  根据datasheet可知,A0和A1为00、01、10、11的时候,位选为0、1、2、3。因此程序如下:

  然后是段选,说到这里,就体现这款米字数码管和普通的数码管区别了。1414的段选直接和ASCII对应起来的,可以显示64种ASCII字符,从0x20显示到0x5F:

  写程序就是把对应的ASCII码转换成7位GPIO的状态。所以我定义了7个变量用于表示ASCII的每一位,也是GPIO的状态。

  通过一个形参输入ASCII,然后解析每一位是0还是1,来拉高或拉低对应的数据线:

  完成了段选位选之后,就可以写一个功能函数了:写操作。这个函数自然包含两个形参:段选(要写进去的字或符号)、位选(要显示在哪里)。

  要注意这里我在写操作的时候延时了1ms,因为HAL库中支持的最快的延时单位就是ms,虽然也有一些花里胡哨的操作可以弄成us,但是为了保证系统的稳定(其实是想偷懒),这里就用了1ms。根据之前的分析,100ns以上都是可以的。即想要效率更高的话可以选择延时500ns或者1us之类。

  然后还可以酌情加一些清屏之类的功能函数(就是让四个管全部显示空格):

  来一个实例展示:

  显示效果:

  其实还是挺简单的,主要是之前懒,现在是在家里百无聊赖,就随手写了写。

  PS:我在某宝买的4个,60块钱(含邮费),坏了3个,还差点把我的F4烧坏了,要不是我警觉,怕要大大损失一笔。

  

原文地址:https://www.cnblogs.com/Wishengine/p/12235397.html

时间: 2024-08-30 17:16:47

从0开始手撸HPDL -1414驱动的相关文章

.NET手撸2048小游戏

.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEngine,从空白窗口开始,演示如何"手撸"2048小游戏,并在编码过程中感受C#的魅力和.NET编程的快乐. 说明:FlysEngine是封装于Direct2D,重复本文示例,只需在.NET Core 3.0下安装NuGet包FlysEngine.Desktop即可. 并不一定非要做一层封装

编译原理 - 1 手撸状态机词法分析器

感谢vczh轮子叔的坑了的教程,我的编译原理第一次入了个门,词法分析写完了,今后可以看看书继续往下学了. http://www.cppblog.com/vczh/archive/2014/03/02/206014.html 词法分析,就是对于一段代码,把他们分割成一个个的token,同时记录他们的行列号,丢掉不必要的信息,这个词法分析器很简单,简单的状态机就能胜任,用正则就没有自己造轮子的快感了,所以要自己手撸状态机拆token出来. 模仿vczh的语言,我的语言包括了以下要素 标识符:大小写字

手撸kmeans(c++)实现,用于图像的主色调提取(1)

想到那天头条面试时,让我手撸kmeans,奈何好久不用c++,好多都忘了==淡淡的忧伤 这次刚好赶上机会,可以再试试了,我写成项目了,有多个文件 首先:base.h #ifndef BASE_H #define BASE_H #include<iostream> #include<opencv2/opencv.hpp> #include<cassert> #include<stdlib.h> class Baseofgeo{ public: float co

Haskell手撸Softmax回归实现MNIST手写识别

Haskell手撸Softmax回归实现MNIST手写识别 前言 初学Haskell,看的书是Learn You a Haskell for Great Good, 才刚看到Making Our Own Types and Typeclasses这一章. 为了加深对Haskell的理解,便动手写了个Softmax回归.纯粹造轮子,只用了base. 显示图片虽然用了OpenGL,但是本文不会提到关于OpenGL的内容.虽说是造轮子, 但是这轮子造得还是使我受益匪浅.Softmax回归方面的内容参考

以鶸ice为例,手撸一个解释器(一)明确目标

代码地址 # HelloWorld.ice print("hello, world") 前言(废话) 其实从开始学习编译原理到现在已经有快半年的时间了,但是其间常常不能坚持看下去龙书(经常三天打鱼两天晒网,更何况每次打鱼不到半小时就累得不行又会放下书(笑)),截至到现在只勉强看完了前六章的部分,半年间其它事也没有做,其实想想上大学已经快两年了还是一事无成,知识也没有学到,不免觉得很羞愧. 暑假也要到了,这个学期马上也要结束了,临近大二结束之际,还是尝试着写一下以前想写的玩具吧,而本系列

使用Java Socket手撸一个http服务器

原文连接:使用Java Socket手撸一个http服务器 作为一个java后端,提供http服务可以说是基本技能之一了,但是你真的了解http协议么?你知道知道如何手撸一个http服务器么?tomcat的底层是怎么支持http服务的呢?大名鼎鼎的Servlet又是什么东西呢,该怎么使用呢? 在初学java时,socket编程是逃不掉的一章:虽然在实际业务项目中,使用这个的可能性基本为0,本篇博文将主要介绍如何使用socket来实现一个简单的http服务器功能,提供常见的get/post请求支持

【手撸一个ORM】使用说明

传送门 [手撸一个ORM]第一步.约定和实体描述 [手撸一个ORM]第二步.封装实体描述和实体属性描述 [手撸一个ORM]第三步.SQL语句构造器和SqlParameter封装 [手撸一个ORM]第四步.Expression(表达式目录树)扩展 [手撸一个ORM]第五步.查询条件表达式目录树解析和插入.更新查询目录树解析 [手撸一个ORM]第六步.对象表达式解析和Select表达式解析 [手撸一个ORM]第七步.SqlDataReader转实体 [手撸一个ORM]第八步.实体查询和按需查询 [手

周末手撸管理系统(一)

周末手撸管理系统(一) 已完成 大体模板 用户登入注册 明天加商品订单商品进去 完成效果图 注册 登入 1.首先进行设置 settings.py """ Django settings for drf_test project. Generated by 'django-admin startproject' using Django 1.11.22. For more information on this file, see https://docs.djangoproj

Python Django前奏手撸web框架 基于wsgiref的web框架

基于socke手撸web框架 # 请求首行 b'GET / HTTP/1.1\r\n #GET /index HTTP/1.1\r\n (index)为浏览器请求地址) # 请求头 Host: 127.0.0.1:8080\r\n Connection: keep-alive\r\n Cache-Control: max-age=0\r\n Upgrade-Insecure-Requests: 1\r\n # User-Agent用来标识是不是浏览器 User-Agent: Mozilla/5.