【1.背景介绍】
使用arduino控制4段数码管显示数值,常用方法是在一个循环中不停刷新各数码管的值,使用余晖效应,显示4位数值。但是这种在循环中不停刷新的方式使得主程序很难再做别的事情,一种解决方法是使用定时中断来刷新4段数码管显示的值,这样主程序可以空闲出来处理别的事情。
【2.硬件连接】
这里的4段数码管采用的是共阳数码管,型号:MSQC6412C,采用arduino uno控制板。数码管引脚定义以及和arduino主控帮的链接方式如图1所示。
图1
【3.自定义mblock扩展】
这里使用mblock图形环境来编写程序。需要开发相应的扩展模块。此外,本程序中使用MsTimer2时钟产生定时中断,因此需要在arduino IDE中加载MsTimer2标准库。(加载方法:打开mblock自带的arduino IDE,搜搜MsTimer2标准库,然后安装)
自定义的4段数码管扩展只支持arduino模式,不支持Scratch模式,扩展压缩包中包括Seg4_led.s2e文件和src文件夹,src文件夹中包括demo.cpp,demo.h,seg4_led.c,seg4_led.h,相应的文件内容如下:
Seg4_led.s2e:
demo.h文件内容:
使用arduino控制4段数码管显示数值,常用方法是在一个循环中不停刷新各数码管的值,使用余晖效应,显示4位数值。但是这种在循环中不停刷新的方式使得主程序很难再做别的事情,一种解决方法是使用定时中断来刷新4段数码管显示的值,这样主程序可以空闲出来处理别的事情。
【2.硬件连接】
这里的4段数码管采用的是共阳数码管,型号:MSQC6412C,采用arduino uno控制板。数码管引脚定义以及和arduino主控帮的链接方式如图1所示。

图1
【3.自定义mblock扩展】
这里使用mblock图形环境来编写程序。需要开发相应的扩展模块。此外,本程序中使用MsTimer2时钟产生定时中断,因此需要在arduino IDE中加载MsTimer2标准库。(加载方法:打开mblock自带的arduino IDE,搜搜MsTimer2标准库,然后安装)
自定义的4段数码管扩展只支持arduino模式,不支持Scratch模式,扩展压缩包中包括Seg4_led.s2e文件和src文件夹,src文件夹中包括demo.cpp,demo.h,seg4_led.c,seg4_led.h,相应的文件内容如下:
Seg4_led.s2e:
- {
- "extensionName": "SEG4_LED",
- "description": "SEG4_LED for common anode",
- "version": "1.1",
- "author": "yoyoba(stuyou@126.com)",
- "homepage": "youhaidong.cn",
- "sort":0,
- "javascriptURL":"",
- "firmware":"1.0",
- "extensionPort":0,
- "tags" : "makeblock,seg4_led",
- "blockSpecs": [
- [
- "w",
- "seg4_led_init( %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n )",
- "seg4_led_init",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "14",
- "15",
- "16",
- "17",
- "18",
- {
- "setup":"",
- "inc":"#include \"demo.h\" \n #include ", //添加<MsTimer2.h>头文件
- "def":"DemoClass demo; \n",
- "work":"demo.seg4_led_init({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}); \n",
- "loop":""
- }
- ],
- [
- "w",
- "seg4_led_display( %n )",
- "seg4_led_display",
- "1234",
- {
- "setup":"",
- "inc":"#include \"demo.h\"",
- "def":"DemoClass demo; \n",
- "work":"demo.seg4_led_display({0}); \n",
- "loop":""
- }
- ],
- ],
- "translators":{
- "zh_CN":{
- "seg4_led_init( %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n )":"4段共阳数码管初始化( %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n , %n )",
- "seg4_led_display( %n )":"4段共阳数码管显示数值( %n )"
- }
- }
- }
demo.h文件内容:
- #ifndef demo_h
- #define demo_h
- #include <Arduino.h>
- ///@brief Class for DemoClass
- class DemoClass
- {
- public:
- DemoClass();
- ~DemoClass();
- // 4段LED共阳数码管引脚初始化函数
- // con1~con4为数码管4个共阳引脚使用的arduino数字I/O口;
- // a~dp为数码管a~dp引脚使用的arduino数字I/O口
- void seg4_led_init(int con1,int con2,int con3,int con4,
- int a,int b,