让数码管比段生成器去见鬼吧(转载)
经常看到一些工程师或网友在编写数码管程序时,花费很多时间在制作那个数字的对照表,甚至有什么数码管笔段生成器的软件出现,其实数码管定义很简单,只要知道那个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的定义,在编译就好了
这个方法无论从代码可读性,维护难易程度来来说,都是十分理想的; "#define Num0 (Sega + Segb + Segc + Segd + Sege + Segf )"
“+”改为位或“|”更合理 楼上正解 嗯是这么干的 hao {:smile:} 很好,很强大,收藏了.谢谢楼主提供新思路. 哈哈 不错的想法啊。收藏下。 {:smile:}方法确实不错,又简单 xjbh001 发表于 2012-9-13 15:28 static/image/common/back.gif
"#define Num0 (Sega + Segb + Segc + Segd + Sege + Segf )"
“+”改为位或“|”更合理 ...
对,而且用处更大, 这是石器时期的技巧了 好思路 谢谢楼主分享!!!! 都是这么搞的啊。哈哈 学到了,好主意 好东西,方便快捷~~~ 好方法 位运算 用得挺巧妙的 {:victory:}牛逼 本帖最后由 bg6agf 于 2012-9-13 17:54 编辑
这是啥时候的事啊?我以前在本坛发过的。还被人喷了。。 /*****************************************************************************/
#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年左右吧。。
后来发到本坛。被人喷了。。没想到现在有人又拿出来了。 mark{:smile:} http://www.amobbs.com/thread-4887533-1-1.html
这是我当时发的。10L
这个不错!!! 有图为证。。。。 谢谢楼主! 哈哈,竟然跟我几天前的想法不谋而合了。 不错的,学习一下 bg6agf 发表于 2012-9-13 17:59 static/image/common/back.gif
有图为证。。。。
顿时亮了。。。 再改一下, 更直观看到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)
不错!记号。 呵呵,围观一下,貌似有人发过,不过发太早了没人欣赏,安慰一下 数码管,MARK bucuo 学习了 真心很牛X~ 这个办法很好,学习了 非常好的思路,值得借鉴,原先我也是找的数码管生成软件,看来还是这个爽,简单实用! 好方法! 这个才7段而已,VFD的显示定义才叫累。如果不采用宏的话!。。!
不同的VFD脚位定义不一样的。 #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
懒得打字了,加个括号吧,开个玩笑而已,这个没啥意思。
厉害,以前从来没想过! 早就这么干了
xjbh001 发表于 2012-9-13 15:28 static/image/common/back.gif
"#define Num0 (Sega + Segb + Segc + Segd + Sege + Segf )"
“+”改为位或“|”更合理 ...
怎么个合理法呢?不是太明白。。 虽然好久了,但思路很好,宏定义很强大 马上留个记号。 我们就是这么做的 收藏了,多谢 大家不知道有段码生成器之类的小软件吗? 真是一个好思路,顶楼主! 这个办法真不错 段码生成器也不麻烦 简单实用,不错 一直都是这么用的。 好主意,顶起 确实不错 好思路,学习了。 一般人我不告诉他,很早就这么用,最早发现好像是TI 或某个公司的例程里。 好思路,标记了 好方法,先做个记号 蛮好的,我之前只用的宏定义,楼主再用个数组,更好。 这个方法真心不错 好思路,标记了 日本人民搞个数码管或者是键盘中断都能搞一辈子 的确不错,以后用这方法
方法确实不错,又简单 很不错,收了。 好主意,学习了 #define Sega 0x01 #define Segb 0x02 #define Segc 0x40 #define Segd 0x20 #define Sege 0x10 #define Segf 0x04 #define Segg 0x08 帮楼主优化一下
#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}; 这个好用。 谢谢楼主提供新思路. 这个牛B,学习了 很好,很强大,收藏了.谢谢楼主提供新思路. 收藏,不过很少用数码管了 很好,很强大, 感谢 ! 不错,谢谢分享 66楼优化的不错,谢谢楼主分享。 bg6agf 发表于 2012-9-13 17:50
/*****************************************************************************/
#define _seg_c ...
估计喷你的人是觉得下划线看的眼花,太烦乱了,有说影响效率的吗? ywlzh 发表于 2016-6-4 19:06
估计喷你的人是觉得下划线看的眼花,太烦乱了,有说影响效率的吗?
这个一次定义。受用终身啊。这种宏定义不占用任何额外空间的。 bg6agf 发表于 2016-6-5 00:25
这个一次定义。受用终身啊。这种宏定义不占用任何额外空间的。
的确是的 这个定义不错啊,很好的资料 这个真不错,学习了。 学习记录下。 必须收藏!! 不错的注意,以后借鉴
页:
[1]