可控的花样流水灯

以前写过一个关于可控流水灯的博文,可见下面的链接:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/5adeb99112822680a877a415.html/

后来有许多网友留言,询问制作硬件电路的方法。

其实,上文中的电路,并不是实际的硬件电路,其中的数码显示器,是使用了 PROTEUS 中的仿真元件。
如果想要制作硬件电路,这个仿真的元件就必须更换为七段译码器芯片,选用 CD4511、74LS48 这些译码器都可以。

如果采用软件译码,也可以省掉译码芯片,这更体现了单片机的智能特点。

下面就是采用软件译码的可控流水灯的电路图: 可控的花样流水灯_第1张图片

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/5ae768514fc2d5620620cba1e71190ef77c66cb7.html

图中使用了共阴的数码管,这是应网友的要求来设计的,其实,采用共阳极的更好一些。

另外,在网友的电路板上,P3.0、P3.1 已经用于串口通信(STC单片机下载程序用),再当做按键输入端,也不适合了,所以,就把两个按键,挪到 P3.4、P3.5 上去了。

图中的元件参数都已经标注清楚,可以按照这些参数(允许在一定范围内变动)购置硬件,焊接电路板。

====================================================

电路进行了局部的改动,原博文中的程序,也要有相应的改动。

改好的程序如下:

    ORG  0000H
    JMP  START
    ORG  0003H
    JMP  X0_INT
    ORG  000BH
    JMP  T0_INT
    ORG  0013H
    JMP  X1_INT
;---------------------------------
START:
    MOV  TMOD, #51H       ;/*01010001 T1计数,T0定时*/
    MOV  TH0, #HIGH(65536 - 50000) ;50ms@12MHz
    MOV  TL0, #LOW (65536 - 50000)
    MOV  TH1, #0
    MOV  TL1, #0
    SETB TR0
    SETB TR1
    SETB IT0
    SETB IT1
    MOV  IE, #10000111B

    MOV  R7, #20
    MOV  30H, #20
    MOV  31H, #0
    MOV  32H, #0

    MOV  P2, #06H     ;显示1

    SJMP $
;---------------------------------
T0_INT:          ;50ms执行一次
    MOV  TL0, #LOW (65536 - 50000) ;重新写入初始值
    MOV  TH0, #HIGH(65536 - 50000) ;50ms@12MHz
;------------------
JIA:
    JB   P3.4, JIAN
    JNB  P3.4, $
    DEC  30H          ;加速
    MOV  A, 30H
    JNZ  XXX          ;不能让它为0
    INC  30H
XXX:
;------------------
JIAN:
    JB   P3.5, XIANSHI
    JNB  P3.5, $
    INC  30H
    MOV  A, 30H
    SUBB A, #80
    JC   CCC
    MOV  30H, #80
CCC:
;------------------
XIANSHI:
    DJNZ R7, T0_END
    MOV  R7, 30H
    INC  32H
    ANL  32H, #7
;------------------
    MOV  A, 31H
    ANL  A, #3
    RL   A
    RL   A
    RL   A
    ADD  A, 32H
    MOV  DPTR, #HUA_Y
    MOVC A, @A+DPTR
    CPL  A
    MOV  P1, A
;------------------
T0_END:
    RETI
;---------------------------------
X0_INT:          ;设置花型
    CALL DL10MS
    JB   P3.2, X0_END
    INC  31H
    ANL  31H, #3

    MOV  A, 31H
    MOV  DPTR, #TAB
    MOVC A, @A + DPTR
    MOV  P2, A
X0_END:
    RETI

TAB:DB   06H, 5BH, 4FH, 66H
;---------------------------------
X1_INT:          ;启动/停止
    CALL DL10MS
    JB   P3.3, X0_END
    CPL  TR0
X1_END:
    RETI
;---------------------------------
HUA_Y:
    DB  0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
    DB  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
    DB  0x81,0x42,0x24,0x18,0x81,0x42,0x24,0x18
    DB  0x18,0x24,0x42,0x81,0x18,0x24,0x42,0x81
;---------------------------------
DL10MS:
    MOV  R5, #10
    MOV  R6, #249
    DJNZ R6, $
    DJNZ R5, $ - 2
    RET
;---------------------------------
END

====================================================

大家可以和原文对照比较,看看都做了那些改动。

你可能感兴趣的:(流水灯)