📄 keynum-ts12864a-3.lst
字号:
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN KEYNUM-TS12864A-3.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KEYNUM-TS12864A-3.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*******************************************************************
2 ;* *
3 ;* ME500单片机开发系统演示程序 - 矩阵键盘键值读取器 *
4 ;* *
5 ;* TS12864A-3(汉字库)显示 *
6 ;* *
7 ;* 版本: V1.0 (2006/11/20) *
8 ;* 作者: gguoqing (Email: gguoqing@willar.com) *
9 ;* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
10 ;* 时间: 2006/11/12 *
11 ;* *
12 ;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 ;* *
15 ;*******************************************************************
16
17 ;矩阵键盘定义:
18 ;P1.0-P1.3为列线,P1.4-P1.7为行线
19 ;=================================================
20
0026 21 X EQU 26H ;LCD 地址变量
22
00B7 23 BEEP EQU P3.7
0093 24 RELAY EQU P1.3
25
00A0 26 RS EQU P2.0
00A1 27 RW EQU P2.1
00A2 28 EN EQU P2.2
00A3 29 PSB EQU P2.3
00A5 30 RST EQU P2.5
31
32 ;==================================================
0000 33 ORG 0000H
0000 8000 34 JMP MAIN
35 ;==================================================
0002 36 MAIN:
0002 758140 37 MOV SP,#40H
0005 7400 38 MOV A,#00H
0007 7820 39 MOV R0,#20H
0009 F6 40 LOOP0: MOV @R0,A ;20H-26H清零
000A 08 41 INC R0
000B B827FB 42 CJNE R0,#27H,LOOP0
43
000E D2A5 44 SETB RST
0010 00 45 NOP
0011 D2A3 46 SETB PSB ;8位数据,并口
47
0013 112F 48 CALL SET_LCD ;初始化TS12864A-3
0015 1199 49 CALL MENU1
0017 11B2 50 CALL MENU2
0019 11CB 51 CALL MENU3
001B 11E3 52 CALL MENU4
001D 53 LOOP1:
001D 7590F0 54 MOV P1,#0F0H
0020 E590 55 MOV A,P1
0022 B4F002 56 CJNE A,#0F0H,LOOP2 ;有键按下转LOOP2
0025 80F6 57 JMP LOOP1
0027 58 LOOP2:
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 2
0027 3135 59 CALL KEY_IN
0029 3162 60 CALL KEY_CONV
002B 317C 61 CALL BEEP_BL
002D 80EE 62 JMP LOOP1
63
64 ;=============================================
65 ; LCD 初始化设置
66 ;=============================================-
002F 67 SET_LCD:
002F C2A2 68 CLR EN
0031 7434 69 MOV A,#34H ;34H--扩充指令操作
0033 11FC 70 CALL WCOM
0035 319A 71 CALL DELAY1
0037 7430 72 MOV A,#30H ;30H--基本指令操作
0039 11FC 73 CALL WCOM
003B 319A 74 CALL DELAY1
75
003D 740C 76 MOV A,#0CH ;开显示,关光标,
003F 11FC 77 CALL WCOM
0041 319A 78 CALL DELAY1
0043 7401 79 MOV A,#01H ;清除 LCM 显示屏
0045 11FC 80 CALL WCOM
0047 319A 81 CALL DELAY1
0049 22 82 RET
83 ;===================================================
84 ;在 LCM 各行显示信息字符
85 ;===================================================
004A 86 LCD_SHOW:
87
004A B4010C 88 CJNE A,#1,LINE2 ;判断是否为第一行
004D 7480 89 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
004F 11FC 90 CALL WCOM ;写入命令
0051 1190 91 CALL CLR_LINE ;清除该行字符数据
0053 7480 92 MOV A,#80H ;设置 LCD 的第一行地址
0055 11FC 93 CALL WCOM ;写入命令
0057 802B 94 JMP FILL
95
0059 B4020C 96 LINE2: CJNE A,#2,LINE3 ;判断是否为第二行
005C 7490 97 MOV A,#090H ;设置 LCD 的第二行地址
005E 11FC 98 CALL WCOM ;写入命令
0060 1190 99 CALL CLR_LINE ;清除该行字符数据
0062 7490 100 MOV A,#090H ;设置 LCD 的第二行地址
0064 11FC 101 CALL WCOM
0066 801C 102 JMP FILL
103
0068 B4030C 104 LINE3: CJNE A,#3,LINE4 ;判断是否为第三行
006B 7488 105 MOV A,#088H ;设置 LCD 的第三行地址
006D 11FC 106 CALL WCOM ;写入命令
006F 1190 107 CALL CLR_LINE ;清除该行字符数据
0071 7488 108 MOV A,#088H ;设置 LCD 的第三行地址
0073 11FC 109 CALL WCOM
0075 800D 110 JMP FILL
111
0077 B4040F 112 LINE4: CJNE A,#4,LINE5 ;判断是否为第四行
007A 7498 113 MOV A,#098H ;设置 LCD 的第四行地址
007C 11FC 114 CALL WCOM ;写入命令
007E 1190 115 CALL CLR_LINE ;清除该行字符数据
0080 7498 116 MOV A,#098H ;设置 LCD 的第四行地址
0082 11FC 117 CALL WCOM
118
0084 E4 119 FILL: CLR A ;填入字符
0085 93 120 MOVC A,@A+DPTR ;由消息区取出字符
0086 B40001 121 CJNE A,#0,LC1 ;判断是否为结束码
0089 22 122 LINE5: RET
008A 3109 123 LC1: CALL WDATA ;写入数据
008C A3 124 INC DPTR ;指针加1
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 3
008D 80F5 125 JMP FILL ;继续填入字符
008F 22 126 RET
127 ;=================================================
128 ;清除该行 LCM 的字符
129 ;=================================================
0090 130 CLR_LINE:
0090 7810 131 MOV R0,#16 ;
0092 7420 132 CL1: MOV A,#' '
0094 3109 133 CALL WDATA
0096 D8FA 134 DJNZ R0,CL1
0098 22 135 RET
136 ;==================================================
137 ;LCM 显示工作菜单信息
138 ;==================================================
0099 139 MENU1:
0099 9000A1 140 MOV DPTR,#MENU1A
009C 7401 141 MOV A,#1 ;在第一行显示信息
009E 114A 142 CALL LCD_SHOW
00A0 22 143 RET
00A1 2D2D2D2D 144 MENU1A: DB "-----ME500------",0
00A5 2D4D4535
00A9 30302D2D
00AD 2D2D2D2D
00B1 00
145
00B2 146 MENU2:
00B2 9000BA 147 MOV DPTR,#MENU2A
00B5 7402 148 MOV A,#2 ;在第二行显示信息
00B7 114A 149 CALL LCD_SHOW
00B9 22 150 RET
00BA BED8D5F3 151 MENU2A: DB "矩阵键盘值读取器",0
00BE BCFCC5CC
00C2 D6B5B6C1
00C6 C8A1C6F7
00CA 00
152
00CB 153 MENU3:
00CB 9000D3 154 MOV DPTR,#MENU3A
00CE 7403 155 MOV A,#3 ;在第三行显示信息
00D0 114A 156 CALL LCD_SHOW
00D2 22 157 RET
00D3 BCFCD6B5 158 MENU3A: DB "键值编码:- H ",0
00D7 B1E0C2EB
00DB A3BA2D20
00DF 48202000
159
00E3 160 MENU4:
00E3 9000EB 161 MOV DPTR,#MENU4A
00E6 7404 162 MOV A,#4 ;在第四行显示信息
00E8 114A 163 CALL LCD_SHOW
00EA 22 164 RET
00EB 20777777 165 MENU4A: DB " www.willar.com ",0
00EF 2E77696C
00F3 6C61722E
00F7 636F6D20
00FB 00
166
167 ;==============================================
168 ; 写指令使能子程序
169 ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
170 ;==============================================
00FC 171 WCOM:
00FC F580 172 MOV P0,A
00FE C2A0 173 CLR RS
0100 C2A1 174 CLR RW
0102 D2A2 175 SETB EN
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 4
0104 3116 176 CALL DELAY0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -