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

📄 zidongsj.txt

📁 可以实现自动升降旗系统功能的汇编源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
A8255        EQU        0FF7CH                  ;A口位选码  0/1/2/3键盘扫描 
B8255   EQU        0FF7DH                         ;B口段位码 
C8255   EQU        0FF7EH                         ;C口输入    0/1/2/3键盘扫描 
D8255   EQU        0FF7FH                  ;控制口 
JIANZHI        EQU        21H                        ;GETKEY获得的键值存储空间 
SAOM1        EQU        22H                        ;扫描1 
SAOM2        EQU        23H                        ;扫描2 
BIJIAO  EQU        24H                     ;判断当前位置与设定值得大小 
TOP        BIT        00H                     ;是否上升到顶端 
BOTTOM        BIT        01H                     ;是否下降到底端 
UPING   BIT        02H                     ;上升状态 
DOWNING        BIT        03H                     ;下降状态 

MTD        EQU     77H                        ;C51中发往24C02数据存储单元首址(用于存储24C02内存储单元首址) 
                                        ;不论往24C02写数据还是读数据都应该先向24C02写入一个24C02内存储单元首址的字节 
MRD        EQU        78H                        ;C51中接收24C02数据存储单元首址 
NUMBYT        EQU        70H                        ;读写24C02字节个数 
SLA        EQU        10H                        ;24C02中读写存储单元首址 
CUNZUS        EQU        33H                        ;存储组数 
SLAW    EQU     0A0H                        ;24C02写地址 
SLAR    EQU     0A1H                        ;24C02读地址 
VSDA    EQU         P1.6                        ;串行传输数据线 
VSCL    EQU         P1.7                         ;串行传输时钟线 
                                        ;78h,79h,7ah实时显示国旗位置 
                                        ;7dh,7eh,7fh显示输入的要到达的位置 

    ORG     0000H 
    AJMP    MAIN 
        ORG         000BH 
        LJMP        INTT0 
        ORG        0013H 
        LJMP        INTEX1       ;外部中断1,负脉冲时计圈数 
         
         

MAIN:   MOV     SP,#60H   
        MOV        A,#89H 
    MOV     DPTR,#D8255 
        MOVX        @DPTR,A 
        ;LCALL        DIS8SHAN 
        LCALL        CLEARMEN 
        MOV     MTD,#10H         
        LCALL   RDE2PROM 

        MOV        43H,78H 
        MOV        42H,79H 
        MOV        41H,7AH 

WAIT:   LCALL        GETKEY 
        MOV        A,JIANZHI 
        CJNE        A,#0AH,KEYB 
        JB      TOP,WAIT 
        LCALL        UP                               ; 调上升子程序 
        SJMP        WAIT 
KEYB:   CJNE        A,#0BH,KEYC 
        JB        BOTTOM,WAIT 
        LCALL   DOWN                             ;调下降子程序  
        SJMP        WAIT 
KEYC:   CJNE        A,#0CH,KEYD 
        LCALL   BANQI                             ;调半旗程序  
        SJMP        WAIT 
KEYD:   CJNE    A,#0DH,KEYF 
           LCALL        AUTO                                ;调自动程序 
        SJMP        WAIT                        
KEYF:        CJNE        A,#0FH,WAIT                       ;F键复位 
        AJMP        MAIN         
         
CLEARMEN:MOV        A,#00H 
        MOV        20H,A 
        MOV        21H,A 
        MOV        22H,A 
        MOV        23H,A 
        MOV        24H,A 
        MOV        25H,A 
        MOV        26H,A 
        MOV        27H,A 
        MOV        28H,A 
        MOV     40H,#00H 
        MOV        41H,#00H 
        MOV        42H,#00H 
        MOV        43H,#00H 
        MOV        60H,#00H 
        MOV        61H,#00H 
        MOV        62H,#00H 

        MOV        7BH,#12H 
        MOV        7CH,#12H 
        MOV        7DH,#12H 
        MOV        7EH,#12H         
        MOV        7FH,#12H 

        MOV TH0,#0D8H 
        MOV TL0,#0EFH 
        MOV TMOD,#01H 
        SETB        ET0 

        SETB        EX1 
        SETB        IT1 
             SETB        EA         
        RET 
;----------------------------- 
;     上升子程序 
;----------------------------- 
UP:                 
        SETB        UPING                ;上升过程 
ULOP:   LCALL        ZTIAO 
;        CLR        P1.1 
;        LCALL        DIS 
        LCALL        MUSIC 
        MOV        A,78H 
        CJNE        A,#00H,ULOP 
        MOV        A,79H 
        CJNE        A,#07H,ULOP 
        MOV        A,7AH 
        CJNE        A,#05H,ULOP 
        SETB        TOP;上升到最高点,置标志位 
        CLR        BOTTOM 
        CLR        UPING 
        CLR     DOWNING 
        SETB        P1.1                ;反向制动 
        CLR        P1.0                 
        LCALL        DL1         
        ;SETB        P1.1 
        SETB    P1.0 
        RET 
;------------------------ 
; 下降子程序 
;------------------------ 
DOWN:         
         
        SETB        DOWNING                ;下降过程 
        MOV        P1,#0FFH 
DLOP:        CLR        P1.0 
        LCALL        DIS 
        MOV        A,78H 
        CJNE        A,#00H,DLOP 
        MOV        A,79H 
        CJNE        A,#00H,DLOP 
        MOV        A,7AH 
        CJNE        A,#00H,DLOP 
        SETB        BOTTOM                ;到最低点,置标志位 
        CLR        TOP 
        CLR        DOWNING         
        CLR        UPING 
        SETB        P1.0                ;反向制动 
        CLR        P1.1 
        LCALL        DL1 
        MOV        P1,#0FFH        ;停止 
        RET 
;---------------------- 
;       半旗子程序 
;---------------------- 
BANQI:        CLR        P1.3 
        LCALL        GETKEY 
        MOV        A,JIANZHI 
        CJNE        A,#0AH,BQLOPD         
        LCALL        UP 
        SETB        DOWNING                ;下降过程         
BDLOP:        CLR        P1.0 
        LCALL        DIS 
        MOV        A,78H 
        CJNE        A,#00H,BDLOP 
        MOV        A,79H 
        CJNE        A,#00H,BDLOP 
        MOV        A,7AH 
        CJNE        A,#06H,BDLOP 
        SETB        BOTTOM                ;到最低点,置标志位 
        CLR        DOWNING 
        CLR        UPING 
        SETB        P1.0                ;反向制动 
        CLR        P1.1 
        LCALL        DL1 
        MOV        P1,#0FFH 
        SJMP        BANQI 

BQLOPD:        CJNE        A,#0BH,BANQI 
        SETB        UPING                ;上升过程 
BULOP:        CLR        P1.1 
        LCALL        DIS 
        MOV        A,78H 
        CJNE        A,#00H,BULOP 
        MOV        A,79H 
        CJNE        A,#01H,BULOP 
        MOV        A,7AH 
        CJNE        A,#00H,BULOP         
        SETB        TOP                ;上升到最高点,置标志位 
        CLR        BOTTOM 
        CLR        UPING 
        CLR     DOWNING 
        SETB        P1.1                ;反向制动 
        CLR        P1.0                 
        LCALL        DL1         
        MOV        P1,#0FFH        ;停止 
        LCALL        DOWN 
        RET 
;-------------------------------- 
;自动子程序 
;-------------------------------- 
AUTO:        LCALL        GETKEY 
        MOV        7DH,JIANZHI 
        LCALL        GETKEY 
        MOV        7EH,JIANZHI 
        LCALL        GETKEY 
        MOV        7FH,JIANZHI 
        LCALL        GETKEY 
        MOV        A,JIANZHI 
        CJNE        A,#0EH,BACK 
        LCALL        CMP 
        LCALL   DIS 
        MOV        A,26H 
        CJNE    A,#01H,EXT0 
        LCALL   ZHENG 
        JMP     EXT2 
EXT0:        CJNE        A,#02H,EXT2 
        LCALL   FAN 
        JMP     EXT2 
EXT2:        MOV     P1,#0FFH 
        RET 

BACK:        MOV        7DH,#00H 
        MOV        7EH,#00H 
        MOV        7FH,#00H 
        JMP        AUTO 
        RET 

CMP:        MOV        A,78H 
        SUBB        A,7DH 
        JC        QEXT 
        MOV        A,78H 
        CJNE        A,7DH,NEXT1 

        MOV        A,79H 
        SUBB        A,7EH 
        JC        QEXT 
        MOV        A,79H 
        CJNE        A,7EH,NEXT1 

        MOV        A,7AH 
        SUBB        A,7FH 
        JC        QEXT 
        MOV        A,7AH 
        CJNE        A,7FH,NEXT1 

        MOV        26H,#00H 
        SJMP        QE 
QEXT:        MOV        26H,#01H 
        SJMP        QE 
NEXT1:        MOV        26H,#02H 
QE:        RET         

ZHENG:        SETB        UPING                ;上升过程 
UOP:        CLR        P1.1 
        LCALL        DIS 
        MOV        A,78H 
        CJNE        A,7DH,UOP 
        MOV        A,79H 
        CJNE        A,7EH,UOP 
        MOV        A,7AH 
        CJNE        A,7FH,UOP 
        SETB        TOP;上升到最高点,置标志位 
        CLR        BOTTOM 
        CLR        UPING 
        CLR     DOWNING 
        SETB        P1.1                ;反向制动 
        CLR        P1.0                 
        LCALL        DL1         
        MOV        P1,#0FFH        ;停止         
        RET 

FAN:        SETB        DOWNING                ;下降过程 
        MOV        P1,#0FFH 
DOP:        CLR        P1.0 
        LCALL        DIS 
        MOV        A,78H 
        CJNE        A,7DH,DOP 
        MOV        A,79H 
        CJNE        A,7EH,DOP 
        MOV        A,7AH 
        CJNE        A,7FH,DOP 
        SETB        BOTTOM                ;到最低点,置标志位 
        CLR        TOP 
        CLR        DOWNING         
        CLR        UPING 
        SETB        P1.0                ;反向制动 
        CLR        P1.1 
        LCALL        DL1 
        MOV        P1,#0FFH        ;停止 
        RET         
         

TINGZHI:SETB        P1.1 
        SETB        P1.0 
        LCALL        DELAY 
        RET 


;------------------------------ 
;外部中断1,将高度存在78-7AH中 
;------------------------------ 
INTEX1:        PUSH        ACC 
        PUSH        PSW 
        CLR        EX1 
        INC        40H 
LLLU:        MOV        A,40H 
        CJNE        A,#01H,LLL      ;数脉冲,满1厘米 
        MOV        40H,#00H 
         
        JNB        UPING,LLLD 
        INC        41H 
        MOV        A,41H 
        CJNE        A,#0AH,LLL 
        MOV        41H,#00H 
        INC        42H 
        MOV        A,42H 
        CJNE        A,#0AH,LLL 
        MOV        42H,#00H 
        INC        43H 
        MOV        A,43H 
        CJNE        A,#0AH,LLL 
        MOV        43H,#00H 

LLLD:        JNB         DOWNING,LLL 
        DEC        41H 
        MOV        A,41H 
        CJNE        A,#0FFH,LLL 
        MOV        41H,#09H 
        DEC        42H 
        MOV        A,42H 
        CJNE        A,#0FFH,LLL 
        MOV        42H,#09H 
        DEC        43H 
        MOV        A,43H 
        CJNE        A,#0FFH,LLL 
        MOV        41H,#00H        ;减至负数,赋0 
        MOV        42H,#00H 
        MOV        43H,#00H 
LLL:        MOV        7AH,41H 
        MOV        79H,42H 
        MOV        78H,43H 
        SETB        EX1 
        POP        PSW 
        POP        ACC 
        RETI 
        NOP 
        NOP 
        NOP 


INTT0:        INC         25H ;中断服务,中断计数器加1 
        MOV         TH0,#0D8H 
        MOV         TL0,#0EFH ;12M晶振,形成10毫秒中断 
        RETI 
;------------------------------------------------------------------------- 
GETKEY:                                        ;最终键值存在21H(JIANZHI)中(0---F)                           
        MOV        A,#89H 
        MOV     DPTR,#D8255 
        MOVX        @DPTR,A 
        MOV     SAOM1,#016H 
YX1:    MOV     SAOM2,#04FH 
KEY1:   ACALL   KS1                        ;扫描有无键按下 
        JNZ     LK2                        ;有转LK2 
;--------------------------------------- 
        ACALL   DIS                        ;调显示程序 
;--------------------------------------- 
        DJNZ    SAOM2,KEY1                ;SM2(23H)为控制扫描次数 
        DJNZ    SAOM1,YX1                        ;SM1(22H)为控制扫描次数 
        SJMP    KEY1                        ;无键始终扫描 
;---------------------------------------         
LK2:        MOV        R2,#0FEH                ;有键行扫描 
        MOV        R7,#00H 
LK4:    MOV     DPTR,#A8255                ;A口地址 
        MOV        A,R2 
        MOVX        @DPTR,A 
        MOV     DPTR,#C8255                ;C口地址 
        MOVX        A,@DPTR                        ;读C口 
            JB        ACC.0,LONE                ;不是A.0转移 
        MOV        A,#00H 
         AJMP        LKP 
LONE:        JB        ACC.1,LTWO                ;不是A.1转移 
        MOV        A,#01H 
        AJMP        LKP 
LTWO:        JB        ACC.2,LTHR                ;不是A.2转移 
        MOV        A,#02H 
               AJMP        LKP 
LTHR:        JB        ACC.3,NEXT                ;不是A.3转移 
        MOV        A,#03H 
LKP:        ADD        A,R7 
        PUSH        ACC 
;--------------------------------------- 
LK3:        ACALL        DIS                        ;是否还按键/是一直调显示程序 
        ACALL   KS1 
        JNZ        LK3 
;--------------------------------------- 
        POP        ACC 
        MOV        R0,#JIANZHI                ;键值存在JIANZHI(21H)中 
        MOV     @R0,A 
        RET 

NEXT:        INC        R7 

⌨️ 快捷键说明

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