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

📄 ir-12864lcd.lst

📁 买板子时赠的实验例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  IR_12864LCD                                                          03/29/2005 16:04:59 PAGE     1


MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN IR-12864LCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-12864LCD.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;********************************************************************************
                       2     ;*  标题:  伟纳电子ME300B单片机开发系统演示程序 - 12864LCD显示遥控键值读取器    *
                       3     ;*  文件:  IR_12864LCD.asm                                                      *
                       4     ;*  日期:  2005-3-20                                                            *
                       5     ;*  版本:  1.0                                                                  *
                       6     ;*  作者:  gguoqing                                                             *
                       7     ;*  邮箱:  gguoqing@willar.com                                                  *
                       8     ;*  网站: http://www.willar.com                                                *
                       9     ;********************************************************************************
                      10     ;*  描述:                                                                       *
                      11     ;*         12864LCD(带汉字库)显示遥控键值读取器                                 *
                      12     ;*         P0口为TS12864A-3的数据 D0-D7                                         *
                      13     ;*         K17键按下,继电器吸合。K19键按下,继电器关闭                         *
                      14     ;*         显示程序在中断服务程序之中                                           *          
                                                      *
                      15     ;*                                                                              *
                      16     ;*                                                                              *
                      17     ;********************************************************************************
                      18     ;* 【版权】 Copyright(C)伟纳电子 www.willar.com  All Rights Reserved            *
                      19     ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
                      20     ;********************************************************************************
                      21     
                      22     
  0020                23             IRCOM  EQU  20H       ;20H-23H IR使用
  0026                24             X     EQU  26H        ;LCD 地址变量
                      25     
  00B2                26             IRIN   EQU  P3.2
  00B7                27             BEEP   EQU  P3.7
  0093                28             RELAY  EQU  P1.3
                      29     
  00A0                30             RS      EQU     P2.0
  00A1                31             RW      EQU     P2.1
  00A2                32             EN      EQU     P2.2
  00A3                33             PSB     EQU     P2.3
  00A5                34             RST     EQU     P2.5
                      35     ;------------------------------------------------
0000                  36              ORG 0000H
0000 8003             37              JMP  MAIN
                      38     
0003                  39              ORG 0003H         ;外部中断INT0入口地址
0003 213B             40              JMP  IR_IN        ;中断服务程序
                      41     ;------------------------------------------------
0005                  42     MAIN:
0005 758140           43               MOV   SP,#40H
0008 7400             44               MOV   A,#00H
000A 7820             45               MOV   R0,#20H
000C F6               46     LOOP0:    MOV   @R0,A          ;20H-26H清零
000D 08               47               INC   R0
000E B827FB           48               CJNE  R0,#27H,LOOP0
0011 75A881           49               MOV  IE,#81H       ;允许总中断中断,使能 INT0 外部中断
0014 758801           50               MOV  TCON,#01H     ;触发方式为脉冲负边沿触发
0017 D2B2             51               SETB  IRIN
0019 D2A5             52               SETB  RST
001B 00               53               NOP
001C D2A3             54               SETB  PSB            ;8位数据,并口
                      55     
001E 1136             56               CALL  SET_LCD        ;初始化TS12864A-3
0020 11A0             57               CALL  MENU1
A51 MACRO ASSEMBLER  IR_12864LCD                                                          03/29/2005 16:04:59 PAGE     2

0022 11B9             58               CALL  MENU2
0024 11D2             59               CALL  MENU3
0026 11EA             60               CALL  MENU4
0028                  61     LOOP1:
0028 E522             62               MOV  A,22H
002A B44002           63               CJNE  A,#40H,LOOP2    ;K17键按下
002D C293             64               CLR   RELAY           ;继电器吸合
002F B40402           65     LOOP2:    CJNE  A,#04H,LOOP3    ;K19键按下
0032 D293             66               SETB  RELAY           ;继电器关闭
0034 80F2             67     LOOP3:    JMP   LOOP1
                      68     
                      69     ;=============================================
                      70     ;  LCD 初始化设置
                      71     ;=============================================-
0036                  72     SET_LCD:
0036 C2A2             73               CLR  EN
0038 7434             74               MOV  A,#34H     ;34H--扩充指令操作
003A 3102             75               CALL  WCOM
003C 5134             76               CALL  DELAY1
003E 7430             77               MOV  A,#30H     ;30H--基本指令操作
0040 3102             78               CALL  WCOM
0042 5134             79               CALL  DELAY1
                      80     
0044 740C             81               MOV  A,#0CH     ;开显示,关光标,
0046 3102             82               CALL  WCOM
0048 5134             83               CALL  DELAY1
004A 7401             84               MOV  A,#01H     ;清除 LCM 显示屏
004C 3102             85               CALL  WCOM
004E 5134             86               CALL  DELAY1
0050 22               87               RET
                      88     ;===================================================
                      89     ;在 LCM 各行显示信息字符
                      90     ;===================================================
0051                  91     LCD_SHOW:
                      92     
0051 B4010C           93               CJNE  A,#1,LINE2  ;判断是否为第一行
0054 7480             94       LINE1:  MOV  A,#80H       ;设置 LCD 的第一行地址
0056 3102             95               CALL  WCOM        ;写入命令
0058 1197             96               CALL  CLR_LINE    ;清除该行字符数据
005A 7480             97               MOV  A,#80H       ;设置 LCD 的第一行地址
005C 3102             98               CALL  WCOM        ;写入命令
005E 802B             99               JMP  FILL
                     100     
0060 B4020C          101       LINE2:  CJNE  A,#2,LINE3  ;判断是否为第三行
0063 7490            102               MOV  A,#090H      ;设置 LCD 的第三行地址
0065 3102            103               CALL  WCOM        ;写入命令
0067 1197            104               CALL  CLR_LINE    ;清除该行字符数据
0069 7490            105               MOV  A,#090H      ;设置 LCD 的第三行地址
006B 3102            106               CALL  WCOM
006D 801C            107               JMP  FILL
                     108     
006F B4030C          109       LINE3:  CJNE  A,#3,LINE4  ;判断是否为第三行
0072 7488            110               MOV  A,#088H      ;设置 LCD 的第三行地址
0074 3102            111               CALL  WCOM        ;写入命令
0076 1197            112               CALL  CLR_LINE    ;清除该行字符数据
0078 7488            113               MOV  A,#088H      ;设置 LCD 的第三行地址
007A 3102            114               CALL  WCOM
007C 800D            115               JMP  FILL
                     116     
007E B4040F          117       LINE4:  CJNE  A,#4,LINE5  ;判断是否为第三行
0081 7498            118               MOV  A,#098H      ;设置 LCD 的第三行地址
0083 3102            119               CALL  WCOM        ;写入命令
0085 1197            120               CALL  CLR_LINE    ;清除该行字符数据
0087 7498            121               MOV  A,#098H      ;设置 LCD 的第三行地址
0089 3102            122               CALL  WCOM
                     123     
A51 MACRO ASSEMBLER  IR_12864LCD                                                          03/29/2005 16:04:59 PAGE     3

008B E4              124       FILL:   CLR  A            ;填入字符
008C 93              125               MOVC  A,@A+DPTR   ;由消息区取出字符
008D B40001          126               CJNE  A,#0,LC1    ;判断是否为结束码
0090 22              127       LINE5:  RET
0091 310F            128       LC1:    CALL  WDATA       ;写入数据
0093 A3              129               INC  DPTR         ;指针加1
0094 80F5            130               JMP  FILL         ;继续填入字符
0096 22              131               RET
                     132     ;=================================================
                     133     ;清除该行 LCM 的字符
                     134     ;=================================================
0097                 135     CLR_LINE:
0097 7810            136               MOV  R0,#16      ;
0099 7420            137        CL1:   MOV  A,#' '
009B 310F            138               CALL  WDATA
009D D8FA            139               DJNZ  R0,CL1
009F 22              140               RET
                     141     ;==================================================
                     142     ;LCM 显示工作菜单信息
                     143     ;==================================================
00A0                 144     MENU1:
00A0 9000A8          145              MOV   DPTR,#MENU1A
00A3 7401            146              MOV   A,#1         ;在第一行显示信息
00A5 1151            147              CALL  LCD_SHOW
00A7 22              148              RET
00A8 BAECCDE2        149     MENU1A:  DB  "红外遥控码读取器",0
00AC D2A3BFD8                
00B0 C2EBB6C1                
00B4 C8A1C6F7                
00B8 00                      
                     150     
00B9                 151     MENU2:
00B9 9000C1          152              MOV   DPTR,#MENU2A
00BC 7402            153              MOV   A,#2         ;在第二行显示信息
00BE 1151            154              CALL  LCD_SHOW
00C0 22              155              RET
00C1 2D2D7777        156     MENU2A:  DB  "--www.willar.com",0
00C5 772E7769                
00C9 6C6C6172                
00CD 2E636F6D                
00D1 00                      
                     157     
00D2                 158     MENU3:
00D2 9000DA          159              MOV   DPTR,#MENU3A
00D5 7403            160              MOV   A,#3         ;在第三行显示信息
00D7 1151            161              CALL  LCD_SHOW
00D9 22              162              RET
00DA BCFCD6B5        163     MENU3A:  DB  "键值编码:- - H",0
00DE B1E0C2EB                
00E2 A3BA2D20                
00E6 2D204800                
                     164     
00EA                 165     MENU4:
00EA 9000F2          166              MOV   DPTR,#MENU4A
00ED 7404            167              MOV   A,#4         ;在第四行显示信息
00EF 1151            168              CALL  LCD_SHOW
00F1 22              169              RET
00F2 BCFCD6B5        170     MENU4A:  DB  "键值反码:- - H",0
00F6 B7B4C2EB                
00FA A3BA2D20                
00FE 2D204800                
                     171     
                     172     ;==============================================
                     173     ; 写指令使能子程序
                     174     ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
                     175     ;==============================================
A51 MACRO ASSEMBLER  IR_12864LCD                                                          03/29/2005 16:04:59 PAGE     4

0102                 176     WCOM:
0102 F580            177               MOV  P0,A
0104 C2A0            178               CLR RS
0106 C2A1            179               CLR RW
0108 D2A2            180               SETB EN
010A 311C            181               CALL  DELAY0
010C C2A2            182               CLR EN
010E 22              183               RET
                     184     ;=============================================
                     185     ;写数据使能子程序
                     186     ;RS=H,RW=L,D0-D7=数据,E=高脉冲
                     187     ;=============================================
010F                 188     WDATA:
010F F580            189               MOV   P0,A
0111 D2A0            190               SETB  RS
0113 C2A1            191               CLR   RW
0115 D2A2            192               SETB  EN
0117 311C            193               CALL  DELAY0
0119 C2A2            194               CLR   EN
011B 22              195               RET
                     196     
011C 7FFA            197     DELAY0:   MOV  R7,#250      ;延时500微秒
011E DFFE            198               DJNZ  R7,$
0120 22              199               RET
                     200     ;===============================================
                     201     ;在 LCM 第三行、第四行显示字符
                     202     ;A=ASC DATA, B=LINE X POS
                     203     ;===============================================
0121                 204     LCDP3:                    ;在LCD的第三行显示字符
0121 C0E0            205              PUSH  ACC        ;
0123 E5F0            206              MOV  A,B         ;设置显示地址
0125 2488            207              ADD  A,#088H     ;设置LCD的第三行地址
0127 3102            208              CALL  WCOM       ;写入命令
0129 D0E0            209              POP  ACC         ;由堆栈取出A
012B 310F            210              CALL  WDATA      ;写入数据
012D 22              211              RET
                     212     
012E                 213     LCDP4:                    ;在LCD的第四行显示字符
012E C0E0            214              PUSH  ACC        ;
0130 E5F0            215              MOV  A,B         ;设置显示地址
0132 2498            216              ADD  A,#098H     ;设置LCD的第四行地址
0134 3102            217              CALL  WCOM       ;写入命令
0136 D0E0            218              POP  ACC         ;由堆栈取出A
0138 310F            219              CALL  WDATA      ;写入数据
013A 22              220              RET
                     221     ;=================================================
                     222     ; IR 译码子程序
                     223     ;中断服务程序
                     224     ;=================================================
013B                 225     IR_IN:
013B C2AF            226               CLR EA         ;暂时关闭CPU的所有中断请求
013D C0E0            227               PUSH  ACC
013F C0D0            228               PUSH  PSW
0141 D2D3            229               SETB  PSW.3     ;选择工作寄存器组1

⌨️ 快捷键说明

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