鱼C论坛

 找回密码
 立即注册
查看: 1419|回复: 0

求把他弄成hex可执行文件

[复制链接]
发表于 2014-10-18 17:35:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
;系统初始化程序****************************************************
ORG     0000H
                AJMP    MAIN    ;转到系统初始化程序
                ORG     000BH
                AJMP    PITO    ;转到定时器0中断服务程序
                ORG     0100H
          MAIN: MOV     SP,     #60H  ;确立堆栈区
                MOV     TMOD,   #01H  ;设定定时器0为工作方式1
                MOV     TL0,    #0DCH  ;装计数器初值
                MOV     TH0,    #0BH
                CLR     21H.0
                CLR     TR0H    ;TR0置“0”,定时关闭
                SETB    EAH     ;EA置“1”,中断总允许
         SETB    ET0H              ;ET0置“1”,定时器0中断
                                    允许
                MOV     30H,    #10H  ;循环次数
                MOV     7EH,    #0AH  ;P.点显示初始化
                MOV     R0,     #79H
                MOV     R1,     #05H
            PP: MOV     @R0,    #0BH
                INC     R0
                DJNZ    R1,     PP
                MOV     R0,     #31H  ;时、分、秒值存储单元清零
                MOV     R1,     #06H
           Q00: MOV     @R0,    #00H
                INC     R0
                DJNZ    R1,     Q00
;监控程序**********************************************************        
LOOP: LCALL   DIR     ;调显示子程序
                LCALL   KEY     ;调键扫描子程序
         LOOP1: JB      20H.0,  KEYA   ;A键是否按下,是跳转到A键功能程序
                JB      20H.1,  KEYB   ;B键是否按下,是跳转到B键功能程序
                JB      20H.2,  KEYC   ;C键是否按下,是跳转到C键功能程序
JB      20H.3,  KEYD   ;D键是否按下,是跳转到D键功能程序
                LCALL   DIR     
                LJMP    LOOP    ;跳转到监控程序
;A键功能子程序****************************************************
          KEYA: CPL     TR0H              ;开启/关闭定时器
                SETB    21H.0
                AJMP    LOOP      ;返回
;B键功能子程序****************************************************
          KEYB: JB      TR0H,    KEYBO    ;定时器是否运行,是跳转
                JNB     21H.0,  KEYBOO
                MOV     R0,     #36H   ;时值存储单元地址送R0
                LCALL   DAAD1     ;调加1子程序
                MOV     A,      R3    ;时值加1后的值送累加器A
                XRL     A,      #24H                 
JNZ     KEYBO     ;时值是否到24时,否返回
                LCALL   CLR0     ;时值存储单元清零
         KEYBO: MOV     7DH,    35H
                MOV     7EH,    36H
        KEYBOO: LJMP    LOOP     ;返回监控程序
;C键功能子程序****************************************************
          KEYC: JB      8CH,    KEYCO   ;定时器是否运行,否跳转
                JNB     21H.0,  KEYCOO
                MOV     R0,     #34H   ;分值存储单元地址送R0
                LCALL   DAAD1     ;调加1子程序
                MOV     A,      R3    ;分值加1后的值送累加器A
                XRL     A,      #60H
                JNZ     KEYCO     ;分值是否到60分,否返回
                LCALL   CLR0     ;分值存储单元清零
         KEYCO: MOV     7CH,    34H
                MOV     7BH,    33H
        KEYCOO: LJMP    LOOP     ;返回监控程序
;D键功能子程序****************************************************
          KEYD: JB      8CH,    KEYDO     ;定时器是否运行,否跳转
                JNB     21H.0,  KEYDOO
                MOV     R0,     #32H    ;秒值存储单元地址送R0
                LCALL   DAAD1      ;调加1子程序
                MOV     A,      R3        ;秒值加1后的值送R0
                XRL     A,      #60H
                JNZ     KEYDO    ;秒值是否到60秒,否返回
                LCALL   CLR0    ;秒值存储单元清0
         KEYDO: MOV     79H,    31H
                MOV     7AH,    32H
        KEYDOO: LJMP    LOOP    ;返回监控程序
;中断服务程序******************************************************
          PITO: PUSH     PSW    ;中断服务程序,现场保护            
                PUSH     A
                SETB     RS0    ;选第三组通用寄存器
                SETB     RS1
                MOV       TL0,   #0DCH  ;计数器重新加载
                MOV       TH0,   #0BH
                MOV       A,     30H  ;循环次数减1
                DEC       A
                MOV       30H,   A
                JNZ       RETO    ;不满16次,转RET0返回
                MOV       30H,   #10H  ;满16次开始计时操作
                MOV       R0,    #32H  ;秒显示单元地址
                ACALL     DAAD1    ;秒加1
                MOV       A,      R3  ;加1后秒值在R3中
                XRL       A,      #60H  ;判是否到60秒
                JNZ       RETO    ;不到转RET0返回
                ACALL     CLR0    ;到60秒显示单元清0
                MOV       R0,     #34H  ;分显示单元地址
                ACALL     DAAD1    ;分加1
                MOV       A,      R3  ;加1后分值在R3中
                XRL       A,      #60H  ;判是否到60分
                JNZ       RETO    ;不到转RET0返回
                ACALL     CLR0    ;到60分显示单元清0
                MOV       R0,    #36H  ;时显示单元地址
                ACALL     DAAD1    ;时加1
                MOV       A,     R3  ;加1后时值在R3中
                XRL       A,     #24H  ;判是否到24时
                JNZ       RETO    ;不到转RET0返回
                ACALL     CLR0    ;到24时显示单元清0
          RETO: CLR       RS0    ;返回第0组通用寄存器
                CLR       RS1
                POP       A     ;现场恢复
                POP       PSW
      MOV       79H,   31H  ;时、分、秒值放缓冲区
                MOV       7AH,   32H
                MOV       7BH,   33H
                MOV       7CH,   34H
                MOV       7DH,   35H
                MOV       7EH,   36H
                RETI        ;中断返回
;加1子程序*******************************************************
         DAAD1: MOV       A,     @R0      ;加1子程序,十位送A
                DEC       R0
                SWAP      A     ;十位数占高4位
                ORL       A,     @R0  ;个位数占低4位
                ADD       A,     #01H  ;加1
                DA        A     ;十进制调整
                MOV       R3,    A   ;全值暂存R3中
                ANL       A,     #0FH  ;屏蔽十位数,取出个位数
                MOV       @R0,   A   ;个位值送显示缓冲单元
                MOV       A,     R3
                INC       R0
                ANL       A,     #0F0H  ;屏蔽个位数取出十位数
                SWAP      A     ;使十位数占低四位
                MOV       @R0,   A   ;十位数送缓冲单元
                RET       ;返回
          CLR0: CLR      A     ;清缓冲单元子程序
                MOV      @R0,    A   ;十位缓冲单元清“0”
                DEC      R0
                MOV      @R0,    A   ;个位数缓冲单元清“0”
                RET       ;返回
         
;键盘扫描子程序***************************************************
           KEY: LCALL   KEYCHULI   ;调键值处理子程序
                JZ      EXIT    ;没有键按下转到返回
                LCALL   DIR
                LCALL   DIR     ;调显示去抖动
                LCALL   KEYCHULI   ;调键值处理子程序
                JZ      EXIT    ;没有键按下转到返回
                MOV     B,      20H  ;保存键值
         KEYSF: LCALL   KEYCHULI   ;调键值处理子程序
                JZ      KEY1    ;键释放,转到恢复键值
                LCALL   DIR     ;调显示子程序延时
                AJMP    KEYSF    ;等到键释放
          KEY1: MOV     20H,    B   ;键值送20H单元保存
          EXIT: RET       ;返回
      KEYCHULI: PUSH    PSW     ;保护现场
                CLR     RS1     ;改变寄存器组号
                SETB    RS0
                MOV     P1,     #0FFH  ;先向P1口写1
                MOV     A,      P1   ;P1口值送累加器A
                CPL     A     ;A值取反
                ANL     A,      #0FH  ;保存P1口的低4位
                MOV     20H,    A   ;A值送20H保存
                CLR     RS1     ;改变寄存器组号
                CLR     RS0
                POP     PSW     ;恢复现场
                RET
;显示子程序********************************************************
           DIR: PUSH    PSW                ;恢复现场
                SETB    RS1      ;改变寄存器组号
                CLR     RS0
                MOV     R0,     #79H  ;建立显示缓冲区首地址
                MOV     R3,     #0FBH  ;设置位控码
           LD0: MOV     P2,     R3   ;送位控码
                MOV     A,      @R0  ;缓冲区值送累加器A
         DISP1: ADD     A,      #1BH
                MOVC    A,      @A+PC  ;取段控码并送A中
         DISP2: MOV     P0,     A   ;送段控码
                MOV     R2,     #09H  ;设置延时循环次数
                ACALL   DEY     ;延时点亮
                INC     R0     ;缓冲区地址加1
                MOV     A,      R3   ;位控码送A
                JNB     ACC.1,  HERE  ;是否到最高位,是转到返回
                JB  ACC.5,  LD2
RL    A
RL      A     ;不到向显示器高位移位
            LD2:RL    A
MOV     R3,     A   ;位控值保存到R4中
                AJMP    LD0     ;继续扫描
          HERE: CLR     RS0     ;改变寄存器组号
                CLR     RS1
                POP     PSW     ;恢复现场
                RET       ;返回
           DBB: DB      0C0H
                DB      0F9H
                DB      0A4H
                DB      0B0H
                DB      99H
                DB      92H
                DB      82H
                DB      0F8H
                DB      80H
                DB      90H
                DB      0CH
                DB      0FFH
      
;延时子程序********************************************************
DEY:  PUSH    12H
DEY0:  PUSH    12H
DEY1:  PUSH    12H
DEY2:  DJNZ    R2,    DEY2
POP     12H
DJNZ    R2,    DEY1
POP     12H
DJNZ    R2,    DEY0
POP     12H
DJNZ     R2,   DEY
RET
END





联系qq1527895421

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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