分享

74LS164 和 4094 的典型应用

 抱团的小喵咪 2014-05-12

使用MCS-51单片机的同步串口功能,利用三片8位并行输出串行移位寄存器74LS164,实现000到999的循环显示,每隔100ms将显示数字加一。
悬赏分:20 - 解决时间:2009-10-22 17:35
;----------------------------------------------------------------
最佳答案:
;利用50H、51H和52H,作为计数单元,每隔100ms加一次一
;每当加一后,将三位数从串行口输出,程序如下:
;---------------------------------------------------
    ORG  0000H
    SJMP  MAIN
    ORG  0030H
MAIN:
    MOV  SCON, #0         ;设置串行口工作在方式0
    MOV  50H, #0          ;个位清零
    MOV  51H, #0          ;十位清零
    MOV  52H, #0          ;百位清零
;---------------------------------------------------
DL_LOOP:
    CALL DL_100MS         ;按照要求延时
    MOV  A, 50H
    ADD  A, #1
    MOV  50H, A
    CJNE A, #10, XIAN_SHI ;在这里控制进位制
    MOV  50H, #0
    MOV  A, 51H
    ADD  A, #1
    MOV  51H, A
    CJNE A, #10, XIAN_SHI
    MOV  51H, #0
    MOV  A, 52H
    ADD  A, #1
    MOV  52H, A
    CJNE A, #10, XIAN_SHI
    MOV  52H, #0
;---------------------------------------------------
XIAN_SHI:
    MOV  DPTR, #SEGPT
    MOV  A, 50H           ;先串行输出个位
    MOVC A, @A+DPTR
    MOV  SBUF, A
    JNB  TI, $            ;等待输出结束
    CLR  TI
    MOV  A, 51H           ;串行输出十位
    MOVC A, @A+DPTR
    MOV  SBUF, A
    JNB  TI, $
    CLR  TI
    MOV  A, 52H           ;串行输出百位
    MOVC A, @A+DPTR
    MOV  SBUF, A
    JNB  TI, $
    CLR  TI
    LJMP DL_LOOP          ;反复循环
;---------------------------------------------------
DL_100MS:         ;这里的数字,可以自行调整,控制延时时间
    MOV R3, #10
D1: MOV R4, #200
D2: MOV R5, #248
    DJNZ R5, $
    DJNZ R4, D2
    DJNZ R3, D1
    RET
;---------------------------------------------------
SEGPT:
    DB 0C0H, 0F9H, 0A4H, 0B0H ;0、1、2、3
    DB  99H,  92H,  82H, 0F8H ;4、5、6、7
    DB  80H,  90H,  88H,  83H ;8、9、A、B
    DB 0C6H, 0A1H,  86H,  8EH ;C、D、E、F
END
;---------------------------------------------------
上述程序,已经在PROTEUS软件中仿真调试通过。
截屏画面如下:



图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/d9f6def4edd22675bd31093a.html#
;---------------------------------------------------
回答者: 做而论道 - 八级   2009-10-22 17:27
提问者对于答案的评价:谢谢
原文网址:http://zhidao.baidu.com/question/122465370.html
;==================================================================
下面是另外一个问题,是用串行移位寄存器4094芯片驱动数码管的

各位高手,首先我不是伸手派,的确花了很长时间来想这个程序。
买了一块89C52的单片机板子,用了4个4094串联来驱动显示4位数码管。
但是4094上的str接的是P3.2口(INT0口),D口接P3.3(INT1口),clk接P3.4口(T0口)。
一般我看书,不是用D接RXD口,CLK接TXD口嘛。如果按照这个板子的接法,CLK口还能做时钟电路吗?
我觉得不能吧,所以想问问看各位,比如我想从A中送数据去显示到数码管上,我该怎么编这个程序的。
悬赏分:80 - 解决时间:2010-1-1 20:30
;------------------------------------------------
最佳答案:
4094和74LS164功能是基本相同的,都是“串入并出”的移位寄存器,但是它们的引脚排列是不同的。
它们如果接在单片机的串行口上,就可以使用串行口的方式0来输出数据,一般的书上,就是这么介绍的。
楼主的4094没有接在串行口,也可以使用位操作指令,使用并行口来模拟串行口,达到向“串入并出寄存器”输入数据的目的。
发送ACC的内容到4094的子程序如下:
;------------------------------------------------
SEND_ACC:
    MOV  R2, #8
S_LOOP:
    RRC  A          ;A中的最低位移动到C
    MOV  P3.3, C    ;移动到D口
    NOP
    CLR  P3.4       ;P3.4(CLK)输出一个脉冲
    NOP
    NOP
    SETB P3.4
    DJNZ R2, S_LOOP
    CLR  P3.2
    NOP
    SETB P3.2       ;P3.2(STR)输出一个脉冲
    RET
;完
;------------------------------------------------
回答者:   做而论道 - 十一级   2009-12-16 23:46
原文网址:http://zhidao.baidu.com/question/129631211.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多