找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1799|回復(fù): 1
收起左側(cè)

求sst89e516rd制作6位數(shù)碼管硬件仿真匯編程序

[復(fù)制鏈接]
ID:260841 發(fā)表于 2018-3-9 13:16 | 顯示全部樓層 |閱讀模式
求助一下程序,現(xiàn)在在做這個硬件仿真,
回復(fù)

使用道具 舉報

ID:260841 發(fā)表于 2018-4-3 20:27 | 顯示全部樓層
           STRT  EQU  P0.4                ; 定義 (等價代換)        第一列
       SEC   EQU P0.5                   ;矩陣鍵盤接口處
       MIN   EQU P0.6
       HOUR  EQU P0.7                //第4列

           CL EQU  P2.6          ;蜂鳴器
       ORG 0000H
       SJMP MAIN
       ORG 000BH       ;TO溢出時的  定時器 T0中斷程序入口地址
       AJMP T0INT0     ;TO溢,跳到T0INT0       
       ORG 0050H


MAIN: CLR  P0.0                        ;鍵盤的第一行有效
      MOV  P2,#0FFH    ; 初值                   11111111         給所有的位選端置零
      MOV R4,#20
                 ;計20次 后面中斷進(jìn)位                 
      MOV TMOD,#01H   ; TO為模式1   //向TMOD寄存器寫入立即數(shù)01h。
      MOV TH0,#03CH   //表示對定時器T0賦初值低八位
      MOV TL0,#0B0H
          SETB TR0        ;      開啟TO  定時/計數(shù)器0開始運行 TR0是單片機(jī)會響應(yīng)定時/計數(shù)器0的啟動位   與下面不同 這個是開啟  下面這個是允許
      SETB ET0         ;T0中斷允許控制位位 開定時器中斷0
      SETB EA         ;開中斷         開總中斷
   
  MOV 30H,#00H     ; 清零30H-32H地址單元:
  MOV 31H,#00H
  MOV 32H,#00H                ;時分秒的儲存單元






KS:  LCALL DISP        ;作用:無任何按鍵,動態(tài)顯示
     JB    SEC, KM   ;檢查 秒鍵 按否?當(dāng)sec等于1就去執(zhí)行KM,否則往下執(zhí)行
KSS: LCALL DISP
     LCALL   DALY2        ;顯示
     JNB   SEC,KSS    ;$當(dāng)前地址,產(chǎn)生中斷
     AJMP  SINC        ;松  秒鍵    (秒+1)

KM: LCALL DISP
    JB MIN,KH          ;分調(diào)整按鍵(按,不管)
KMM:LCALL DISP
        LCALL  DALY2
    JNB MIN,KMM
    AJMP MINC          ;(分+1)

KH: LCALL DISP
    JB HOUR,K1         ;時調(diào)整按鍵 (按,不跳)
KHH:LCALL DISP
        LCALL  DALY2
    JNB HOUR,KHH
    AJMP HINC         ;(時+1)

SINC: LCALL  DISP  //秒
      LCALL  CLO
          LCALL  DISP
      INC 30H            ;秒調(diào)整   30H單元的數(shù)據(jù)+1
      MOV A,30H        
      CJNE A,#60,SINC0   ;A=60時,不管 ,   否則跳
      MOV 30H,#0         ;A=60   30H單元的數(shù)據(jù)清零   60/10=6.0   (6與0)    59/10=(5與9)
SINC0:AJMP KS  //A的值跟60不同就回去再掃

MINC: LCALL  DISP   //分
      LCALL  CLO
          LCALL  DISP
      INC 31H           ;31H單元的數(shù)據(jù)+1
      MOV A,31H
      CJNE A,#60,MINC0
MOV 31H,#0
MINC0: AJMP KM          ;返回"主跳"

HINC: LCALL  DISP  //時
      LCALL  CLO
          LCALL  DISP
      INC   32H      
      MOV A,32H
CJNE A,#24,HINC0
MOV 32H,#0
HINC0:AJMP KH  

k1: LCALL DISP
    JB STRT,KS    ;檢查開始鍵
K11:LCALL DISP
        LCALL  DALY2
    JNB STRT,K11  //當(dāng)strt等于0時就跳k11
    AJMP START        

START:LCALL  DISP
      LCALL  CLO
          LCALL  DISP
      CPL TR0                       ;////入口開始.將TR0位給取反。以來實現(xiàn)一個暫停
      AJMP K1

DISP:  MOV A,30H   //單元中的數(shù)據(jù)/10,分離個位與十位     將地址為30H的寄存器內(nèi)的數(shù)據(jù)送入A,結(jié)果A=由該寄存器內(nèi)所存的實際數(shù)值決定。
       MOV B,#10
       DIV AB     ;  ;A除B,商存入A,余存入B
       MOV 40H,B   ;余數(shù)(秒個位數(shù))
       MOV 41H,A   ;商(秒十位數(shù))

       MOV A,31H        //分
       MOV B,#10
       DIV AB          // ;A除B,商存入A,余存入B
       MOV 42H,B   ;余數(shù)(分個位數(shù))
       MOV 43H,A   ;商(分十位數(shù))
     
          MOV A,32H          //時
      MOV B,#10
       DIV AB
       MOV 44H,B   ;余數(shù)(時個位數(shù))
       MOV 45H,A   ;商(時十位數(shù))

  ////////時間在數(shù)碼管顯示//////////
     MOV A,40H   ;秒個位
     ACALL SEG7
     MOV P1,A
     CLR P2.5
     ACALL DLY
     SETB P2.5

      MOV A,41H   ;秒十位
      ACALL SEG7
      MOV P1,A
     CLR P2.4
         ACALL DLY
         SETB P2.4

MOV A,42H   ;分個位
ACALL SEG7
MOV P1,A
CLR P2.3
ACALL DLY
SETB P2.3

MOV A,43H   ;分十位
ACALL SEG7
MOV P1,A
CLR P2.2
ACALL DLY
SETB P2.2

MOV A,44H   ;時個位
ACALL SEG7
MOV P1,A
CLR P2.1
ACALL DLY
SETB P2.1

MOV A,45H  ;時十位
ACALL SEG7
MOV P1,A
CLR P2.0
ACALL DLY
SETB P2.0
RET




T0INT0:PUSH ACC
        PUSH PSW
        CLR TR0                                         ;暫停定時器T0
        MOV A,#0B5H            ;  ; 10110101
        ADD A,TL0                          ;         低八位初值修正
    MOV TH0,#03CH         ; 00111100                  ;定時中斷子程序。重裝定時常數(shù)
        MOV TL0,A                       ;   重裝初值(低8位修正值)
        SETB TR0                                ;開啟定時器T0
        DJNZ R4,T0INTR          ;  ;R4減1,不為0短跳轉(zhuǎn)TOINTR
        MOV R4,#20
    INC 30H                 ;1S,秒存儲單元內(nèi)數(shù)+1
    MOV A,30H  
        CJNE A,#60,T0INTR        ;未滿60S,跳出中斷。
    MOV 30H,#0              ;滿60S,秒單元清零
    INC 31H                 ;分+1
    MOV A,31H
    CJNE A,#60,T0INTR   ;未滿60分,跳出中斷。
    MOV 31H,#0     ;滿60分,分單元清零
    INC 32H   ;時+1
    MOV A,32H
    CJNE A,#24,T0INTR   ;未滿24,跳出中斷。
    MOV 32H,#0   ;滿24時,時單元清零
T0INTR:        POP PSW
            POP ACC
        RETI



CLO:  CLR CL                                           ;P2.6蜂鳴器         CL0是蜂鳴器子程序
      LCALL  DALY1
          SETB   CL
      RET

DALY1:   ;誤差 0us
          MOV R6,#0D7H          //0.215毫秒

DALY2:   ;誤差 0us
         MOV R6,#01H        //        消抖

DL0:
    MOV R5,#2FH
    DJNZ R5,$
    DJNZ R6,DL0
    RET

DLY:    MOV R7,#2
D1:     MOV R6,#40
        DJNZ R6,$
        DJNZ R7,D1
        RET


DL3:
    MOV R5,#2DH
    DJNZ R5,$
    DJNZ R6,DL3
    NOP
    NOP
    RET

SEG7:   INC A              ; A加1        結(jié)果存在A
        MOVC A,@A+PC                        //查表取值送入A
        RETI                    ; 中斷返回

        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H         //0-9的表格
                END



這是矩陣鍵盤加數(shù)碼管顯示
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表