在上一篇文章QS30-1 Nixie Module【硬件篇】中,重点介绍了辉光管显示模块的硬件部分及设计、制作过程。
或许我们对她独特的显示效果始终难以忘怀,但要让她焕发夺目色彩,重点还在于应用。该模块在其硬件方面已经具备了完备的功能,应用软件方面则需要结合实际应用要求来设计。先来回忆一下那种火红的朦胧:

无论何种应用方案,基于硬件设计原理,该模块的底层控制实为对74HC595的通讯控制,在这里,我以51单片机控制板为核心来介绍一下底层驱动软件的设计方法。
每个显示模块的辉光管数字0-9和RGB LED以及两颗Neon Lamps均由两片74HC595来控制,共需要16bit(2Byte)数据。根据原理图,两片74HC595共有16个输出端对应16bit数据,对应关系表如下:

根据对应关系表,可以得出辉光管各种显示状态、RGB LED和Neon Lamps的对应数据表:

(1:高电平,0:低电平,x:无关)
为了方便对RGB LED、Neon Lamps和辉光管进行控制,在这里我采用了结构体来对整个模块的各种显示模式进行了配置。
代码如下:
1 2 3 4 5 6 | struct t_Module { uint LED; //LED颜色 uint CLO; //冒号状态 uint NUM; //显示数字 }; |
同时,根据各种显示状态,按照对应关系表进行了预定义,每个状态被定义成一个16位的uint类型常量。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #define LED_OFF 0x7000 //LED关 #define LED_WHITE 0x0000 //LED白色 #define LED_PURPLE 0x4000 //LED紫色 #define LED_CYAN 0x2000 //LED青色 #define LED_YELLOW 0x1000 //LED黄色 #define LED_BLUE 0x6000 //LED蓝色 #define LED_GREEN 0x3000 //LED绿色 #define LED_RED 0x5000 //LED红色 #define CLO_OFF 0x0000 //氖灯关 #define CLO_UP 0x0400 //氖灯上点亮 #define CLO_DOWN 0x0800 //氖灯下点亮 #define CLO_BOTH 0x0C00 //氖灯全亮 #define NUM_OFF 0x0000 //无数字显示 #define NUM_0 0x0200 //显示数字0 #define NUM_1 0x0001 //显示数字1 #define NUM_2 0x0002 //显示数字2 #define NUM_3 0x0004 //显示数字3 #define NUM_4 0x0008 //显示数字4 #define NUM_5 0x0010 //显示数字5 #define NUM_6 0x0020 //显示数字6 #define NUM_7 0x0040 //显示数字7 #define NUM_8 0x0080 //显示数字8 #define NUM_9 0x0100 //显示数字9 |
接下来,只需要将各个模块的显示模式配置好就OK了,例如:
1、将模块1的LED配置为白色,两个氖灯只亮起上面的那颗,辉光管显示数字0;
2、将模块2的LED配置为紫色,两个氖灯只亮起下面的那颗,辉光管显示数字1;
代码如下:
1 2 3 4 5 6 | MOD[0].LED = LED_WHITE; //初始化模组1的LED状态 MOD[0].CLO = CLO_UP; //初始化模组1的冒号状态 MOD[0].NUM = NUM_0; //初始化模组1的数字状态 MOD[1].LED = LED_PURPLE; //初始化模组2的LED状态 MOD[1].CLO = CLO_DOWN; //初始化模组2的冒号状态 MOD[1].NUM = NUM_1; //初始化模组2的数字状态 |
配置完显示模块的显示模式,接下来就需要将显示模式配置为N个模块需要的2byte数据,通过74HC595通讯函数发送给显示模块。
在这里设计了两个函数,一个是Send595()函数,用于发送两个字节数据到串行总线上,一个是Update()函数,用于根据显示模块的显示模式计算要发送的两个字节数据。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /********************************************************************* ** 函数名称: void Send595(uchar count,uchar dat) ** 功能描述: 向74HC595发送数据 ** 入口参数: count: 发送数据的位数 ** dat: 发送的数据(MAX 16Bit) *********************************************************************/ void Send595(uint count,uint dat) { for(;count>0;count--) { DATA = dat&0x8000; SHCP = 1; SHCP = 0; dat< |
有了以上函数,只需要在主函数里配置好相应的结构体,然后调用Update()函数即可更新所有显示内容。
照片中,我采用的是C8051F340的最小系统版,在此贴出主函数,以供大家参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /********************************************************************* * 函 数 名: main() * 功能描述: 主程序 * 设 计 者:严泽远 日期:2012-06-29 17:11 * 修 改 者:严泽远 日期:2012-06-30 15:22 * 版 本:v1.0.0 *********************************************************************/ main() { uint i=0x0001; uchar j=0; Port_IO_Init(); //IO资源配置 Oscillator_Init(); //晶体振荡器初始化 OE = 0; //输出使能 或采用PWM控制来调节整体亮度 MOD[0].LED = LED_WHITE; //初始化模组1的LED状态 MOD[0].CLO = CLO_UP; //初始化模组1的冒号状态 MOD[0].NUM = NUM_0; //初始化模组1的数字状态 MOD[1].LED = LED_PURPLE; //初始化模组2的LED状态 MOD[1].CLO = CLO_DOWN; //初始化模组2的冒号状态 MOD[1].NUM = NUM_1; //初始化模组2的数字状态 Update(); //刷新显示 while(1) { ; } } |
需要下载完整代码的朋友请移步:
https://github.com/aguegu/nixie-tube/downloads
该模块的Datasheet下载地址请移步:
QS30-1NixieModuleUserManual_CH
Qs30-1NixieModuleUserManual_EN
同时,该模块已经完美应用于Arduino系统,由aGuegu制作了完美的Nixie Module驱动类库,并且完全开源。
特别感谢:aGuegu
详情及下载请见阿古作坊: QS30-1 辉光管通用模块 Arduino 类库开发记
QS30-1 Nixie Module list on eBay

DIY是一种享受,享受的是过程,更是结果……
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
软硬件设计:严泽远
QQ:6626209
Mobile:18602007878
WebSite:http://www.nixieclock.org
E-mail:yanzeyuan@163.com


貌似我又是1楼
[...] or steampunk aesthetic. We shouldn’t be surprised a factory in China is now turning out Arduino-compatable Nixie modules (English translation, but don’t get your hopes up), but there it [...]
[...] vintage, or steampunk aesthetic. We shouldn’t be surprised a factory in China is now turning out Arduino-compatable Nixie modules (English translation, but don’t get your hopes up), but there it [...]
[...] or steampunk aesthetic. We shouldn’t be surprised a factory in China is now turning out Arduino-compatable Nixie modules (English translation, but don’t get your hopes up), but there it [...]
[...] vintage, or steampunk aesthetic. We shouldn’t be surprised a factory in China is now turning out Arduino-compatable Nixie modules (English translation, but don’t get your hopes up), but there it [...]
Hi, thanks for visit. I’m not a factory, I’m only a DIYer, a Nixie fan, I like nixie tubes.
May I know where did you find my bolg?
Thanks.
Yan.
[...] vendimia, o steampunk estético. No debería sorprendernos una fábrica en China está resultando Arduino-compatable módulos Nixie [...]
[...] 数码管,霓虹灯填充了一系列的形状像数字10阴极管,是一个典型的想要一个独特的葡萄酒,或朋克审美显示任何建立。我们不应该感到惊讶,现在在中国的工厂是兼容的Arduino的的数码模块 (英语翻译,但不要寄予太大的希望),但它是存在的。 [...]
严老师您好
自己也想DIY一个8位数的数字钟,我想这个电路应该对我有帮助,
请问可以分享您的电路图让我参考吗?感谢您!
你好,感谢关注!
这个辉光管显示模块的全部电路图资料已经刊登在2012年第10期的《无线电》杂志上,需要的话可以前去查看一下!
见到严老师的辉光灯非常喜欢,最近中毒很深,自己也想diy一个,希望严老师能分享些资料,呵呵
QS30-1的封装库已经发到你的邮箱,请查收!
经过朋友介绍看到了这个作品,中毒啊,希望能够分享一下相关资料,我也折腾折腾,谢谢您!
呵呵,欢迎加入辉光管发烧行列…也欢迎加入我的DIY群145751810
How many of these modules do you have? How many could you ship in the next 3 months for a large order?
Hi, I have about 200pcs semi-finished modules in stock, thanks.