打印

显示代码怎么定义?我来秀一下

[复制链接]
3210|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
耕在此行|  楼主 | 2008-11-22 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
记得原来用汇编的时候:
    数码管要显示从0--F的16个数.
于是就定义一个字符表:
    display_table:
        db 81h,0e7h,92h,0c2h,0e4h ......
        ;  0   1     2   3    4   ...... 
这样定义,改一下板,得每个数重新去对.一般一次还不能完全成功.很麻烦.
后来用C,也沿用了这个办法.当然一样麻烦.
再后来,觉得C里面的宏定义大有**可作: 于是

#define        SEG_8A        BIT4
#define        SEG_8B        BIT5
#define        SEG_8C        BIT6
#define        SEG_8D        BIT3
#define        SEG_8E        BIT2
#define        SEG_8F        BIT0
#define        SEG_8G        BIT1

#define    WORD_0    (SEG_8A+SEG_8B+SEG_8C+SEG_8D+SEG_8E+SEG_8F)
#define    WORD_1    (SEG_8B+SEG_8C)
#define    WORD_2    (SEG_8A+SEG_8B+SEG_8D+SEG_8E+SEG_8G)
#define    WORD_3    (SEG_8A+SEG_8B+SEG_8C+SEG_8D+SEG_8G)
#define    WORD_4    (SEG_8B+SEG_8C+SEG_8F+SEG_8G)
#define    WORD_5    (SEG_8A+SEG_8C+SEG_8D+SEG_8F+SEG_8G)
      ...  ...    ....
code bin08    DISP_code[] = 
    {
    WORD_0,    WORD_1, WORD_2, WORD_3, ......
    };
如果是共阳数码管显示:
#define    WORD_0    ~(SEG_8A+SEG_8B+SEG_8C+SEG_8D+SEG_8E+SEG_8F)
#define    WORD_1    ~(SEG_8B+SEG_8C)
#define    WORD_2    ~(SEG_8A+SEG_8B+SEG_8D+SEG_8E+SEG_8G)
#define    WORD_3    ~(SEG_8A+SEG_8B+SEG_8C+SEG_8D+SEG_8G)
#define    WORD_4    ~(SEG_8B+SEG_8C+SEG_8F+SEG_8G)
#define    WORD_5    ~(SEG_8A+SEG_8C+SEG_8D+SEG_8F+SEG_8G)
      ...  ...    ....
如果要做成共阳与共阴通用,那就加条件编译进行选择就行.
按这种做法,硬件随你改,软件只要把前面的段定义改改就行了.
呵呵 这种做法有人用没,如果你觉得不错的话就顶顶.免得沉了.

相关帖子

沙发
耕在此行|  楼主 | 2008-11-22 20:24 | 只看该作者

呵呵 自己觉得不错

先顶下.

使用特权

评论回复
板凳
machunshui| | 2008-11-22 20:28 | 只看该作者

支持一下实干精神

支持一下实干精神

使用特权

评论回复
地板
耕在此行|  楼主 | 2008-11-22 20:47 | 只看该作者

呵呵 先谢谢一下

使用特权

评论回复
5
ayb_ice| | 2008-11-22 20:49 | 只看该作者

本来就应该这样定义

使用特权

评论回复
6
谈的元| | 2008-11-22 21:44 | 只看该作者

顶一下,与匠人书中的定义有同工之处

使用特权

评论回复
7
icmap| | 2008-11-22 21:55 | 只看该作者

汇编语言也可以这样定义。

使用特权

评论回复
8
耕在此行|  楼主 | 2008-11-22 21:57 | 只看该作者

汇编不可以吧

汇编可以吗

使用特权

评论回复
9
yezhenyu| | 2008-11-22 22:06 | 只看该作者

嗯说的不错,就该这样

还有就是算法很重要,尤其是C,写多了就会深有体会。

使用特权

评论回复
10
程序匠人| | 2008-11-22 23:47 | 只看该作者

显示代码表的建设,俺曾经经历了4个阶段

显示代码表的建设,俺曾经经历了4个阶段:

1、第一个阶段,就是像大多数初学者一样,直接计算直接写。每次项目都要计算代码,好麻烦的说。

2、第二个阶段,就是在网上找到个小工具,可以计算每个字符的代码。不过,程序里还是要自己一个一个地填进去。还是麻烦。

3、第三个阶段,就是自己用EXCEL建立表格,每次只需要输入少量的信息,即可生成代码表,然后复制到程序中即可。不过,还是不方便。

4、第四个阶段,就是发现了楼主后面介绍的这种方法。成功地应用在C和汇编中,以后每次只要简单地定义一下每个段所在的位置就好了。终于找到了终极方法。


——由此可见,技术进步,是由“懒人”推动的。如果不是为了偷懒,我们肯定会停留在第一阶段,不思进取。

使用特权

评论回复
11
古道热肠| | 2008-11-23 09:53 | 只看该作者

哈哈,新技术大多是由需求来推动的.

使用特权

评论回复
12
耕在此行|  楼主 | 2008-11-23 14:01 | 只看该作者

呵呵 高手原来也这么做过

我原来也用过EXCEL 呵呵 不过没有用到匠人这么聪明
现在有时还会用到EXCEL,一般用来算一些公式什么的,
也做数据统计,感觉很好.

使用特权

评论回复
13
香如故| | 2008-11-24 11:43 | 只看该作者

很值得学习

使用特权

评论回复
14
耕在此行|  楼主 | 2008-11-24 15:43 | 只看该作者

呵呵

其实是很值得偷懒.

使用特权

评论回复
15
s46410864| | 2008-11-24 15:49 | 只看该作者

顶顶!

用汇编也可以如此定义..

使用特权

评论回复
16
耕在此行|  楼主 | 2008-11-24 16:19 | 只看该作者

第二次听说汇编也可以这样定义了

不知哪位能写下.
我现在还不知道怎么写.
每次汇编都得去算.

使用特权

评论回复
17
xhtxzxw| | 2008-11-24 16:30 | 只看该作者

嘿嘿

可以推而广之的.
大多数情况下,我们检测/控制执行部件时,使用的是"位"信息(大量的开关量输入/输出),而MCU传统上"操纵"信息时,是面向"字节/字"的(虽然在某些MCU中引入了所谓的"位"处理指令),所以,必须用合适的方式将"位"与"字节/字"联系起来.

曾经接手过某项目的改造,原来是用80X86MCU+外围器件实现的,要改成用某款ARM7实现.
原代码中,所有的开关量(32入/16出)的引用方式竟然全部是:"(变量名>>多少多少位)&0x01",恐怖啊!费了整两天时间,才把对应的定义作好,修正过来.

使用特权

评论回复
18
icmap| | 2008-11-24 20:07 | 只看该作者

用汇编语言定义 7 段 LED 数码管

;用汇编语言定义 7 段 LED 数码管
;在万利 WedWin 3.0 下编译通过。

nSeg1DP equ 80h
nSeg1C  equ 40h
nSeg1G  equ 20h
nSeg1B  equ 10h
nSeg1D  equ 08h
nSeg1E  equ 04h
nSeg1F  equ 02h
nSeg1A  equ 01h

nShow1_0    equ nSeg1A or nSeg1B or nSeg1C or nSeg1D or nSeg1E or nSeg1F
nShow1_1    equ nSeg1B or nSeg1C
nShow1_2    equ nSeg1A or nSeg1B or nSeg1D or nSeg1E or nSeg1G
nShow1_3    equ nSeg1A or nSeg1B or nSeg1C or nSeg1D or nSeg1G
nShow1_4    equ nSeg1B or nSeg1C or nSeg1F or nSeg1G
nShow1_5    equ nSeg1A or nSeg1C or nSeg1D or nSeg1F or nSeg1G
nShow1_6    equ nSeg1A or nSeg1C or nSeg1D or nSeg1E or nSeg1F or nSeg1G
nShow1_7    equ nSeg1A or nSeg1B or nSeg1C
nShow1_8    equ nSeg1A or nSeg1B or nSeg1C or nSeg1D or nSeg1E or nSeg1F or nSeg1G
nShow1_9    equ nSeg1A or nSeg1B or nSeg1C or nSeg1D or nSeg1F or nSeg1G
nShow1_Bar  equ nSeg1G
nShow1_P    equ nSeg1A or nSeg1B or nSeg1E or nSeg1F or nSeg1G
nShow1_U    equ nSeg1B or nSeg1C or nSeg1D or nSeg1E or nSeg1F
nShow1_F    equ nSeg1A or nSeg1E or nSeg1F or nSeg1G
nShow1_E    equ nSeg1A or nSeg1D or nSeg1E or nSeg1F or nSeg1G
nShow1_None equ 0

tLCD0:
    db  nShow1_0,nShow1_1,nShow1_2,nShow1_3
    db  nShow1_4,nShow1_5,nShow1_6,nShow1_7
    db  nShow1_8,nShow1_9
    db  nShow1_Bar
    db  nShow1_P
    db  nShow1_U
    db  nShow1_F
    db  nShow1_E
    db  nShow1_None

使用特权

评论回复
19
耕在此行|  楼主 | 2008-11-24 20:43 | 只看该作者

如果是共阳的呢

汇编可以直接取反吗?

使用特权

评论回复
20
a5566255| | 2008-11-24 21:27 | 只看该作者

顶并MARK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

1108

帖子

0

粉丝