xjbh001 发表于 2012-9-13 15:25:33

让数码管比段生成器去见鬼吧(转载)

经常看到一些工程师或网友在编写数码管程序时,花费很多时间在制作那个数字的对照表,甚至
有什么数码管笔段生成器的软件出现,其实数码管定义很简单,只要知道那个7段的定义,不需要
半秒钟,笔段对照比较就知道生产,也不需要什么数码管比段生成器

方法如下:
/*
   a
---
f| g |b   
---
e|   |c   
---
   d
*/


#define Sega    0x01
#define Segb    0x02
#define Segc    0x40
#define Segd    0x20
#define Sege    0x10
#define Segf    0x04
#define Segg    0x08

#define Num0    (Sega + Segb + Segc + Segd + Sege + Segf       )
#define Num1    (         Segb + Segc                                       )
#define Num2    (Sega + Segb + Segd + Sege + Segg)
#define Num3    (Sega + Segb + Segc + Segd               + Segg)
#define Num4    (         Segb + Segc               + Segf + Segg)
#define Num5    (Sega            + Segc + Segd + Segf + Segg)
#define Num6    (Sega            + Segc + Segd + Sege + Segf + Segg)
#define Num7    (Sega + Segb + Segc                            )
#define Num8    (Sega + Segb + Segc + Segd + Sege + Segf + Segg)
#define Num9    (Sega + Segb + Segc + Segd      + Segf + Segg)
#define Numblk(0                                             )


INT8UNum_code = {Num0,Num1,Num2,Num3,Num4,Num5,Num6,Num7,Num8,Num9,Numblk};
如果以后比段的位置发生变化了,修改seg的定义,在编译就好了
这个方法无论从代码可读性,维护难易程度来来说,都是十分理想的;

xjbh001 发表于 2012-9-13 15:28:06

"#define Num0    (Sega + Segb + Segc + Segd + Sege + Segf       )"
“+”改为位或“|”更合理

dudududu 发表于 2012-9-13 15:32:22

楼上正解

zhanyanqiang 发表于 2012-9-13 16:06:00

嗯是这么干的

powermeter 发表于 2012-9-13 16:11:30

hao {:smile:}

starli 发表于 2012-9-13 16:21:00

很好,很强大,收藏了.谢谢楼主提供新思路.

nathanest 发表于 2012-9-13 16:27:13

哈哈 不错的想法啊。收藏下。

xiaojiong886 发表于 2012-9-13 16:31:48

{:smile:}方法确实不错,又简单

onepower 发表于 2012-9-13 16:34:27

xjbh001 发表于 2012-9-13 15:28 static/image/common/back.gif
"#define Num0    (Sega + Segb + Segc + Segd + Sege + Segf       )"
“+”改为位或“|”更合理 ...

对,而且用处更大, 这是石器时期的技巧了

l09046162 发表于 2012-9-13 16:34:52

好思路 谢谢楼主分享!!!!

pyroseeking 发表于 2012-9-13 16:36:33

都是这么搞的啊。哈哈

formatme 发表于 2012-9-13 16:44:25

学到了,好主意

tanguicaicai 发表于 2012-9-13 17:31:47

好东西,方便快捷~~~

jinshaopu 发表于 2012-9-13 17:33:39

好方法   

luojiyin 发表于 2012-9-13 17:37:24

位运算   用得挺巧妙的

leijiayou 发表于 2012-9-13 17:39:55

{:victory:}牛逼

bg6agf 发表于 2012-9-13 17:47:35

本帖最后由 bg6agf 于 2012-9-13 17:54 编辑

这是啥时候的事啊?我以前在本坛发过的。还被人喷了。。

bg6agf 发表于 2012-9-13 17:50:16

/*****************************************************************************/
#define _seg_c            0x80
#define _seg_dp         0x40
#define _seg_d         0x20
#define _seg_e            0x10
#define _seg_g            0x08
#define _seg_a            0x04
#define _seg_f            0x02
#define _seg_b            0x01
/* seg7_code 84218421共阴七段数码管 */
#define SEGALL      (255-_seg_dp)
#define SEG0          (SEGALL-_seg_g)
#define SEG1          (_seg_b+_seg_c)
#define SEG2          (SEGALL-_seg_f-_seg_c)
#define SEG3          (SEGALL-_seg_f-_seg_e)
#define SEG4          (_seg_b+_seg_c+_seg_f+_seg_g)
#define SEG5          (SEGALL-_seg_b-_seg_e)
#define SEG6          (SEGALL-_seg_b)
#define SEG7          (_seg_a+_seg_b+_seg_c)
#define SEG8          (SEGALL)
#define SEG9          (SEGALL-_seg_e)
#define SEGA          (SEGALL-_seg_d)
#define SEGB          (SEGALL-_seg_a-_seg_b)
#define SEGC          (_seg_a+_seg_d+_seg_e+_seg_f)
#define SEGD          (SEGALL-_seg_a-_seg_f)
#define SEGE          (SEGALL-_seg_b-_seg_c)
#define SEGF          (SEGE-_seg_d)
#define SEGG          (SEGALL-_seg_b-_seg_g)
#define SEGH          (SEGALL-_seg_a-_seg_d)
#define SEGI          (_seg_a+_seg_c)
#define SEGJ          (_seg_b+_seg_c+_seg_d+_seg_e)
#define SEGK          (_seg_f+_seg_g+_seg_e)
#define SEGL          (_seg_d+_seg_e+_seg_f)
#define SEGM          (_seg_a+_seg_c+_seg_d+_seg_f)
#define SEGN          (SEGALL-_seg_g-_seg_d)
#define SEGO          (_seg_a+_seg_b+_seg_f+_seg_g)
/*****************************************************************************/

这是我大学时候做的。。大概是06年左右吧。。
后来发到本坛。被人喷了。。没想到现在有人又拿出来了。

lcmdw 发表于 2012-9-13 17:50:27

mark{:smile:}

bg6agf 发表于 2012-9-13 17:52:18

http://www.amobbs.com/thread-4887533-1-1.html

这是我当时发的。10L

pcwinner 发表于 2012-9-13 17:54:26

这个不错!!!

bg6agf 发表于 2012-9-13 17:59:33

有图为证。。。。

Lu_JR 发表于 2012-9-13 19:52:07

谢谢楼主!

wye11083 发表于 2012-9-13 20:18:18

哈哈,竟然跟我几天前的想法不谋而合了。

njchenmin 发表于 2012-9-13 20:22:46

不错的,学习一下

detail2012 发表于 2012-9-13 20:23:42

bg6agf 发表于 2012-9-13 17:59 static/image/common/back.gif
有图为证。。。。

顿时亮了。。。

shark 发表于 2012-9-13 20:34:51

再改一下, 更直观看到D0~D7
#define _BV(v) (1<<v)
#define _seg_c         _BV(7)
#define _seg_dp          _BV(6)
#define _seg_d         _BV(5)
#define _seg_e         _BV(4)
#define _seg_g         _BV(3)
#define _seg_a         _BV(2)
#define _seg_f         _BV(1)
#define _seg_b         _BV(0)

D.lovers 发表于 2012-9-13 20:46:31

不错!记号。

bbsview 发表于 2012-9-13 21:37:50

呵呵,围观一下,貌似有人发过,不过发太早了没人欣赏,安慰一下

jiang47 发表于 2012-9-13 21:46:53

数码管,MARK

gdjsfy_86 发表于 2012-9-13 22:19:19

bucuo   学习了

hall 发表于 2012-9-14 13:21:13

真心很牛X~

badrobot 发表于 2012-9-14 15:36:07

这个办法很好,学习了

yhyf_heart 发表于 2012-9-14 15:44:05

非常好的思路,值得借鉴,原先我也是找的数码管生成软件,看来还是这个爽,简单实用!

mfkqqw 发表于 2012-9-14 16:00:46

好方法!

liujinhan 发表于 2012-9-14 16:00:48

这个才7段而已,VFD的显示定义才叫累。如果不采用宏的话!。。!

不同的VFD脚位定义不一样的。

gmyu 发表于 2012-9-14 16:26:47

#define Num8    0x7F
#define Num9   Num8-SegE
#define Num6   Num8-SegB
#define Num0   Num8-SegG
#define Num2   Num8- SegF - SegC
#define Num1   SegB + SegC
#define Num7   Num1 + SegC

懒得打字了,加个括号吧,开个玩笑而已,这个没啥意思。

ifus 发表于 2012-9-14 16:28:20

厉害,以前从来没想过!

kakarotto 发表于 2012-9-14 21:56:22

早就这么干了

lmt50211 发表于 2012-9-15 10:31:12

xjbh001 发表于 2012-9-13 15:28 static/image/common/back.gif
"#define Num0    (Sega + Segb + Segc + Segd + Sege + Segf       )"
“+”改为位或“|”更合理 ...

怎么个合理法呢?不是太明白。。

lovecxm 发表于 2015-7-24 21:48:30

虽然好久了,但思路很好,宏定义很强大

minicatcatcn 发表于 2015-7-25 09:42:30

马上留个记号。

qingyin2009 发表于 2015-7-25 09:59:52

我们就是这么做的

moouse 发表于 2015-7-25 10:14:30

收藏了,多谢   

wuha 发表于 2015-7-25 10:45:49

大家不知道有段码生成器之类的小软件吗?

zqf441775525 发表于 2015-7-25 11:10:21

真是一个好思路,顶楼主!

sandman 发表于 2015-7-25 22:13:34

这个办法真不错

liudingding 发表于 2015-7-29 19:40:35

段码生成器也不麻烦

AllEle 发表于 2015-7-29 20:11:15

简单实用,不错

LCRPN 发表于 2015-7-29 20:41:09

一直都是这么用的。

laojiao 发表于 2015-7-30 14:41:05

好主意,顶起

freeboyxd 发表于 2015-7-30 22:32:32

确实不错

klxx68 发表于 2016-4-19 18:14:23

好思路,学习了。

billtian 发表于 2016-4-19 18:24:32

一般人我不告诉他,很早就这么用,最早发现好像是TI 或某个公司的例程里。

zengyi703 发表于 2016-4-19 18:28:23

好思路,标记了

longjunyi 发表于 2016-4-19 22:46:41

好方法,先做个记号

kevin_me 发表于 2016-4-20 09:49:24

蛮好的,我之前只用的宏定义,楼主再用个数组,更好。

z903057128 发表于 2016-4-20 09:55:24

这个方法真心不错

69879 发表于 2016-4-20 10:11:50

好思路,标记了

ibmx311 发表于 2016-4-29 22:22:40

日本人民搞个数码管或者是键盘中断都能搞一辈子

QFLN 发表于 2016-4-29 23:20:20

的确不错,以后用这方法

ZTQiang 发表于 2016-5-14 11:35:55


方法确实不错,又简单

khuohuo 发表于 2016-5-14 11:55:36

很不错,收了。

NEXEN1106 发表于 2016-5-16 21:18:42

好主意,学习了

lanlibo 发表于 2016-5-16 21:56:58

#define Sega    0x01 #define Segb    0x02 #define Segc    0x40 #define Segd    0x20 #define Sege    0x10 #define Segf    0x04 #define Segg    0x08

lanlibo 发表于 2016-5-16 22:06:12

帮楼主优化一下

#define Pin_a    1<<0
#define Pin_b    1<<1
#define Pin_c    1<<2
#define Pin_d    1<<3
#define Pin_e    1<<4
#define Pin_f   1<<5
#define Pin_g    1<<6
#define Pin_blk   1<<7


#define Num0    (Pin_a | Pin_b | Pin_c| Pin_d |Pin_e|Pin_f)   
#define Num1    (Pin_b | Pin_c                                          )
#define Num2    (Pin_a | Pin_b | Pin_d| Pin_e | |Pin_f          )
#define Num3    (Pin_a | Pin_b | Pin_c| Pin_d |Pin_g          )
#define Num4    (Pin_b | Pin_c | Pin_f|Pin_g                      )
#define Num5   (Pin_a | Pin_c | Pin_d| Pin_f |Pin_g          )
#define Num6   (Pin_a | Pin_c | Pin_d| Pin_e| Pin_f |Pin_g          )
#define Num7   (Pin_a | Pin_b | Pin_c                              )
#define Num8   (Pin_a | Pin_b | Pin_c| Pin_d |Pin_e|Pin_f|Pin_g )   
#define Num9    (Pin_a | Pin_b | Pin_c| Pin_d |Pin_f|Pin_g   )
#define Numblk( Pin_blk                                                   )


INT8UNum_code = {Num0,Num1,Num2,Num3,Num4,Num5,Num6,Num7,Num8,Num9,Numblk};

taishandadi 发表于 2016-5-17 00:06:56

这个好用。

L7科创 发表于 2016-5-17 02:33:06

谢谢楼主提供新思路.

QFLN 发表于 2016-5-17 15:51:41

这个牛B,学习了

myhonour 发表于 2016-5-17 17:56:23

很好,很强大,收藏了.谢谢楼主提供新思路.

Jason022 发表于 2016-5-17 17:58:18

收藏,不过很少用数码管了

hongyancl 发表于 2016-5-17 18:01:34

很好,很强大,

wisure 发表于 2016-6-3 21:43:08

感谢 !

hongmark 发表于 2016-6-3 21:50:13

不错,谢谢分享

alphax64 发表于 2016-6-4 18:34:19

66楼优化的不错,谢谢楼主分享。

ywlzh 发表于 2016-6-4 19:06:09

bg6agf 发表于 2012-9-13 17:50
/*****************************************************************************/
#define _seg_c       ...

估计喷你的人是觉得下划线看的眼花,太烦乱了,有说影响效率的吗?

bg6agf 发表于 2016-6-5 00:25:31

ywlzh 发表于 2016-6-4 19:06
估计喷你的人是觉得下划线看的眼花,太烦乱了,有说影响效率的吗?

这个一次定义。受用终身啊。这种宏定义不占用任何额外空间的。

ywlzh 发表于 2016-6-5 09:48:57

bg6agf 发表于 2016-6-5 00:25
这个一次定义。受用终身啊。这种宏定义不占用任何额外空间的。

的确是的

liaihua1997 发表于 2016-6-5 21:37:37

这个定义不错啊,很好的资料

wwk1996 发表于 2016-9-9 20:47:23

这个真不错,学习了。

zlutian 发表于 2016-9-9 21:26:34

学习记录下。

2005n2005 发表于 2016-9-9 23:20:50

必须收藏!!

yongke 发表于 2016-9-26 10:42:57

不错的注意,以后借鉴
页: [1]
查看完整版本: 让数码管比段生成器去见鬼吧(转载)