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

📄 lcd2401.lst

📁 51单片机开发入门与典型实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  LCD2401                                                              01/05/2007 14:53:27 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;-------------------------------
                       2     ;文件名称:LCD2401.ASM
                       3     ;程序功能:秒表
                       4     ;-------------------------------
                       5     ; 定义计时单元地址
  0030                 6         HOUR   EQU  30H          ;存放小时变量
  0031                 7         MIN    EQU  31H          ;存放分钟变量
  0032                 8         SEC    EQU  32H          ;存放秒钟变量
  0033                 9         DEDA   EQU  33H          ;存放10ms计数值     
                      10      ;―――――――――――――――
                      11      ; 按键端口状况值
  0034                12         K1_N   EQU  34H          ;存放按键当前端口状况值
  0035                13         K1_P   EQU  35H          ;存放按键上次端口状况值
  0037                14         K1_C   EQU  37H          ;存放按键计数单元      
  0036                15         X      EQU  36H          ;LCD 地址变量                 
                      16      ;―――――――――――――――
                      17      ; 按键引脚定义
  00B3                18         K1     EQU  P3.3         ;按键1引脚定义
  00B4                19         K2     EQU  P3.4         ;按键2引脚定义
                      20      ; 喇叭引脚
  00A4                21         SPK   EQU  P2.4                      ;
                      22      ;―――――――――――――――    
                      23      ;LCD 引脚定义
  00B5                24         RS     EQU  P3.5         ;LCD RS引脚定义
  00B6                25         RW     EQU  P3.6         ;LCD RW引脚定义
  00B7                26         E      EQU  P3.7         ;LCD RS引脚定义        
                      27      ;―――――――――――――――
0000                  28        ORG   0000H               ;程序由地址0开始执行
0000 800B             29        JMP   MAIN
000B                  30        ORG   0BH                 ;定时器0中断地址设置
000B 803E             31        JMP   T0_INT
                      32      ;――――――――――――― 主程序 ――――――――――――――
000D                  33       MAIN:                      ;开始
000D 758160           34         MOV   SP,#60H            ;堆栈指针指向60H   
0010 C2B7             35         CLR   E                  ;E=0,禁止读/写LCM
0012 11DF             36         ACALL SET_LCD            ;调LCD控制子程序
0014 112C             37         ACALL INIT               ;初始化变量
0016 753501           38         MOV   K1_P,#01H          ;按键上次端口设置1
0019 113E             39         ACALL INIT_TIMER         ;初始化定时器
001B 3142             40         ACALL MEU                ;调用工作菜单子程序
001D 31BC             41       LOOP:ACALL  CONV           ;时间计数处理
001F 1187             42         ACALL LOOP1              ;调用清零键子程序
0021 118F             43         ACALL KEY                ;判断是否有键按下
0023 60F8             44         JZ    LOOP               ;无键按下转LOOP
0025 853435           45         MOV   K1_P,K1_N          ;交换数据
0028 119C             46         ACALL KEY0               ;调用按键功能子程序
002A 80F1             47         JMP   LOOP               ;跳LOOP处循环          
                      48     
                      49      ;―――――――――――――――――――――――――――――――
                      50      ; 初始变量清零子程序
002C                  51       INIT:                     ;初始变量清零
002C E4               52         CLR  A                  ;A清为零
002D F537             53         MOV  K1_C,A             ;K1_C 初始为0
002F F533             54         MOV  DEDA,A             ;DEDA初始为0
0031 F532             55         MOV  SEC,A              ;SEC初始为0
0033 F531             56         MOV  MIN,A              ;MIN初始为0
0035 F530             57         MOV  HOUR,A             ;HOUR初始为0
0037 F534             58         MOV  K1_N,A             ;K1_N初始为0
A51 MACRO ASSEMBLER  LCD2401                                                              01/05/2007 14:53:27 PAGE     2

0039 F535             59         MOV  K1_P,A             ;K1_P初始为0
003B C28C             60         CLR  TR0                ;启动中断
003D 22               61         RET                                        
                      62      ;―――――――――――――――――――――
                      63      ;定时器初始化设置子程序
003E                  64        INIT_TIMER:             ;定时器初始化
003E 758901           65         MOV TMOD,#00000001B    ;定时器0模式1
0041 75A882           66         MOV IE,  #10000010B    ;开通中断
0044 758AF0           67         MOV TL0,#LOW(65536-10000);定时初值装入低位
0047 758CD8           68         MOV TH0,#HIGH(65536-10000);定时初值装入高位
004A 22               69         RET                                        
                      70      ;―――――――――――――――――――――
                      71      ;中断服务程序 
004B                  72        T0_INT:                   ;定时器T0中断程序 
004B C0E0             73         PUSH  ACC                ;入栈保护
004D 758AF0           74         MOV TL0,#LOW(65536-10000) ;重加载
0050 758CD8           75         MOV TH0,#HIGH(65536-10000)
0053 0533             76         INC  DEDA
0055 E533             77         MOV  A,DEDA              ;10ms 计数值加1
0057 B4642A           78         CJNE  A,#100,TT
005A 753300           79         MOV  DEDA,#0
005D 0532             80         INC  SEC                 ;秒加1
005F E532             81         MOV  A,SEC
0061 B43C20           82         CJNE  A,#60,TT
0064 0531             83         INC  MIN                 ;分加1
0066 753200           84         MOV  SEC,#0
0069 E531             85         MOV  A,MIN
006B B43C16           86         CJNE  A,#60,TT
006E 0530             87         INC  HOUR                ;时加1
0070 753100           88         MOV  MIN,#0
0073 E530             89         MOV  A,HOUR
0075 B4180C           90         CJNE  A,#24,TT
0078 753300           91         MOV  DEDA,#0
007B 753200           92         MOV  SEC,#0              ;秒、分、时单元清0
007E 753100           93         MOV  MIN,#0
0081 753000           94         MOV  HOUR,#0
0084 D0E0             95       TT: POP  ACC               ;出栈
0086 32               96         RETI                     ; 中断程序返回       
                      97      
                      98      ;―――――――――――――――――――――
                      99      ;判断键是否按下子程序
0087                 100             LOOP1:
0087 20B404          101              JB  K2,LOOP2             ;判清零键是否按下
008A 5119            102            ACALL SPK_BZ
008C 010D            103            JMP  MAIN            ;跳转主程序处
008E 22              104       LOOP2: RET                                    
                     105      ;-----------------------------
                     106      ; 判断K1键是否按下
008F                 107       KEY:    
008F E4              108          CLR  A                ;A清零
0090 F534            109          MOV  K1_N,A           ;A值送入K1_N
0092 A2B3            110          MOV  C,K1             ;K1值送入C
0094 33              111          RLC  A                ;同进位标志左移一位
0095 4234            112          ORL  K1_N,A           ;两个位作逻辑OR运算
0097 E534            113          MOV  A,K1_N           ;K1_N值送入A
0099 6535            114          XRL  A,K1_P           ;有键按下,A 中内容不为零
009B 22              115          RET                
                     116     
                     117     ;―――――――――――――――――――――
                     118      ;功能键子程序
                     119      ;K1键第一次按功能子程序
009C                 120       KEY0:               
009C E535            121          MOV  A, K1_P          ;K1_P值送入A
009E 20E02F          122          JB   ACC.0,KEY3       ;A的0位是1,转KEY3
00A1 0537            123          INC  K1_C             ;K1_C加1
00A3 E537            124          MOV  A, K1_C          ;K1_C值送入A 
A51 MACRO ASSEMBLER  LCD2401                                                              01/05/2007 14:53:27 PAGE     3

00A5 B4010A          125          CJNE A,#01H,KEY1      ;K1键是否第一次按?
00A8 90015B          126          MOV  DPTR,#MENU1      ;是,存入MENU1信息
00AB 7401            127          MOV  A,#1             ;设置第一行显示
00AD 319F            128          CALL LCD_PRINT        ;调用显示字符子程序
00AF D28C            129          SETB TR0              ;启动中断
00B1 22              130          RET                                 
                     131      ;―――――――――――――― 
                     132      ;K1键第二次按功能子程序
00B2                 133       KEY1:        
00B2 E537            134          MOV   A,K1_C           ;K1_C值送入A 
00B4 B4020A          135          CJNE  A,#02H,KEY2      ;K1键是否第二次按?
00B7 90016C          136          MOV   DPTR,#MENU2      ;是,存入MENU2信息
00BA 7401            137          MOV   A,#1             ;设置第一行显示
00BC 319F            138          CALL  LCD_PRINT        ;调用显示字符子程序
00BE C28C            139          CLR   TR0              ;停止中断
00C0 22              140          RET                    ;            
                     141      ;―――――――――――――― 
                     142       ;K1键第三次按功能子程序
00C1                 143             KEY2:               
00C1 E537            144          MOV   A, K1_C          ;K1_C值送入A
00C3 B4030A          145          CJNE  A, #03H,KEY3     ;K1键是否第三次按?
00C6 90017D          146          MOV   DPTR,#MENU3      ;是,存入MENU3信息
00C9 7401            147          MOV   A, #1            ;设置第一行显示
00CB 319F            148          CALL  LCD_PRINT        ;调用显示字符子程序
00CD D28C            149          SETB  TR0              ;启动中断
00CF 22              150          RET                                      
                     151      ;―――――――――――――― 
                     152      ;K1键第四按功能子程序
00D0                 153             KEY3:                   
00D0 E537            154                MOV   A,K1_C           ;K1_C值送入A
00D2 B40409          155          CJNE  A,#04H,KEY4      ;K1键是否第四次按?
00D5 90018E          156          MOV   DPTR,#MENU4      ;是,存入MENU4信息
00D8 7401            157          MOV   A,#1             ;设置第一行显示
00DA 319F            158          CALL  LCD_PRINT        ;调用显示字符子程序
00DC C28C            159          CLR   TR0              ;启动中断
00DE                 160       KEY4:    
00DE 22              161          RET                    ;子程序返回   
                     162      
                     163     ;――――――――――――― LCD显示 ――――――――――――――
                     164      ; LCD控制子程序
00DF                 165       SET_LCD:      ;     
00DF C2B7            166            CLR  E
00E1 310A            167            ACALL INIT_LCD      ;初始化 LCD
00E3 7D0A            168            MOV   R5,#10
00E5 512C            169            ACALL DELAY
00E7 9000F6          170            MOV   DPTR,#LMESS1  ;指针指到显示消息1
00EA 7401            171            MOV   A,#1          ;显示在第一行
00EC 319F            172            ACALL LCD_PRINT     ;调用显示字符子程序
00EE 900100          173            MOV   DPTR,#LMESS2  ;指针指到显示消息2
00F1 7402            174            MOV   A,#2          ;显示在第二行
00F3 319F            175            ACALL LCD_PRINT     ;调用显示字符子程序
00F5 22              176            RET                                     
                     177      ;―――――――――――――――
00F6 20202020        178       LMESS1:  DB  "         ",0  ;LCD 第一行显示消息
00FA 20202020                
00FE 2000                    
0100 54494D45        179       LMESS2:  DB  "TIME     ",0  ;LCD 第二行显示消息
0104 20202020                
0108 2000                    
                     180      ;―――――――――――――――
                     181     
                     182      ;LCD初始化子程序
010A                 183       INIT_LCD:    
010A 7438            184          MOV   A,#38H          ;设置8位、2行、5x7点阵  
010C 311D            185          ACALL WR_COMM         ; 调用写指令子程序
010E 5137            186          ACALL DELAY1          ;调用延时子程序
A51 MACRO ASSEMBLER  LCD2401                                                              01/05/2007 14:53:27 PAGE     4

0110 740C            187          MOV   A,#0CH          ;开显示,光标不闪烁
0112 311D            188          ACALL WR_COMM         ;调用写指令子程序      ;
0114 5137            189          ACALL DELAY1          ;调用延时子程序
0116 7401            190          MOV   A,#01H          ;清除 LCD 显示屏
0118 311D            191          ACALL WR_COMM         ;调用写指令子程序    ;
011A 5137            192          ACALL DELAY1          ;调用延时子程序
011C 22              193          RET                                   
                     194     
                     195     ;―――――――――――――――――――――
                     196      ;写指令子程序   
011D                 197       WR_COMM:                         
011D F590            198           MOV  P1,A           
011F C2B5            199           CLR  RS              ;RS=0,选择指令寄存器
0121 C2B6            200           CLR  RW              ;RW=0,选择写模式
0123 D2B7            201           SETB E               ;E=1,允许读/写LCM
0125 5137            202           ACALL DELAY1         ;调用延时子程序    
0127 C2B7            203           CLR  E               ;E=0,禁止读/写LCM
0129 22              204           RET                                       
                     205      ;――――――――――――――――――――
                     206     
                     207      ;写数据子程序
012A                 208       WR_DATA:                 
012A F590            209            MOV   P1,A     
012C D2B5            210            SETB  RS            ;RS=1,选择数据寄存器
012E C2B6            211            CLR   RW            ;RW=0,选择写模式
0130 D2B7            212            SETB  E             ;E=1,允许读/写LCM
0132 5140            213            ACALL DE            ;调用延时子程序
0134 C2B7            214            CLR   E             ;E=0,禁止读/写LCM
0136 5140            215            ACALL DE            ;调用延时子程序
0138 22              216            RET                                    
                     217     
                     218      ;―――――――――――――――――――――             
                     219       ;清除该行 LCD 的字符
0139 7818            220      CLR_LINE:       MOV  R0,#24
013B 7420            221        CL1: MOV  A,#' '
013D 312A            222          ACALL  WR_DATA
013F D8FA            223          DJNZ   R0,CL1
0141 22              224          RET                                     
                     225     
                     226      ;―――――――――――――――――――――
                     227      ;LCD 存入工作菜单

⌨️ 快捷键说明

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