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

📄 ir-12864lcd.lst

📁 含有多个汇编以及c语言编程实例 用于单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  IR_12864LCD                                                          10/12/2006 09:00:05 PAGE     1


MACRO ASSEMBLER A51 V7.08a
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     
                       3     
  0020                 4             IRCOM  EQU  20H       ;20H-23H IR使用
  0026                 5             X     EQU  26H        ;LCD 地址变量
                       6     
  00B2                 7             IRIN   EQU  P3.2
  00B7                 8             BEEP   EQU  P3.7
  0093                 9             RELAY  EQU  P1.3
                      10     
  00A0                11             RS      EQU     P2.0
  00A1                12             RW      EQU     P2.1
  00A2                13             EN      EQU     P2.2
  00A3                14             PSB     EQU     P2.3
  00A5                15             RST     EQU     P2.5
                      16     ;------------------------------------------------
0000                  17              ORG 0000H
0000 8003             18              JMP  MAIN
                      19     
0003                  20              ORG 0003H         ;外部中断INT0入口地址
0003 213B             21              JMP  IR_IN        ;中断服务程序
                      22     ;------------------------------------------------
0005                  23     MAIN:
0005 758140           24               MOV   SP,#40H
0008 7400             25               MOV   A,#00H
000A 7820             26               MOV   R0,#20H
000C F6               27     LOOP0:    MOV   @R0,A          ;20H-26H清零
000D 08               28               INC   R0
000E B827FB           29               CJNE  R0,#27H,LOOP0
0011 75A881           30               MOV  IE,#81H       ;允许总中断中断,使能 INT0 外部中断
0014 758801           31               MOV  TCON,#01H     ;触发方式为脉冲负边沿触发
0017 D2B2             32               SETB  IRIN
0019 D2A5             33               SETB  RST
001B 00               34               NOP
001C D2A3             35               SETB  PSB            ;8位数据,并口
                      36     
001E 1136             37               CALL  SET_LCD        ;初始化TS12864A-3
0020 11A0             38               CALL  MENU1
0022 11B9             39               CALL  MENU2
0024 11D2             40               CALL  MENU3
0026 11EA             41               CALL  MENU4
0028                  42     LOOP1:
0028 E522             43               MOV  A,22H
002A B44002           44               CJNE  A,#40H,LOOP2    ;K17键按下
002D C293             45               CLR   RELAY           ;继电器吸合
002F B40402           46     LOOP2:    CJNE  A,#04H,LOOP3    ;K19键按下
0032 D293             47               SETB  RELAY           ;继电器关闭
0034 80F2             48     LOOP3:    JMP   LOOP1
                      49     
                      50     ;=============================================
                      51     ;  LCD 初始化设置
                      52     ;=============================================-
0036                  53     SET_LCD:
0036 C2A2             54               CLR  EN
0038 7434             55               MOV  A,#34H     ;34H--扩充指令操作
003A 3102             56               CALL  WCOM
003C 5134             57               CALL  DELAY1
003E 7430             58               MOV  A,#30H     ;30H--基本指令操作
A51 MACRO ASSEMBLER  IR_12864LCD                                                          10/12/2006 09:00:05 PAGE     2

0040 3102             59               CALL  WCOM
0042 5134             60               CALL  DELAY1
                      61     
0044 740C             62               MOV  A,#0CH     ;开显示,关光标,
0046 3102             63               CALL  WCOM
0048 5134             64               CALL  DELAY1
004A 7401             65               MOV  A,#01H     ;清除 LCM 显示屏
004C 3102             66               CALL  WCOM
004E 5134             67               CALL  DELAY1
0050 22               68               RET
                      69     ;===================================================
                      70     ;在 LCM 各行显示信息字符
                      71     ;===================================================
0051                  72     LCD_SHOW:
                      73     
0051 B4010C           74               CJNE  A,#1,LINE2  ;判断是否为第一行
0054 7480             75       LINE1:  MOV  A,#80H       ;设置 LCD 的第一行地址
0056 3102             76               CALL  WCOM        ;写入命令
0058 1197             77               CALL  CLR_LINE    ;清除该行字符数据
005A 7480             78               MOV  A,#80H       ;设置 LCD 的第一行地址
005C 3102             79               CALL  WCOM        ;写入命令
005E 802B             80               JMP  FILL
                      81     
0060 B4020C           82       LINE2:  CJNE  A,#2,LINE3  ;判断是否为第三行
0063 7490             83               MOV  A,#090H      ;设置 LCD 的第三行地址
0065 3102             84               CALL  WCOM        ;写入命令
0067 1197             85               CALL  CLR_LINE    ;清除该行字符数据
0069 7490             86               MOV  A,#090H      ;设置 LCD 的第三行地址
006B 3102             87               CALL  WCOM
006D 801C             88               JMP  FILL
                      89     
006F B4030C           90       LINE3:  CJNE  A,#3,LINE4  ;判断是否为第三行
0072 7488             91               MOV  A,#088H      ;设置 LCD 的第三行地址
0074 3102             92               CALL  WCOM        ;写入命令
0076 1197             93               CALL  CLR_LINE    ;清除该行字符数据
0078 7488             94               MOV  A,#088H      ;设置 LCD 的第三行地址
007A 3102             95               CALL  WCOM
007C 800D             96               JMP  FILL
                      97     
007E B4040F           98       LINE4:  CJNE  A,#4,LINE5  ;判断是否为第三行
0081 7498             99               MOV  A,#098H      ;设置 LCD 的第三行地址
0083 3102            100               CALL  WCOM        ;写入命令
0085 1197            101               CALL  CLR_LINE    ;清除该行字符数据
0087 7498            102               MOV  A,#098H      ;设置 LCD 的第三行地址
0089 3102            103               CALL  WCOM
                     104     
008B E4              105       FILL:   CLR  A            ;填入字符
008C 93              106               MOVC  A,@A+DPTR   ;由消息区取出字符
008D B40001          107               CJNE  A,#0,LC1    ;判断是否为结束码
0090 22              108       LINE5:  RET
0091 310F            109       LC1:    CALL  WDATA       ;写入数据
0093 A3              110               INC  DPTR         ;指针加1
0094 80F5            111               JMP  FILL         ;继续填入字符
0096 22              112               RET
                     113     ;=================================================
                     114     ;清除该行 LCM 的字符
                     115     ;=================================================
0097                 116     CLR_LINE:
0097 7810            117               MOV  R0,#16      ;
0099 7420            118        CL1:   MOV  A,#' '
009B 310F            119               CALL  WDATA
009D D8FA            120               DJNZ  R0,CL1
009F 22              121               RET
                     122     ;==================================================
                     123     ;LCM 显示工作菜单信息
                     124     ;==================================================
A51 MACRO ASSEMBLER  IR_12864LCD                                                          10/12/2006 09:00:05 PAGE     3

00A0                 125     MENU1:
00A0 9000A8          126              MOV   DPTR,#MENU1A
00A3 7401            127              MOV   A,#1         ;在第一行显示信息
00A5 1151            128              CALL  LCD_SHOW
00A7 22              129              RET
00A8 BAECCDE2        130     MENU1A:  DB  "红外遥控码读取器",0
00AC D2A3BFD8                
00B0 C2EBB6C1                
00B4 C8A1C6F7                
00B8 00                      
                     131     
00B9                 132     MENU2:
00B9 9000C1          133              MOV   DPTR,#MENU2A
00BC 7402            134              MOV   A,#2         ;在第二行显示信息
00BE 1151            135              CALL  LCD_SHOW
00C0 22              136              RET
00C1 2D777777        137     MENU2A:  DB  "-www.hificat.com",0
00C5 2E686966                
00C9 69636174                
00CD 2E636F6D                
00D1 00                      
                     138     
00D2                 139     MENU3:
00D2 9000DA          140              MOV   DPTR,#MENU3A
00D5 7403            141              MOV   A,#3         ;在第三行显示信息
00D7 1151            142              CALL  LCD_SHOW
00D9 22              143              RET
00DA BCFCD6B5        144     MENU3A:  DB  "键值编码:- - H",0
00DE B1E0C2EB                
00E2 A3BA2D20                
00E6 2D204800                
                     145     
00EA                 146     MENU4:
00EA 9000F2          147              MOV   DPTR,#MENU4A
00ED 7404            148              MOV   A,#4         ;在第四行显示信息
00EF 1151            149              CALL  LCD_SHOW
00F1 22              150              RET
00F2 BCFCD6B5        151     MENU4A:  DB  "键值反码:- - H",0
00F6 B7B4C2EB                
00FA A3BA2D20                
00FE 2D204800                
                     152     
                     153     ;==============================================
                     154     ; 写指令使能子程序
                     155     ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
                     156     ;==============================================
0102                 157     WCOM:
0102 F580            158               MOV  P0,A
0104 C2A0            159               CLR RS
0106 C2A1            160               CLR RW
0108 D2A2            161               SETB EN
010A 311C            162               CALL  DELAY0
010C C2A2            163               CLR EN
010E 22              164               RET
                     165     ;=============================================
                     166     ;写数据使能子程序
                     167     ;RS=H,RW=L,D0-D7=数据,E=高脉冲
                     168     ;=============================================
010F                 169     WDATA:
010F F580            170               MOV   P0,A
0111 D2A0            171               SETB  RS
0113 C2A1            172               CLR   RW
0115 D2A2            173               SETB  EN
0117 311C            174               CALL  DELAY0
0119 C2A2            175               CLR   EN
011B 22              176               RET
A51 MACRO ASSEMBLER  IR_12864LCD                                                          10/12/2006 09:00:05 PAGE     4

                     177     
011C 7FFA            178     DELAY0:   MOV  R7,#250      ;延时500微秒
011E DFFE            179               DJNZ  R7,$
0120 22              180               RET
                     181     ;===============================================
                     182     ;在 LCM 第三行、第四行显示字符
                     183     ;A=ASC DATA, B=LINE X POS
                     184     ;===============================================
0121                 185     LCDP3:                    ;在LCD的第三行显示字符
0121 C0E0            186              PUSH  ACC        ;
0123 E5F0            187              MOV  A,B         ;设置显示地址
0125 2488            188              ADD  A,#088H     ;设置LCD的第三行地址
0127 3102            189              CALL  WCOM       ;写入命令
0129 D0E0            190              POP  ACC         ;由堆栈取出A
012B 310F            191              CALL  WDATA      ;写入数据
012D 22              192              RET
                     193     
012E                 194     LCDP4:                    ;在LCD的第四行显示字符
012E C0E0            195              PUSH  ACC        ;
0130 E5F0            196              MOV  A,B         ;设置显示地址
0132 2498            197              ADD  A,#098H     ;设置LCD的第四行地址
0134 3102            198              CALL  WCOM       ;写入命令
0136 D0E0            199              POP  ACC         ;由堆栈取出A
0138 310F            200              CALL  WDATA      ;写入数据
013A 22              201              RET
                     202     ;=================================================
                     203     ; IR 译码子程序
                     204     ;中断服务程序
                     205     ;=================================================
013B                 206     IR_IN:
013B C2AF            207               CLR EA         ;暂时关闭CPU的所有中断请求
013D C0E0            208               PUSH  ACC
013F C0D0            209               PUSH  PSW
0141 D2D3            210               SETB  PSW.3     ;选择工作寄存器组1
0143 C2D4            211               CLR   PSW.4
                     212     
0145 7820            213               MOV   R0,#IRCOM
0147 7904            214               MOV  R1,#04H
0149 30B207          215     I1:       JNB  IRIN,I2       ;等待 IR 信号出现
014C 1201A4          216               LCALL CONV
014F D9F8            217               DJNZ  R1,I1
0151 803E            218               JMP  IR_OUT
0153 7C14            219      I2:      MOV  R4,#20

⌨️ 快捷键说明

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