?? pcf8591-lcd1602-4ch-xianshi.lst
字號:
A51 MACRO ASSEMBLER PCF8591_LCD1602_4CH_XIANSHI 12/20/2006 22:59:54 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN PCF8591-LCD1602-4CH-XIANSHI.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE PCF8591-LCD1602-4CH-XIANSHI.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;*******************************************************************
3 ;* *
4 ;* ME500單片機開發(fā)系統(tǒng)演示程序 - PCF8591 四路電壓 *
5 ;* *
6 ;* LCD1602 顯示輸入通道與電壓值 *
7 ;* 參考電壓接至5V電源 *
8 ;* 最小輸出電壓:0.00V 最大輸出電壓:5.00V 分辨率:0.02V *
*
9 ;* *
10 ;* *
11 ;* 版本: V1.0 (2006/11/20) *
12 ;* 作者: gguoqing (Email: gguoqing@willar.com) *
13 ;* 網(wǎng)站: www.willar.com(偉納電子) www.mcusj.com(偉納單片機世界) *
14 ;* 時間: 2006/04/06 *
15 ;* *
16 ;*【版權】Copyright(C)偉納電子 www.willar.com All Rights Reserved *
17 ;*【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息! *
18 ;* *
19 ;*******************************************************************
20
00B7 21 BEEP EQU P3.7 ;蜂鳴器
0094 22 K1 EQU P1.4 ;K1鍵
0095 23 K2 EQU P1.5 ;K2鍵
0096 24 K3 EQU P1.6 ;K3鍵
0097 25 K4 EQU P1.7 ;K4鍵
26
0090 27 SCL EQU P1.0 ;PCF8591時鐘線
0093 28 SDA EQU P1.3 ;PCF8591數(shù)據(jù)線
29
00A0 30 LCD_RS EQU P2.0 ;LCD 數(shù)據(jù)/命令選擇端
00A1 31 LCD_RW EQU P2.1 ;LCD 讀/寫選擇端
00A2 32 LCD_EN EQU P2.2 ;LCD 使能信號
004F 33 LCD_X EQU 4FH ;LCD 地址變量
0080 34 LCD_DATA EQU P0 ;LCD 數(shù)據(jù)端口
35
0040 36 AD_DATA EQU 40H ;A/D轉換值存儲單元首地址(用4個單元)
0045 37 DISSTART EQU 45H ;顯示單元首地址(用3個單元)
0049 38 AD_TEMP EQU 49H ;AD轉換值臨時存放單元
39
40 ;==========================================================
41
0000 42 ORG 0000H
0000 802E 43 JMP START
0030 44 ORG 0030H
45
46 ;==========================================================
0030 47 START:
0030 758170 48 MOV SP,#70H
0033 7400 49 MOV A,#00H
0035 F540 50 MOV AD_DATA,A ;A/D轉換值存儲單元清零
0037 F541 51 MOV AD_DATA+1,A
0039 F542 52 MOV AD_DATA+2,A
003B F543 53 MOV AD_DATA+3,A
003D 7580FF 54 MOV P0,#0FFH
0040 75A0FF 55 MOV P2,#0FFH
0043 120083 56 LCALL SET_LCD1
0046 7D32 57 MOV R5,#50
A51 MACRO ASSEMBLER PCF8591_LCD1602_4CH_XIANSHI 12/20/2006 22:59:54 PAGE 2
0048 58 START1:
0048 12020E 59 LCALL DELAY ;延時10s
004B DDFB 60 DJNZ R5,START1
004D 1200BA 61 LCALL SET_LCD2
0050 62 START2:
0050 7A04 63 MOV R2,#04H ;進行四路轉換
0052 12023B 64 LCALL PCF_AD ;開始A/D轉換
65
0055 854149 66 MOV AD_TEMP,AD_DATA+1 ;顯示通道0輸入電壓值
0058 31CA 67 CALL TUNBCD
005A 754F02 68 MOV LCD_X,#2 ;設置顯示位置
005D 12016C 69 LCALL LCD_CONV1
70
0060 854249 71 MOV AD_TEMP,AD_DATA+2 ;顯示通道1輸入電壓值
0063 31CA 72 CALL TUNBCD
0065 754F0B 73 MOV LCD_X,#11 ;設置顯示位置
0068 12016C 74 LCALL LCD_CONV1
75
006B 854349 76 MOV AD_TEMP,AD_DATA+3 ;顯示通道2輸入電壓值
006E 31CA 77 CALL TUNBCD
0070 754F02 78 MOV LCD_X,#2 ;設置顯示位置
0073 120186 79 LCALL LCD_CONV2
80
0076 854049 81 MOV AD_TEMP,AD_DATA ;顯示通道3輸入電壓值
0079 31CA 82 CALL TUNBCD
007B 754F0B 83 MOV LCD_X,#11 ;設置顯示位置
007E 120186 84 LCALL LCD_CONV2
85
0081 80CD 86 JMP START2
87
88 ;==========================================================
89
90 ; LCD 初始化顯示子程序
91
92 ;==========================================================
93
0083 94 SET_LCD1:
0083 C2A2 95 CLR LCD_EN
0085 11F1 96 CALL INIT_LCD ;初始化 LCD
0087 3116 97 CALL DELAY1
0089 900098 98 MOV DPTR,#INFO1 ;指針指到顯示信息1
008C 7401 99 MOV A,#1 ;顯示在第一行
008E 311F 100 CALL LCD_SHOW
0090 9000A9 101 MOV DPTR,#INFO2 ;指針指到顯示信息2
0093 7402 102 MOV A,#2 ;顯示在第二行
0095 311F 103 CALL LCD_SHOW
0097 22 104 RET
105
0098 20202020 106 INFO1: DB " PCF-8591 ",0 ;LCD 第一行顯示信息
009C 5043462D
00A0 38353931
00A4 20202020
00A8 00
107
00A9 41442D44 108 INFO2: DB "AD-DA CONVERTER",0 ;LCD 第二行顯示信息
00AD 41202043
00B1 4F4E5645
00B5 52544552
00B9 00
109
110
00BA 111 SET_LCD2:
00BA C2A2 112 CLR LCD_EN
00BC 11F1 113 CALL INIT_LCD ;初始化 LCD
00BE 3116 114 CALL DELAY1
00C0 9000CF 115 MOV DPTR,#INFO3 ;指針指到顯示信息1
A51 MACRO ASSEMBLER PCF8591_LCD1602_4CH_XIANSHI 12/20/2006 22:59:54 PAGE 3
00C3 7401 116 MOV A,#1 ;顯示在第一行
00C5 311F 117 CALL LCD_SHOW
00C7 9000E0 118 MOV DPTR,#INFO4 ;指針指到顯示信息2
00CA 7402 119 MOV A,#2 ;顯示在第二行
00CC 311F 120 CALL LCD_SHOW
00CE 22 121 RET
122
00CF 305F2020 123 INFO3: DB "0_ V 1_ V",0 ;LCD 第一行顯示信息
00D3 20205620
00D7 20315F20
00DB 20202056
00DF 00
124
00E0 325F2020 125 INFO4: DB "2_ V 3_ V",0 ;LCD 第二行顯示信息
00E4 20205620
00E8 20335F20
00EC 20202056
00F0 00
126
127 ;==========================================================
128
129 ; LCD 接口初始化
130
131 ;==========================================================
00F1 132 INIT_LCD:
00F1 3116 133 CALL DELAY1 ;延時15ms,等待LCD供電穩(wěn)定
00F3 3116 134 CALL DELAY1
00F5 3116 135 CALL DELAY1
136
00F7 7438 137 MOV A,#38H ;雙列顯示,字形5*7點陣
00F9 314D 138 CALL WCOM
00FB 3116 139 CALL DELAY1
00FD 7438 140 MOV A,#38H ;雙列顯示,字形5*7點陣
00FF 314D 141 CALL WCOM
0101 3116 142 CALL DELAY1
0103 7438 143 MOV A,#38H ;雙列顯示,字形5*7點陣
0105 314D 144 CALL WCOM
0107 3116 145 CALL DELAY1
0109 740C 146 MOV A,#0CH ;開顯示,關光標,
010B 314D 147 CALL WCOM
010D 3116 148 CALL DELAY1
010F 7401 149 MOV A,#01H ;清除 LCD 顯示屏
0111 314D 150 CALL WCOM
0113 3116 151 CALL DELAY1
0115 22 152 RET
153 ;==========================================================
0116 154 DELAY1: ;延時5MS
0116 7E19 155 MOV R6,#25
0118 156 DEL:
0118 7F64 157 MOV R7,#100
011A DFFE 158 DJNZ R7,$
011C DEFA 159 DJNZ R6,DEL
011E 22 160 RET
161 ;==========================================================
162
163 ;在LCD的第一行或第二行顯示信息字符
164
165 ;==========================================================
011F 166 LCD_SHOW:
167
011F B4010C 168 CJNE A,#1,LINE2 ;判斷是否為第一行
0122 169 LINE1:
0122 7480 170 MOV A,#80H ;設置 LCD 的第一行地址
0124 314D 171 CALL WCOM ;寫入命令
0126 3144 172 CALL CLR_LINE ;清除該行字符數(shù)據(jù)
0128 7480 173 MOV A,#80H ;設置 LCD 的第一行地址
A51 MACRO ASSEMBLER PCF8591_LCD1602_4CH_XIANSHI 12/20/2006 22:59:54 PAGE 4
012A 314D 174 CALL WCOM ;寫入命令
012C 800A 175 JMP FILL
012E 176 LINE2:
012E 74C0 177 MOV A,#0C0H ;設置 LCD 的第二行地址
0130 314D 178 CALL WCOM ;寫入命令
0132 3144 179 CALL CLR_LINE ;清除該行字符數(shù)據(jù)
0134 74C0 180 MOV A,#0C0H ;設置 LCD 的第二行地址
0136 314D 181 CALL WCOM
0138 182 FILL:
0138 E4 183 CLR A ;填入字符
0139 93 184 MOVC A,@A+DPTR ;由消息區(qū)取出字符
013A B40001 185 CJNE A,#0,LC1 ;判斷是否為結束碼
013D 22 186 RET
013E 187 LC1:
013E 315A 188 CALL WDATA ;寫入數(shù)據(jù)
0140 A3 189 INC DPTR ;指針加1
0141 80F5 190 JMP FILL ;繼續(xù)填入字符
0143 22 191 RET
192 ;---------------------------------------------------------
0144 193 CLR_LINE: ;清除該行 LCD 的字符
0144 7818 194 MOV R0,#24
0146 195 CL1:
0146 7420 196 MOV A,#' '
0148 315A 197 CALL WDATA
014A D8FA 198 DJNZ R0,CL1
014C 22 199 RET
200 ;==========================================================
201
202 ;寫指令使能子程序
203 ;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
204
205 ;==========================================================
014D 206 WCOM:
014D F580 207 MOV P0,A
014F C2A0 208 CLR LCD_RS
0151 C2A1 209 CLR LCD_RW
0153 D2A2 210 SETB LCD_EN
0155 3167 211 CALL DELAY0
0157 C2A2 212 CLR LCD_EN
0159 22 213 RET
214 ;==========================================================
215
216 ;寫數(shù)據(jù)使能子程序
217 ;RS=H,RW=L,D0-D7=數(shù)據(jù),E=高脈沖
218
219 ;==========================================================
015A 220 WDATA:
015A F580 221 MOV P0,A
015C D2A0 222 SETB LCD_RS
015E C2A1 223 CLR LCD_RW
0160 D2A2 224 SETB LCD_EN
0162 3167 225 CALL DELAY0
0164 C2A2 226 CLR LCD_EN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -