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

📄 key_led.lst

📁 做了个流水灯程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  KEY_LED                                                              12/17/2007 17:27:03 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN KEY_LED.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KEY_LED.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;**********************  程序说明  **************************
                       2     ;按键K1,K2为独立式键盘,K1对应P3.2,K2对应P3.3
                       3     ;K1模式选择键,其对应的模式有:
                       4     ;LED_DISPLAY1:  LED逐个左移点亮
                       5     ;LED_DISPLAY2:  LED逐个右移点亮
                       6     ;LED_DISPLAY3:  LED流水灯左移
                       7     ;LED_DISPLAY4:  LED流水灯右移
                       8     ;K2显示时间选择键,其对应的时间间隔有:
                       9     ;0.5S
                      10     ;1.0S
                      11     ;1.5S
                      12     ;2.0S
                      13     ;***********************************************************
  0008                14     S2      EQU     08H
  0004                15     S1      EQU     04H
                      16     ;===========================================================
  0023                17     KEY_TIM         EQU     35      ;按键次数
  0030                18     DISP_REG0       EQU     30H     ;
  0031                19     DISP_REG1       EQU     31H     ;
  0032                20     DISP_REG2       EQU     32H     ;
  0033                21     DISP_REG3       EQU     33H     ;
                      22     
  0034                23     LED_STATE       EQU     34H     ;LED显示状态变量
                      24     
  0035                25     LED_TIME_SEL    EQU     35H     ;LED显示状态变化时间选择变量
                      26     ;LED_TIME_SEL=1         LED的刷新时间为0.5S
                      27     ;LED_TIME_SEL=2         LED的刷新时间为1S
                      28     ;LED_TIME_SEL=3         LED的刷新时间为1.5S
                      29     ;LED_TIME_SEL=4         LED的刷新时间为2.0S
                      30     
  0036                31     LED_MODE_SEL    EQU     36H     ;LED显示模式选择变量
                      32     ;LED_MODE_SEL=1         LED的显示方式为拉屏显示,即LED_DISPLAY1
                      33     ;LED_MODE_SEL=2         LED的显示方式为正向流水灯,即LED_DISPLAY2
                      34     ;LED_MODE_SEL=3         LED的显示方式为反向流水灯,即LED_DISPLAY3
                      35     ;LED_MODE_SEL=4         LED的显示方式为反向流水灯,即LED_DISPLAY4
                      36     
  0037                37     KEY_VALUE       EQU     37H     ;键盘键值寄存器
  0038                38     KEY_PUSH_COU    EQU     38H     ;键盘被按下的次数,即按键码时间=10ms*次数
  0039                39     KEY_STATE       EQU     39H     ;键盘状态寄存器
  0042                40     DISP_REG        EQU     42H     ;LED显示寄存器
  0044                41     KEY_GET_REG     EQU     44H     ;取键值状态寄存器
  0045                42     TIME_COU        EQU     45H     ;时间初值寄存器
  0046                43     TIME_CHUZHI     EQU     46H
  0000                44     TIME_FLAG       BIT     00H     ;定时时标位,设定时间到置1
  0004                45     T10MSFLAG       BIT     04H     ;10mS的定时时标位
  0007                46     KEY_LED_flag    BIT     07h     ;按键与显示状态标志位 KEY为0,LED为1
  0008                47     KEYSUCCFLAG     BIT     08H     ;按键成功标志位         
  0080                48     P0_0            BIT     80H     ;
                      49     ;***************************************************************
0000                  50             ORG     0000H
0000 020100           51             LJMP    START
000B                  52             ORG     000BH
000B 020264           53             LJMP    TIMER0
                      54     ;
0100                  55             ORG     0100H
0100 758160           56     START:  MOV     SP,#60H
0103 754632           57             MOV     TIME_CHUZHI,#50 ;初始化  10mS*50=0.5S ;MOV 30H,#10
0106 753401           58             MOV     LED_STATE,#01   ;初始化 LED显示状态变量 
A51 MACRO ASSEMBLER  KEY_LED                                                              12/17/2007 17:27:03 PAGE     2

0109 753501           59             MOV     LED_TIME_SEL,#1 ;初始化 LED显示时间选择变量     
010C 753601           60             MOV     LED_MODE_SEL,#1 ;初始化 LED显示模式选择变量
010F 753800           61             MOV     KEY_PUSH_COU,#00H       ;初始化 按键次数寄存器
0112 753900           62             MOV     KEY_STATE,#00H  ;初始化 按键状态寄存器
0115 754500           63             MOV     TIME_COU,#00H 
0118 7542FE           64             MOV     DISP_REG,#0FEH  ;初始化 LED显示寄存器
011B 754400           65             MOV     KEY_GET_REG,#00H        ;初始化 取键值状态寄存器
011E C204             66             CLR     T10MSflag
0120 C208             67             CLR     KEYSUCCflag
0122 D207             68             SETB    KEY_LED_flag    ;初始化,设为LED显示状态
0124 753000           69             MOV     DISP_REG0,#00H  ;显示方式0函数的数据指针
0127 753101           70             MOV     DISP_REG1,#01H  ;显示方式1函数的数据指针
012A 753202           71             MOV     DISP_REG2,#02H  ;显示方式2函数的数据指针
012D 753303           72             MOV     DISP_REG3,#03H  ;显示方式3函数的数据指针
                      73             
0130 758CD8           74             MOV     TH0,#0D8H       ;设计数初值,定时时间为10mS
0133 758AF0           75             MOV     TL0,#0F0H
                      76     
0136 758901           77             MOV     TMOD,#01H       ;定时器0工作于方式2,为16位的定时器
0139 D2A9             78             SETB    ET0
013B D28C             79             SETB    TR0
013D D2AF             80             SETB    EA
                      81     
                      82     ;
013F                  83     MAIN_LOOP:                      ;主程序入口
013F 300405           84             JNB     T10MSflag,MAIN_NEXT2    ;10MS调一下键盘扫描
0142 C204             85             CLR     T10MSflag               ;清10MS时标标志位
0144 1201C9           86             LCALL   KEYSCAN
                      87     ;
0147                  88     MAIN_NEXT2:
0147 300805           89             JNB     KEYSUCCFLAG,MAIN_NEXT3
014A C208             90             CLR     KEYSUCCFLAG
014C 1201A5           91             LCALL   KEY_CHECK
014F                  92     MAIN_NEXT3:
014F 3000ED           93             JNB     TIME_FLAG,MAIN_LOOP
0152 C200             94             CLR     TIME_FLAG
0154 12016A           95             LCALL   DISLED_MODE_SEL
0157 02013F           96             LJMP    MAIN_LOOP
                      97     ;主程式序循环扫描
015A FEFCF8F0         98     DISP_TABLE1:    DB      0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
015E E0C08000                
0162 0080C0E0         99     DISP_TABLE2:    DB      000H,080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FFH
0166 F0F8FCFF                
                     100     ;
016A                 101     DISLED_MODE_SEL:
016A E536            102             MOV     A,LED_MODE_SEL
016C B40008          103             CJNE    A,#00H,DIS_00
016F E530            104             MOV     A,DISP_REG0
0171 23              105             RL      A
0172 F530            106             MOV     DISP_REG0,A
0174 F590            107             MOV     P1,A
                     108     
0176 22              109             RET
                     110     ;
0177 B40108          111     DIS_00:CJNE     A,#01H,DIS_01
017A E531            112             MOV     A,DISP_REG1
017C 03              113             RR      A
017D F531            114             MOV     DISP_REG1,A
017F F590            115             MOV     P1,A
0181 22              116             RET
                     117     ;
0182 B40213          118     DIS_01: CJNE    A,#02H,DIS_02
0185 E532            119             MOV     A,DISP_REG2
0187 90015A          120             MOV     DPTR,#DISP_TABLE1
018A 93              121             MOVC    A,@A+DPTR
018B F590            122             MOV     P1,A
A51 MACRO ASSEMBLER  KEY_LED                                                              12/17/2007 17:27:03 PAGE     3

018D 0532            123             INC     DISP_REG2
018F E532            124             MOV     A,DISP_REG2
0191 B40803          125             CJNE    A,#08H,DIS_001
0194 753200          126             MOV     DISP_REG2,#00H
0197                 127     DIS_001:
0197 22              128             RET
                     129     ;
0198 B40305          130     DIS_02: CJNE    A,#03H,DIS_RR
019B E533            131             MOV     A,DISP_REG3
019D 13              132             RRC     A
019E F590            133             MOV     P1,A
01A0 22              134     DIS_RR: RET
                     135     ;
01A1 326496C8        136     TIME_TABLE:DB   50,100,150,200
01A5                 137     KEY_CHECK:
01A5 E537            138             MOV     A,KEY_VALUE
01A7 B40811          139             CJNE    A,#S2,KEY_C0
01AA 0535            140             INC     LED_TIME_SEL
01AC B40403          141             CJNE    A,#04H,KEY_C1
01AF 753500          142             MOV     LED_TIME_SEL,#00H
                     143     ;
01B2 E535            144     KEY_C1: MOV     A,LED_TIME_SEL
01B4 9001A1          145             MOV     DPTR,#TIME_TABLE
01B7 93              146             MOVC    A,@A+DPTR
01B8 F546            147             MOV     TIME_CHUZHI,A
01BA 22              148             RET     
                     149     ;
01BB B4040A          150     KEY_C0: CJNE    A,#S1,KEY_C2
01BE 0536            151             INC     LED_MODE_SEL
01C0 E536            152             MOV     A,LED_MODE_SEL
01C2 B40403          153             CJNE    A,#04H,KEY_C2
01C5 753600          154             MOV     LED_MODE_SEL,#00H
01C8 22              155     KEY_C2: RET
                     156     ;***************************************************************
                     157     ;独立键盘处理程序
                     158     ;K1从P3.2输入  K2从P3.3输入
                     159     ;K1为模式选择键,K2为方式选择键
                     160     ;***************************************************************
01C9                 161     KEYSCAN:
01C9 43B00C          162             ORL     P3,#0CH
01CC E5B0            163             MOV     A,P3
01CE 540C            164             ANL     A,#0CH
01D0 F5F0            165             MOV     B,A
01D2 B40C04          166             CJNE    A,#0CH,KEY_00;          ;没有键按下直接退出
01D5 753900          167             MOV     KEY_STATE,#00H
01D8 22              168             RET
                     169     ;
01D9 E539            170     KEY_00: MOV     A,KEY_STATE
01DB B40008          171             CJNE    A,#00H,KEY_01
01DE E5F0            172             MOV     A,B
01E0 F537            173             MOV     KEY_VALUE,A
01E2 753901          174             MOV     KEY_STATE,#01H
01E5 22              175             RET
                     176     ;
01E6 B4010D          177     KEY_01: CJNE    A,#01H,KEY_03
01E9 E5F0            178             MOV     A,B
01EB B53704          179             CJNE    A,KEY_VALUE,KEY_02

⌨️ 快捷键说明

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