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

📄 clock_lcd1.lst

📁 使用51些列单片机实现秒表计数功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  CLOCK_LCD1                                                           08/17/2006 16:39:47 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;/********************************************************************
                       2     ; *  主    页 :  HTTP://WWW.QLMCU.COM
                       3     ; *
                       4     ; *  程序功能 :  液晶显示的秒表
                       5     ; *
                       6     ; *  应用软件 :  KEIL C
                       7     ; *
                       8     ; *  版    本 :  KEIL 7.06
                       9     ; *
                      10     ; *  硬    件 :  WS803、WS804、WS806、WS2511、WS2566、WS9600、WS9700
                      11     ; *
                      12     ; *  整理时间 :  2006-03-11
                      13     ; *
                      14     ; *  程序整理 :  pingdan11
                      15     ; *
                      16     ; *  注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
                      17     ; *      在此谢谢这些无私奉献的朋友!!!
                      18     ; *
                      19     ; ********************************************************************/
                      20      
                      21     
                      22     
                      23     
                      24     
                      25     
                      26     
                      27     
  000C                28               TLOW   EQU  0CH     ;定时器初值
  00DC                29               THIGH  EQU  0DCH
                      30     
  0030                31               HOUR   EQU  30H
  0031                32               MIN    EQU  31H
  0032                33               SEC    EQU  32H
  0033                34               SEC0   EQU  33H     ;10ms计数值
  0034                35               KEY_S  EQU  34H     ;为键当前的端口状况
  0035                36               KEY_V  EQU  35H     ;为键上次的端口状况
  0036                37               X      EQU  36H     ;LCD 地址变量
  0037                38               KEY_C  EQU  37H     ;键计数单元
                      39     
  00A0                40               K1     EQU  P2.0
  00A1                41               K2     EQU  P2.1
  00A2                42               K3     EQU  P2.2
  00A3                43               K4     EQU  P2.3
                      44     
  00B2                45               BEEP  EQU  P3.2
  00A5                46               RS    EQU  P2.5     ;LCD控制端口定义
  00A6                47               RW    EQU  P2.6
  00A7                48               EN    EQU  P2.7
                      49     
                      50     ;----------------------------------------------------
0000                  51               ORG   0000H
0000 800B             52               JMP  START
000B                  53               ORG  0BH
000B 01CD             54               JMP  T0_INT
                      55     ;----------------------------------------------------
000D 758160           56     START:    MOV  SP,#60H
0010 C2A7             57               CLR  EN
0012 3159             58               CALL  SET_LCD
A51 MACRO ASSEMBLER  CLOCK_LCD1                                                           08/17/2006 16:39:47 PAGE     2

0014 11AC             59               CALL  INIT            ;初始化变量
0016 753501           60               MOV  KEY_V,#01H
0019 11C0             61               CALL  INIT_TIMER      ;初始化定时器
001B 5179             62               CALL  MENU
001D 3124             63     LOOP:     CALL   CONV           ;时间计数处理
001F 1132             64               CALL LOOP1
0021 117D             65               CALL  SKEY            ;判是否有键按下
0023 60F8             66               JZ  LOOP              ;无键按下转LOOP
0025 3124             67               CALL   CONV
0027 117D             68               CALL  SKEY
0029 60F2             69               JZ  LOOP
002B 853435           70               MOV  KEY_V,KEY_S      ;交换数据
002E 113A             71               CALL  P_KEY
0030 80EB             72               JMP  LOOP
                      73     ;-----------------------------------------------------
0032 20A304           74     LOOP1:    JB  K4,LOOP2         ;判清零键是否按下
0035 5111             75               CALL  BZ
0037 80D4             76               JMP  START
0039 22               77     LOOP2:    RET
                      78     ;-----------------------------------------------------
003A                  79     P_KEY:                          ;
003A E535             80               MOV  A,KEY_V
003C 20E02F           81               JB  ACC.0,P_KEY3
003F 0537             82               INC  KEY_C
0041 E537             83               MOV  A,KEY_C          ;K3键是否第一次按下?
0043 B4010A           84               CJNE  A,#01H,P_KEY1
0046 900235           85               MOV    DPTR,#MADJ    ;显示执行信息
0049 7401             86               MOV    A,#1          ;
004B 318E             87               CALL   LCD_PRINT
004D D28C             88               SETB  TR0            ;启动中断
004F 22               89               RET
0050                  90     P_KEY1:                          ;K3键是否第二次按下?
0050 E537             91               MOV   A,KEY_C
0052 B4020A           92               CJNE  A,#02H,P_KEY2
0055 900246           93               MOV   DPTR,#MADJ1      ;显示执行信息
0058 7401             94               MOV   A,#1
005A 318E             95               CALL  LCD_PRINT
005C C28C             96               CLR   TR0              ;停止中断
005E 22               97               RET
005F                  98     P_KEY2:                          ;K3键是否第三次按下?
005F E537             99               MOV   A,KEY_C
0061 B4030A          100               CJNE  A,#03H,P_KEY3
0064 900257          101               MOV   DPTR,#MADJ2      ;显示执行信息
0067 7401            102               MOV   A,#1
0069 318E            103               CALL  LCD_PRINT
006B D28C            104               SETB   TR0             ;启动中断
006D 22              105               RET
006E                 106     P_KEY3:                          ;K3键是否第四次按下?
006E E537            107               MOV   A,KEY_C
0070 B40409          108               CJNE  A,#04H,P_KEY4
0073 900268          109               MOV   DPTR,#MADJ3      ;显示执行信息
0076 7401            110               MOV   A,#1
0078 318E            111               CALL  LCD_PRINT
007A C28C            112               CLR   TR0              ;启动中断
007C 22              113     P_KEY4:   RET
                     114     ;-------------------------------------------------------
007D E4              115     SKEY:     CLR  A                ;判是否有键按下子程序
007E F534            116               MOV  KEY_S,A
0080 A2A2            117               MOV  C,K3
0082 33              118               RLC  A
0083 4234            119               ORL  KEY_S,A
0085 E534            120               MOV  A,KEY_S
0087 6535            121               XRL  A,KEY_V          ;有键按下,A 中内容不为零
0089 22              122               RET
                     123     ;--------------------------------------------------------
008A 20202020        124     LMESS1:  DB  "                ",0  ;LCD 第一行显示消息
A51 MACRO ASSEMBLER  CLOCK_LCD1                                                           08/17/2006 16:39:47 PAGE     3

008E 20202020                
0092 20202020                
0096 20202020                
009A 00                      
009B 54494D45        125     LMESS2:  DB  "TIME            ",0  ;LCD 第二行显示消息
009F 20202020                
00A3 20202020                
00A7 20202020                
00AB 00                      
                     126     ;--------------------------------------------------------
00AC E4              127     INIT:    CLR  A
00AD F537            128              MOV  KEY_C,A         ;初始化控制变量
00AF F533            129              MOV  SEC0,A
00B1 F532            130              MOV  SEC,A
00B3 F531            131              MOV  MIN,A
00B5 F530            132              MOV  HOUR,A
00B7 F534            133              MOV  KEY_S,A
00B9 F535            134              MOV  KEY_V,A
00BB D2B2            135              SETB  BEEP
00BD C28C            136              CLR  TR0
00BF 22              137              RET
                     138     ;------------------------------------------------------------
00C0                 139     INIT_TIMER:                     ;初始化定时器接口
00C0 758901          140              MOV  TMOD,#01H         ;设置定时器0 工作模式为模式1
00C3 75A882          141              MOV  IE,  #82H         ;启用定时器0 中断产生
00C6 758A0C          142              MOV  TL0,#TLOW
00C9 758CDC          143              MOV  TH0,#THIGH
00CC 22              144              RET
                     145     ;-------------------------------------------------------------
00CD                 146     T0_INT:
00CD C0E0            147              PUSH  ACC           ;定时器0计时中断程序
00CF 758A0C          148              MOV  TL0,#TLOW
00D2 758CDC          149              MOV  TH0,#THIGH
00D5 0533            150              INC  SEC0
00D7 E533            151              MOV  A,SEC0         ;10ms 计数值加1
00D9 B4642A          152              CJNE  A,#100,TT
00DC 753300          153              MOV  SEC0,#0
00DF 0532            154              INC  SEC            ;秒加1
00E1 E532            155              MOV  A,SEC
00E3 B43C20          156              CJNE  A,#60,TT
00E6 0531            157              INC  MIN            ;分加1
00E8 753200          158              MOV  SEC,#0
00EB E531            159              MOV  A,MIN
00ED B43C16          160              CJNE  A,#60,TT
00F0 0530            161              INC  HOUR           ;时加1
00F2 753100          162              MOV  MIN,#0
00F5 E530            163              MOV  A,HOUR
00F7 B4180C          164              CJNE  A,#24,TT
00FA 753300          165              MOV  SEC0,#0
00FD 753200          166              MOV  SEC,#0          ;秒、分、时单元清0
0100 753100          167              MOV  MIN,#0
0103 753000          168              MOV  HOUR,#0
0106 D0E0            169     TT:     POP  ACC
0108 32              170              RETI
                     171     ;-------------------------------------------------------
                     172     ;   在第二行显示数字
                     173     ;-------------------------------------------------------
0109                 174     SHOW_DIG2:                    ;在 LCD 的第二行显示数字
0109 75F00A          175               MOV  B,#10         ;设置被除数
010C 84              176               DIV  AB            ;结果A存商数,B存余数
010D 2430            177               ADD  A,#30H        ;A为十位数,转换为字符
010F C0F0            178               PUSH  B            ;B放入堆栈暂存
0111 8536F0          179               MOV  B,X           ;设置 LCD 显示的位置
0114 31F0            180               CALL  LCDP2        ;由 LCD 显示出来
0116 D0F0            181               POP  B             ;
0118 E5F0            182               MOV  A,B           ;B为个位数
A51 MACRO ASSEMBLER  CLOCK_LCD1                                                           08/17/2006 16:39:47 PAGE     4

011A 2430            183               ADD  A,#30H        ;转换为字符
011C 0536            184               INC  X             ;LCD 显示位置加1
011E 8536F0          185               MOV  B,X           ;设置 LCD 显示的位置
0121 31F0            186               CALL  LCDP2        ;由 LCD 显示出来
0123 22              187               RET
                     188     ;-------------------------------------------
                     189     ;转换为 ASCII 码并显示
                     190     ;-------------------------------------------
0124                 191     CONV:
0124 E530            192               MOV  A,HOUR        ;加载小时数据
0126 753605          193               MOV  X,#5          ;设置位置
0129 3109            194               CALL  SHOW_DIG2    ;显示数据
012B 0536            195               INC  X             ;
012D 743A            196               MOV  A,#':'        ;
012F 8536F0          197               MOV  B,X           ;
0132 31F0            198               CALL  LCDP2        ;
0134 E531            199               MOV  A,MIN         ;加载分钟数据
0136 0536            200               INC  X             ;设置位置
0138 3109            201               CALL  SHOW_DIG2    ;显示数据
013A 0536            202               INC  X             ;
013C 743A            203               MOV  A,#':'        ;
013E 8536F0          204               MOV  B,X           ;
0141 31F0            205               CALL  LCDP2        ;
0143 E532            206               MOV  A,SEC         ;加载秒数数据
0145 0536            207               INC  X             ;设置位置
0147 3109            208               CALL  SHOW_DIG2    ;显示数据
0149 0536            209               INC  X             ;
014B 743A            210               MOV  A,#':'        ;
014D 8536F0          211               MOV  B,X           ;
0150 31F0            212               CALL  LCDP2        ;
0152 E533            213               MOV  A,SEC0        ;加载秒数数据
0154 0536            214               INC  X             ;设置位置
0156 3109            215               CALL  SHOW_DIG2
0158 22              216               RET
                     217     ;---------------------------------------------------------
                     218     ;  LCD  CONTROL
                     219     ;---------------------------------------------------------
0159                 220     SET_LCD:                     ;对 LCD 做初始化设置及测试
0159 C2A7            221               CLR  EN
015B 31CC            222               CALL  INIT_LCD     ;初始化 LCD
015D 7D0A            223               MOV  R5,#10
015F 31FD            224               CALL  DELAY
0161 90008A          225               MOV  DPTR,#LMESS1  ;指针指到显示消息1
0164 7401            226               MOV  A,#1          ;显示在第一行
0166 318E            227               CALL  LCD_PRINT
0168 90009B          228               MOV  DPTR,#LMESS2  ;指针指到显示消息2
016B 7402            229               MOV  A,#2          ;显示在第二行
016D 318E            230               CALL  LCD_PRINT
016F 22              231               RET
                     232     ;----------------------------------------------------------
0170                 233     INIT_LCD1:                   ;LCD 控制指令初始化
0170 7438            234               MOV  A,#38H        ;双列显示,字形5*7点阵
0172 31E4            235               CALL  WCOM         ;
0174 5108            236               call  delay1

⌨️ 快捷键说明

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