⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tt.asm

📁 基于51和VB的广告牌控制系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          UPSET  BIT  P1.2               ;上限标志位,未达到上限是低电平
          DECT   BIT  P1.3               ;每张的间隔检测标志位
          UP     BIT  P1.7               ;上升
          UDOWN  BIT  P1.1               ;下降
          DDOWN  BIT  P1.6               ;下降
          SJJG   EQU  20H                ;时间间隔存在20H
          JS     EQU  21H                ;显示当前滚动到第几张
          ZS     EQU  22H                ;广告总数量-1(最少2张最多256张)如果ZS为00则为256张
          ZS2    EQU  23H                ;存放PC发过来的张数
          GD     BIT  2AH.00             ;允许滚动标志位,0允许滚动,1禁止
          RS     BIT  2AH.01             ;复位标志位,RS=1则从头执行
;====================================AT24C02定义=======================================
          SDA    BIT  P3.6               ;本硬件电路AT2042的SDA接在P3.6
          SCL    BIT  P3.7               ;本硬件电路AT2042的SCL接在P3.7
          MTD    EQU  SJJG               ;要发送的数据存放空间的起始地址(这里都存在20H里)
          MRD    EQU  SJJG               ;接受过来的数据存放空间的起始地址(这里都存在20H里)
          SUBADR EQU  24H                ;读写AT2042内部空间的起始地址地址从00H开始
          NUMBYT EQU  25H                ;发送或接受的字节数这里只要2字节
          SLAR   DATA 0A1H               ;读命令,和AT2042硬件从地址
          SLAW   DATA 0A0H               ;写命令,和AT2042硬件从地址
;======================================================================================
          ORG     0000H
          LJMP    MAIN

          ORG     000BH
          LJMP    TIME0

          ORG     0023H
          LJMP    INT_SC


    MAIN: MOV    ZS,     #02             ;广告总数量-1,这里为3张
          MOV    ZS2,    #02             ;广告总数量-1,这里为3张
    LOOP: MOV    SP,     #5FH
          MOV    P1,     #0FFH
          MOV    DPTR,   #TAB            ;DPTR指向TAB表首地址
          MOV    JS,     #00
          CLR    GD                      ;默认允许滚动
          CLR    RS                      ;默认无复位标志
          MOV    SUBADR, #00H
          MOV    NUMBYT, #01             ;读取1字节
          LCALL  RDNBYT                  ;读AT24C02,读出时间间隔后是存在20H即SJJG
          MOV    A,      SJJG
          CLR    C
          CJNE   A,      #01H,    D0
      D0: JC     D2
          CJNE   A,      #99,     D1
      D1: JC     D3
      D2: MOV    SJJG,   #20             ;如果时间间隔不在01~99S之间就设置为20S
          MOV    SUBADR, #00H
          MOV    NUMBYT, #01
          LCALL  WRNBYT                  ;降修改后的SJJG写入AT24C02的00H地址
      D3: MOV    TMOD,   #21H
          MOV    SCON,   #50H
          MOV    PCON,   #80H
          MOV    TH1,    #0F3H
          MOV    TL1,    #0F3H
          MOV    TH0,    #0E2H           ;定时15ms
          MOV    TL0,    #0B4H
          SETB   EA
          SETB   ET0
          SETB   ES
          SETB   PS
          CLR    PT0
          SETB   TR0
          SETB   TR1
          LCALL  REST
          MOV    JS,     #01
          MOV    A,      #100
          ADD    A,      JS
          LCALL  FS_SC
          JB     GD,     $               ;判断是否允许滚动
          MOV    R7,     ZS
     LP1: LCALL  DELAY20
     LP3: JB     RS,     LP5             ;判断是否需要复位
          JB     GD,     LP3             ;判断是否允许滚动
          LCALL  UPING                   ;上升
          INC    JS
          MOV    A,      #100
          ADD    A,      JS
          LCALL  FS_SC
          DJNZ   R7,     LP1
          MOV    R7,     ZS
     LP2: LCALL  DELAY20
     LP4: JB     RS,     LP5            ;判断是否需要复位
          JB     GD,     LP4            ;判断是否允许滚动
          LCALL  DOWNING                ;下降
          DEC    JS
          MOV    A,      #100
          ADD    A,      JS
          LCALL  FS_SC
          DJNZ   R7,     LP2
          MOV    JS,     #01            ;一次循环完后复位计数器防止出错
          MOV    ZS,     ZS2            ;获取PC发送过来的张数
          MOV    R7,     ZS
          SJMP   LP1
     LP5: LJMP   LOOP
;=======================================上升子程序======================================
   UPING: SETB   UDOWN
          SETB   DDOWN
          CLR    UP                      ;上升
          LCALL  DELAYS                  ;延时一下在判断
     UP1: JB     DECT,   UP2
          SJMP   UP1
     UP2: LCALL  DELAY1
          JNB    DECT,   UP1
          SETB   UP                      ;停止
          SETB   UDOWN
          SETB   DDOWN
          RET
;=======================================下降子程序======================================
 DOWNING: SETB   UP
          CLR    UDOWN                   ;下降
          CLR    DDOWN
          LCALL  DELAYS                  ;延时一下在判断
     DW1: JB     DECT,   DW2
          SJMP   DW1
     DW2: LCALL  DELAY1
          JNB    DECT,   DW1
          SETB   UP                      ;停止
          SETB   UDOWN
          SETB   DDOWN
          RET
;=======================================复位子程序======================================
    REST: JB     UPSET,  RES1
          SETB   UP                      ;复位时一直往下降
          CLR    UDOWN
          CLR    DDOWN
          SJMP   REST
    RES1: LCALL  DELAY1                  ;稍微延时一下
          JNB    UPSET,  REST            ;在判断一次防干扰
          SETB   UP                      ;在升一点点后在停止
          SETB   DDOWN
          SETB   UDOWN
          RET
;====================================动态扫描显示=============================================
    DISP: MOV    A,      SJJG               ;前两个数码管是显示停留时间的
          MOV    B,      #10
          DIV    AB                           ;低2位转BCD
          MOV    40H,    B                  ;个位暂存40H
          MOV    41H,    A                  ;十位暂存41H
;===========
          MOVC   A,      @A+DPTR            ;查表
          MOV    P0,     A                  ;送到数码管显示
          MOV    P2,     #0FDH
          LCALL  DELAY0
          MOV    A,      B
          MOVC   A,      @A+DPTR            ;查表
          MOV    P0,     A                  ;送到数码管显示
          MOV    P2,     #0FEH
          LCALL  DELAY0
          MOV    A,      JS
          MOVC   A,      @A+DPTR            ;查表
          MOV    P0,     A                  ;送到数码管显示
          MOV    P2,     #0DFH
          RET
;=====================================按键处理子程序==================================
     KEY: MOV    P2,     #0BFH
          JB     P2.0,   K1
          INC    SJJG
          MOV    A,      SJJG
          CJNE   A,      #100,   S1
          MOV    SJJG,   #01
      S1: MOV    SUBADR, #00H
          MOV    NUMBYT, #01
          LCALL  WRNBYT                  ;降SJJG写入AT24C02的00H地址
          MOV    R5,     #20
    SLP0: LCALL  DISP                    ;延时,按键防抖动
          LCALL  DELAY0
          DJNZ   R5,     SLP0
      K1: JB     P2.1,   K2
          DEC    SJJG
          MOV    A,      SJJG
          CJNE   A,      #00,    S2
          MOV    SJJG,   #99
      S2: MOV    SUBADR, #00H
          MOV    NUMBYT, #01
          LCALL  WRNBYT                  ;降SJJG写入AT24C02的00H地址
          MOV    R5,     #20
    SLP1: LCALL  DISP                    ;延时,按键防抖动
          LCALL  DELAY0
          DJNZ   R5,     SLP1
      K2: RET

;=====================================5S延时子程序====================================
  DELAYS: MOV    5FH,    #20
    DLY0: MOV    5EH,    #250
    DLY1: MOV    5DH,    #250
          DJNZ   5DH,    $
          JB     RS,     RSS0
          DJNZ   5EH,    DLY1
          DJNZ   5FH,    DLY0
          RET
    RSS0: LJMP   LOOP
;===================================扫描显示延时====================================
  DELAY0: MOV    5AH,    #30
    DSLY: MOV    5BH,    #40
          DJNZ   5BH,    $
          DJNZ   5AH,    DSLY
          RET
;=====================================防干扰延时=====================================
  DELAY1: MOV    5FH,    #50
    DLY2: MOV    5EH,    #50
          DJNZ   5EH,    $
          DJNZ   5FH,    DLY2
          RET
;=====================================动态延时子程序==================================
 DELAY20: MOV    5FH,    SJJG          ;延时时间长度由SJJG存储器的值决定,单位1S
    DLY3: MOV    5EH,    #05
    DLY4: MOV    5DH,    #200
    DLY5: MOV    5CH,    #245
          DJNZ   5CH,    $
          JB     RS,     RSS1
          DJNZ   5DH,    DLY5
          DJNZ   5EH,    DLY4
          DJNZ   5FH,    DLY3
          RET
    RSS1: LJMP   LOOP
;==========================================串口发送==================================
   FS_SC: CLR    ES
          CLR    TI
          MOV    SBUF,   A
          JNB    TI,     $
          CLR    TI
          SETB   ES
          RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -