找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4468|回复: 0
打印 上一主题 下一主题
收起左侧

单片机74LS164串入并出移位寄学习--时钟显示汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wudawei 于 2014-12-31 14:46 编辑

;====================================================================*
;51单片机入门程序18
;  工程名称:  串入并出移位寄学习--时钟显示程序                    *
;  功能描述:   时钟显示程序                                       *
;  (并行输出串行移位寄存器74LS164扩展输出口学习)                     *
;  硬件连接:针对配合AT89S51精简开发板(第三版本)使用               *
;  编写日期:2009.7.4
;  编写者:    蓝柳柳                                                 *
;                                         
;====================================================================*
SDA         BIT    P0.2     ; 定义数据线引脚定义
SCL         BIT    P0.3     ; 定义时钟线引脚定义
LED0    EQU     30H   ;定义显示码存储空间
LED1    EQU     31H
LED2    EQU     32H
LED3    EQU     33H
LED4    EQU     34H
LED5    EQU     35H
LED6    EQU     36H
LED7    EQU     37H
;---------------------------------------
ORG         0000H           ;主程序入口
AJMP        MAIN            ;跳转到主程序
ORG         0100H           ;主程序在ROM中存放位置
;===============主程序=====================
MAIN:   MOV  LED0,#00H    ;对定义的显示码存储空间付初值
        MOV  LED1,#00H
        MOV  LED2,#0FFH
        MOV  LED3,#00H
        MOV  LED4,#00H
        MOV  LED5,#0FFH
        MOV  LED6,#00H
        MOV  LED7,#00H
        ACALL    DISPLAY  ;调用显示程序
        ACALL    Delay_1s ;延时约一秒钟
NEXT:
        INC      LED0     ;LED0中的数值加一
        MOV      A,LED0
        CJNE     A,#10,NEXT0   ;判断LED0中的数值是否为10,如果不是则跳到NEXT0
        MOV      LED0,#00H     ;如果是则向下执行,将LED0中的内容清零
        INC      LED1         ;LED1中的数值加一
        MOV      A,LED1
        CJNE     A,#6,NEXT0 ;判断LED1中的数值是否为6,如果不是则跳到NEXT0
        MOV      LED1,#00H  ;如果是则向下执行,将LED1中的内容清零

        INC      LED3
        MOV      A,LED3
        CJNE     A,#10,NEXT0
        MOV      LED3,#00H
        INC      LED4
        MOV      A,LED4
        CJNE     A,#6,NEXT0
        MOV      LED4,#00H
        INC      LED6
        MOV      A,LED6
        CJNE     A,#10,NEXT0
        MOV      LED6,#00H
        INC      LED7
        MOV      A,LED7
        CJNE     A,#6,NEXT0
        MOV      LED7,#00H

        AJMP     MAIN
        RET
NEXT0:  ACALL    DISPLAY
        ACALL    Delay_1s
        AJMP     NEXT
        RET
;===================================================
; 子程序名: DISPLAY
; 功能描述: 将运算的数值都移位到数码管中显示
;===================================================
DISPLAY:
        MOV     DPTR,#TABLE
        MOV     A,LED0
        MOVC    A,@A+DPTR ;根据LED0中的数值取表中相应的数去显示
        ACALL   SHIFT
        MOV     A,LED1
        MOVC    A,@A+DPTR ;根据LED1中的数值取表中相应的数去显示
        ACALL   SHIFT
        MOV     A,LED2
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        MOV     A,LED3
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        MOV     A,LED4
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        MOV     A,LED5
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        MOV     A,LED6
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        MOV     A,LED7
        MOVC    A,@A+DPTR
        ACALL   SHIFT
        RET
;---------显示代码表---------
TABLE: DB    11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H   ;0,1,2,3,4,5,6,7,8,9,
       DB    50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH      ;10,11,12,13,14,15,灭,-
;===================================================
; 子程序名: SHIFT
; 功能描述: 移位程序,将8位数据依次移进74LS164芯片中
;===================================================
SHIFT:      PUSH  A              ; 进栈暂存A值
            MOV     R0,#8        ; 循环8次
            CLR     C            ;清进位标志
            CLR     SCL          ;时钟线,先钳位为0
LP2:        RLC     A
            MOV     SDA,C        ;向数据线送数据
            NOP
            NOP
            SETB    SCL          ;拉高时钟线
            NOP
            NOP
            CLR     SCL          ;拉低时钟线
            NOP
            NOP
            DJNZ    R0,LP2
            POP   A              ; 出栈恢复A值
            RET
;===================================================
; 子程序名: Delay_1s
; 功能描述: 延时约一秒钟
;===================================================
Delay_1s:   
            
         MOV   R1,#10
      D: MOV   R2,#200
      T: MOV   R3,#248
         DJNZ  R3,$
         DJNZ  R2,T
         DJNZ  R1,D
         RET        ;子程序返回指令,子程序的设计一般都是因为主程序要调用它,
               ;调用完是要返回到主程序继续运行下一个语句的     
         END

     
;补充说明:
;1.用外部中断0来编写程序时,硬件连接一定要考虑到单片机的第12引脚
;2.外部中断0和定时器/计数器0的中断入口地址分别是:0003H和000BH
;在应用到这两个内容时要在程序开始时标出
   
             希望各位的指导与赐教!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表