; .\123\main.SRC generated from: 123\main.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE 123\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) SRC(.\123\main.SRC)
$NOMOD51
NAME MAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
p10 BIT 090H.0
SM1 BIT 098H.6
TL1 DATA 08BH
p11 BIT 090H.1
SM2 BIT 098H.5
p12 BIT 090H.2
p13 BIT 090H.3
PT0 BIT 0B8H.1
ep BIT 0A0H.2
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
p24 BIT 0A0H.4
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
rs BIT 0A0H.0
REN BIT 098H.4
rw BIT 0A0H.1
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?_delay?MAIN SEGMENT CODE
?PR?lcd_bz?MAIN SEGMENT CODE
?BI?lcd_bz?MAIN SEGMENT BIT OVERLAYABLE
?PR?_lcd_wcmd?MAIN SEGMENT CODE
?PR?_lcd_pos?MAIN SEGMENT CODE
?PR?_lcd_wdat?MAIN SEGMENT CODE
?PR?lcd_init?MAIN SEGMENT CODE
?PR?main?MAIN SEGMENT CODE
?DT?main?MAIN SEGMENT DATA OVERLAYABLE
?C_INITSEG SEGMENT CODE
?CO?MAIN SEGMENT CODE
?DT?MAIN SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC bzw
PUBLIC dis3
PUBLIC dis2
PUBLIC dis1
PUBLIC main
PUBLIC lcd_init
PUBLIC _lcd_wdat
PUBLIC _lcd_pos
PUBLIC _lcd_wcmd
PUBLIC lcd_bz
PUBLIC _delay
RSEG ?DT?main?MAIN
?main?BYTE:
j?650: DS 1
RSEG ?BI?lcd_bz?MAIN
?lcd_bz?BIT:
result?142: DBIT 1
RSEG ?DT?MAIN
bzw: DS 26
RSEG ?CO?MAIN
dis1:
DB '1' ,000H
DB 000H,000H,000H,000H,000H,000H,000H
DB 'a' ,'i' ,'r' ,000H
DB 000H,000H,000H,000H,000H
DB 'r' ,'i' ,'c' ,'e' ,000H
DB 000H,000H,000H,000H
DB 't' ,'r' ,'e' ,'e' ,000H
DB 000H,000H,000H,000H
DB 's' ,'e' ,'a' ,000H
DB 000H,000H,000H,000H,000H
DB 'h' ,'a' ,'i' ,'r' ,000H
DB 000H,000H,000H,000H
DB 'm' ,'e' ,'a' ,'t' ,000H
DB 000H,000H,000H,000H
DB 'h' ,'e' ,000H
DB 000H,000H,000H,000H,000H,000H
DB 's' ,'h' ,'e' ,000H
DB 000H,000H,000H,000H,000H
DB 'g' ,'o' ,'o' ,'d' ,000H
DB 000H,000H,000H,000H
DB 'n' ,'i' ,'c' ,'e' ,000H
DB 000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H
dis2:
DB 'r' ,'a' ,'t' ,'e' ,000H
dis3:
DB '0' ,'%' ,000H
DB 000H,000H,000H,000H,000H,000H
DB '1' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '2' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '3' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '4' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '5' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '6' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '7' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '8' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '9' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '1' ,'0' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H
RSEG ?C_INITSEG
DB 01AH
DB bzw
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
;
; //#include <reg51.h>
;
;
;
; #ifndef __REG51_H__
; #define __REG51_H__
;
; /* BYTE Register */
; sfr P0 = 0x80;
; sfr P1 = 0x90;
; sfr P2 = 0xA0;
; sfr P3 = 0xB0;
; sfr PSW = 0xD0;
; sfr ACC = 0xE0;
; sfr B = 0xF0;
; sfr SP = 0x81;
; sfr DPL = 0x82;
; sfr DPH = 0x83;
; sfr PCON = 0x87;
; sfr TCON = 0x88;
; sfr TMOD = 0x89;
; sfr TL0 = 0x8A;
; sfr TL1 = 0x8B;
; sfr TH0 = 0x8C;
; sfr TH1 = 0x8D;
; sfr IE = 0xA8;
; sfr IP = 0xB8;
; sfr SCON = 0x98;
; sfr SBUF = 0x99;
;
;
; /* BIT Register */
; /* PSW */
; sbit CY = 0xD7;
; sbit AC = 0xD6;
; sbit F0 = 0xD5;
; sbit RS1 = 0xD4;
; sbit RS0 = 0xD3;
; sbit OV = 0xD2;
; sbit P = 0xD0;
;
; /* TCON */
; sbit TF1 = 0x8F;
; sbit TR1 = 0x8E;
; sbit TF0 = 0x8D;
; sbit TR0 = 0x8C;
; sbit IE1 = 0x8B;
; sbit IT1 = 0x8A;
; sbit IE0 = 0x89;
; sbit IT0 = 0x88;
;
; /* IE */
; sbit EA = 0xAF;
; sbit ES = 0xAC;
; sbit ET1 = 0xAB;
; sbit EX1 = 0xAA;
; sbit ET0 = 0xA9;
; sbit EX0 = 0xA8;
;
; /* IP */
; sbit PS = 0xBC;
; sbit PT1 = 0xBB;
; sbit PX1 = 0xBA;
; sbit PT0 = 0xB9;
; sbit PX0 = 0xB8;
;
; /* P3 */
; sbit RD = 0xB7;
; sbit WR = 0xB6;
; sbit T1 = 0xB5;
; sbit T0 = 0xB4;
; sbit INT1 = 0xB3;
; sbit INT0 = 0xB2;
; sbit TXD = 0xB1;
; sbit RXD = 0xB0;
;
; /* SCON */
; sbit SM0 = 0x9F;
; sbit SM1 = 0x9E;
; sbit SM2 = 0x9D;
; sbit REN = 0x9C;
; sbit TB8 = 0x9B;
; sbit RB8 = 0x9A;
; sbit TI = 0x99;
; sbit RI = 0x98;
;
; #endif
;
;
;
;
; #include <intrins.h>
;
; sbit rs= P2^0;
; sbit rw = P2^1;
; sbit ep = P2^2;
; sbit p10=0x90;
; sbit p11=0x91;
; sbit p12=0x92;
; sbit p13=0x93;
; sbit p24=0xA4;
;
; unsigned char code dis1[12][9] = {"1","air","rice","tree","sea","hair","meat","he","she","good","nice"};
; unsigned char code dis2[] = {"rate"};
; unsigned char code dis3[11][9]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"};
; unsigned int bzw[13]={2,2,2,2,2,2,2,2,2,2,2,2,2};
; void delay(unsigned char ms)
RSEG ?PR?_delay?MAIN
_delay:
USING 0
; SOURCE LINE # 108
;---- Variable 'i?041' assigned to Register 'R6' ----
;---- Variable 'ms?040' assigned to Register 'R7' ----
; {
; SOURCE LINE # 109
?C0001:
; unsigned char i;
; while(ms--)
; SOURCE LINE # 111
MOV R5,AR7
DEC R7
MOV A,R5
JZ ?C0006
; {
; SOURCE LINE # 112
; for(i = 0; i< 250; i++)
; SOURCE LINE # 113
CLR A
MOV R6,A
?C0003:
MOV A,R6
CLR C
SUBB A,#0FAH
MOV A,#080H
SUBB A,#080H
JNC ?C0001
; {
; SOURCE LINE # 114
; _nop_();
; SOURCE LINE # 115
NOP
; _nop_();
; SOURCE LINE # 116
NOP
; _nop_();
; SOURCE LINE # 117
NOP
; _nop_();
; SOURCE LINE # 118
NOP
; }
; SOURCE LINE # 119
INC R6
SJMP ?C0003
; }
; SOURCE LINE # 120
; }
; SOURCE LINE # 121
?C0006:
RET
; END OF _delay
;
; bit lcd_bz()
RSEG ?PR?lcd_bz?MAIN
lcd_bz:
; SOURCE LINE # 123
; {
; SOURCE LINE # 124
; bit result;
; rs = 0;
; SOURCE LINE # 126
CLR rs
; rw = 1;
; SOURCE LINE # 127
SETB rw
; ep = 1;
; SOURCE LINE # 128
SETB ep
; _nop_();
; SOURCE LINE # 129
NOP
; _nop_();
; SOURCE LINE # 130
NOP
; _nop_();
; SOURCE LINE # 131
NOP
; _nop_();
; SOURCE LINE # 132
NOP
; result =(bit)(P0 & 0x80);
; SOURCE LINE # 133
MOV A,P0
RLC A
MOV result?142,C
; ep = 0;
; SOURCE LINE # 134
CLR ep
; return result;
; SOURCE LINE # 135
MOV C,result?142
; }
; SOURCE LINE # 136
RET
; END OF lcd_bz
;
; void lcd_wcmd(unsigned char cmd) //写指令
RSEG ?PR?_lcd_wcmd?MAIN
_lcd_wcmd:
; SOURCE LINE # 138
;---- Variable 'cmd?243' assigned to Register 'R7' ----
; {
; SOURCE LINE # 139
?C0008:
; while(lcd_bz());//判断LCD是否忙碌
; SOURCE LINE # 140
LCALL lcd_bz
JC ?C0008
; rs = 0;
; SOURCE LINE # 141
CLR rs
; rw = 0; //re=0,rw=1 ;e为正脉冲
; SOURCE LINE # 142
CLR rw
; ep = 0;
; SOURCE LINE # 143
CLR ep
; _nop_();
; SOURCE LINE # 144
NOP
; _nop_();
; SOURCE LINE # 145
NOP
; P0 = cmd;
; SOURCE LINE # 146
MOV P0,R7
; _nop_();
; SOURCE LINE # 147
NOP
; _nop_();
; SOURCE LINE # 148
NOP
; _nop_();
; SOURCE LINE # 149
NOP
; _nop_();
; SOURCE LINE # 150
NOP
; ep = 1;
; SOURCE LINE # 151
SETB ep
; _nop_();
; SOURCE LINE # 152
NOP
; _nop_();
; SOURCE LINE # 153
NOP
; _nop_();
; SOURCE LINE # 154
NOP
; _nop_();
; SOURCE LINE # 155
NOP
; ep = 0;
; SOURCE LINE # 156
CLR ep
; }
; SOURCE LINE # 157
RET
; END OF _lcd_wcmd
;
; void lcd_pos(unsigned char pos) //显示位置转换程序
RSEG ?PR?_lcd_pos?MAIN
_lcd_pos:
USING 0
; SOURCE LINE # 159
;---- Variable 'pos?344' assigned to Register 'R7' ----
; {
; SOURCE LINE # 160
; lcd_wcmd(pos | 0x80); //显示第一行的地址是0x08,第二行的是0xc0。
; SOURCE LINE # 161
MOV A,R7
ORL A,#080H
MOV R7,A
LJMP _lcd_wcmd
; END OF _lcd_pos
; }
;
; void lcd_wdat(unsigned char dat) //写数据
RSEG ?PR?_lcd_wdat?MAIN
_lcd_wdat:
; SOURCE LINE # 164
;---- Variable 'dat?445' assigned to Register 'R7' ----
; {
; SOURCE LINE # 165
?C0012:
; while(lcd_bz());//判断LCD是否忙碌
; SOURCE LINE # 166
LCALL lcd_bz
JC ?C0012
; rs = 1;
; SOURCE LINE # 167
SETB rs
; rw = 0;
; SOURCE LINE # 168
CLR rw
; ep = 0;
; SOURCE LINE # 169
CLR ep
; P0 = dat;
; SOURCE LINE # 170
MOV P0,R7
; _nop_();
; SOURCE LINE # 171
NOP
; _nop_();
; SOURCE LINE # 172
NOP
; _nop_();
; SOURCE LINE # 173
NOP
; _nop_();
; SOURCE LINE # 174
NOP
; ep = 1;
; SOURCE LINE # 175
SETB ep
; _nop_();
; SOURCE LINE # 176
NOP
; _nop_();
; SOURCE LINE # 177
NOP
; _nop_();
; SOURCE LINE # 178
NOP
; _nop_();
; SOURCE LINE # 179
NOP
; ep = 0;
; SOURCE LINE # 180
CLR ep
; }
; SOURCE LINE # 181
RET
; END OF _lcd_wdat
;
; void lcd_init() //初始化lcd
RSEG ?PR?lcd_init?MAIN
lcd_init:
USING 0
; SOURCE LINE # 183
; {
; SOURCE LINE # 184
; lcd_wcmd(0x38);
; SOURCE LINE # 185
MOV R7,#038H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 186
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x0c);
; SOURCE LINE # 187
MOV R7,#0CH
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 188
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x06);
; SOURCE LINE # 189
MOV R7,#06H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 190
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x01); //清屏
; SOURCE LINE # 191
MOV R7,#01H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 192
LJMP _delay
; END OF lcd_init
; }
;
; void main(void)
RSEG ?PR?main?MAIN
main:
USING 0
; SOURCE LINE # 195
;---- Variable 'k?647' assigned to Register 'R4' ----
;---- Variable 'count?648' assigned to Register 'R1' ----
; {
; SOURCE LINE # 196
; unsigned char i;
; unsigned char k;
; unsigned char count;
; unsigned char a;
; unsigned char j;
; lcd_init();// 初始化LCD
; SOURCE LINE # 202
LCALL lcd_init
; delay(10);j=0;
; SOURCE LINE # 203
MOV R7,#0AH
LCALL _delay
CLR A
MOV j?650,A
; i=1;
; SOURCE LINE # 204
;---- Variable 'i?646' assigned to Register 'R3' ----
MOV R3,#01H
?C0016:
; while(1){
; SOURCE LINE # 205
; delay(60);
; SOURCE LINE # 206
MOV R7,#03CH
LCALL _delay
; lcd_wcmd(0x01);//清屏指令,防止单词由长到短时出现乱码.
; SOURCE LINE # 207
MOV R7,#01H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 208
LCALL _delay
; P1=0x00; j=0;
; SOURCE LINE # 209
CLR A
MOV P1,A
MOV j?650,A
; lcd_pos(0x01);//设置显示位置
; SOURCE LINE # 210
MOV R7,#01H
LCALL _lcd_pos
;
; if(P1!=0)
; SOURCE LINE # 212
MOV R7,P1
MOV A,R7
JZ ?C0018
; {
; SOURCE LINE # 213
; switch(P1) //P1 扫行
; SOURCE LINE # 214
MOV R7,P1
MOV A,R7
ADD A,#0FEH
JZ ?C0023
ADD A,#0FEH
JZ ?C0024
ADD A,#0FCH
JZ ?C0025
ADD A,#07H
JNZ ?C0018
; {
; SOURCE LINE # 215
; case (0x01):
; SOURCE LINE # 216
?C0020:
; if(bzw[ i]==2)
; SOURCE LINE # 217
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
XRL A,#02H
ORL A,R6
JNZ ?C0021
; { count++;
; SOURCE LINE # 218
INC R1
; bzw[ i]=bzw[ i]-1; //标志位,每个单词只能使count加1.
; SOURCE LINE # 219
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
INC R0
MOV A,@R0
DEC @R0
DEC R0
JNZ ?C0037
DEC @R0
?C0037:
; if(bzw[ i]<2)
; SOURCE LINE # 220
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
CLR C
SUBB A,#02H
MOV A,R6
SUBB A,#00H
JNC ?C0021
; bzw[ i]=1;
; SOURCE LINE # 221
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV @R0,#00H
INC R0
MOV @R0,#01H
; } i++ ;
; SOURCE LINE # 222
?C0021:
INC R3
; break;//sure
; SOURCE LINE # 223
SJMP ?C0018
; case (0x02):i++;j++;
; SOURCE LINE # 224
?C0023:
INC R3
INC j?650
; bzw[ i]=2;break; //unknown
; SOURCE LINE # 225
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV @R0,#00H
INC R0
MOV @R0,#02H
SJMP ?C0018
; case (0x04):i--;break; //up
; SOURCE LINE # 226
?C0024:
DEC R3
SJMP ?C0018
; case (0x08):i++;break; //down
; SOURCE LINE # 227
?C0025:
INC R3
;
;
; } }
; SOURCE LINE # 230
?C0018:
; p24=0;
; SOURCE LINE # 231
CLR p24
; if(j==1)
; SOURCE LINE # 232
MOV A,j?650
XRL A,#01H
JNZ ?C0026
; p24=1;
; SOURCE LINE # 233
SETB p24
?C0026:
; if(i==11) i=1;
; SOURCE LINE # 234
MOV A,R3
XRL A,#0BH
JNZ ?C0027
MOV R3,#01H
?C0027:
; if(i==0) i=10;
; SOURCE LINE # 235
MOV A,R3
JNZ ?C0029
MOV R3,#0AH
?C0029:
; while(dis1[ i][k]!= '\0')
; SOURCE LINE # 236
MOV A,R3
MOV B,#09H
MUL AB
ADD A,#LOW (dis1)
MOV DPL,A
CLR A
ADDC A,#HIGH (dis1)
MOV DPH,A
MOV A,DPL
ADD A,R4
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0030
; {
; SOURCE LINE # 237
; lcd_wdat(dis1[ i][k]);//单词
; SOURCE LINE # 238
LCALL _lcd_wdat
; k++;
; SOURCE LINE # 239
INC R4
; }k=0;
; SOURCE LINE # 240
SJMP ?C0029
?C0030:
CLR A
MOV R4,A
; lcd_pos(0x42);// 设置显示位置
; SOURCE LINE # 241
MOV R7,#042H
LCALL _lcd_pos
; a = 0;
; SOURCE LINE # 242
;---- Variable 'a?649' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0031:
; while(dis2[a] != '\0')
; SOURCE LINE # 243
MOV A,R6
MOV DPTR,#dis2
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0032
; {
; SOURCE LINE # 244
; lcd_wdat(dis2[a]);// rate
; SOURCE LINE # 245
LCALL _lcd_wdat
; a++;
; SOURCE LINE # 246
INC R6
; }
; SOURCE LINE # 247
SJMP ?C0031
?C0032:
; if(count>10) count=10;
; SOURCE LINE # 248
MOV A,R1
SETB C
SUBB A,#0AH
MOV A,#080H
SUBB A,#080H
JC ?C0033
MOV R1,#0AH
?C0033:
; lcd_pos(0x48);
; SOURCE LINE # 249
MOV R7,#048H
LCALL _lcd_pos
?C0034:
; while(dis3[count][k]!= '\0')
; SOURCE LINE # 250
MOV A,R1
MOV B,#09H
MUL AB
ADD A,#LOW (dis3)
MOV DPL,A
CLR A
ADDC A,#HIGH (dis3)
MOV DPH,A
MOV A,DPL
ADD A,R4
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0035
; {
; SOURCE LINE # 251
; lcd_wdat(dis3[count][k]);//正确率
; SOURCE LINE # 252
LCALL _lcd_wdat
; k++;
; SOURCE LINE # 253
INC R4
; }k=0;
; SOURCE LINE # 254
SJMP ?C0034
?C0035:
CLR A
MOV R4,A
; }
; SOURCE LINE # 255
LJMP ?C0016
; END OF main
END
|