📄 24cxx_test.lis
字号:
039E .dbline 0 ; func end
039E 0895 ret
03A0 .dbend
03A0 .dbfunc e LCD_set_xy _LCD_set_xy fV
03A0 ; address -> R20
03A0 ; y -> R10
03A0 ; x -> R22
.even
03A0 _LCD_set_xy::
03A0 0E940000 xcall push_xgsetF00C
03A4 A22E mov R10,R18
03A6 602F mov R22,R16
03A8 .dbline -1
03A8 .dbline 53
03A8 ; }
03A8 ;
03A8 ; /*------------------------------------------------------------
03A8 ; 函数: 设置显示地址
03A8 ; para: x---the display address of a line limit: 0---15
03A8 ; y---the display line limit 0 or 1
03A8 ; --------------------------------------------------------------*/
03A8 ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
03A8 ; {
03A8 .dbline 55
03A8 ; unsigned char address;
03A8 ; if(y ==0)
03A8 AA20 tst R10
03AA 19F4 brne L82
03AC X30:
03AC .dbline 56
03AC ; address=0x80+x; //the first line
03AC 462F mov R20,R22
03AE 4058 subi R20,128 ; addi 128
03B0 02C0 xjmp L83
03B2 L82:
03B2 .dbline 58
03B2 ; else
03B2 ; address=0xc0+x; //the second line
03B2 462F mov R20,R22
03B4 4054 subi R20,64 ; addi 192
03B6 L83:
03B6 .dbline 59
03B6 ; LCD_write_char(address,0);
03B6 2227 clr R18
03B8 3327 clr R19
03BA 042F mov R16,R20
03BC 1127 clr R17
03BE 08D0 xcall _LCD_write_char
03C0 .dbline -2
03C0 L81:
03C0 .dbline 0 ; func end
03C0 0C940000 xjmp pop_xgsetF00C
03C4 .dbsym r address 20 c
03C4 .dbsym r y 10 c
03C4 .dbsym r x 22 c
03C4 .dbend
03C4 .dbfunc e LCD_en_write _LCD_en_write fV
.even
03C4 _LCD_en_write::
03C4 .dbline -1
03C4 .dbline 65
03C4 ; }
03C4 ; /*-------------------------------------------------------------
03C4 ; 函数: lcd1602使能
03C4 ; *--------------------------------------------------------------*/
03C4 ; void LCD_en_write(void) //液晶使能
03C4 ; {
03C4 .dbline 66
03C4 ; LCD_EN_PORT|=LCD_EN;
03C4 AB9A sbi 0x15,3
03C6 .dbline 67
03C6 ; delay_us(5);
03C6 05E0 ldi R16,5
03C8 10E0 ldi R17,0
03CA 1CDE xcall _delay_us
03CC .dbline 68
03CC ; LCD_EN_PORT&=~LCD_EN;
03CC AB98 cbi 0x15,3
03CE .dbline -2
03CE L84:
03CE .dbline 0 ; func end
03CE 0895 ret
03D0 .dbend
03D0 .dbfunc e LCD_write_char _LCD_write_char fV
03D0 ; data_temp -> R22,R23
03D0 ; command_temp -> R20,R21
03D0 ; data -> R12,R13
03D0 ; command -> R10,R11
.even
03D0 _LCD_write_char::
03D0 0E940000 xcall push_xgsetF03C
03D4 6901 movw R12,R18
03D6 5801 movw R10,R16
03D8 .dbline -1
03D8 .dbline 76
03D8 ; }
03D8 ; /*------------------------------------------------------------
03D8 ; 函数: 写命令或数据到lcd1602
03D8 ; 参数:command: 0---写数据, 1---写命令
03D8 ; data: 所要写的命令或数据
03D8 ; *-------------------------------------------------------------*/
03D8 ; void LCD_write_char(unsigned command,unsigned data)
03D8 ; {
03D8 .dbline 78
03D8 ; unsigned command_temp,data_temp;
03D8 ; command_temp=command;
03D8 A501 movw R20,R10
03DA .dbline 79
03DA ; data_temp=data;
03DA B601 movw R22,R12
03DC .dbline 80
03DC ; delay_us(25);
03DC 09E1 ldi R16,25
03DE 10E0 ldi R17,0
03E0 11DE xcall _delay_us
03E2 .dbline 81
03E2 ; if(command==0)
03E2 4030 cpi R20,0
03E4 4507 cpc R20,R21
03E6 11F5 brne L86
03E8 X31:
03E8 .dbline 82
03E8 ; {
03E8 .dbline 83
03E8 ; LCD_RS_PORT|=LCD_RS; //RS=1
03E8 AA9A sbi 0x15,2
03EA .dbline 84
03EA ; LCD_DATA_PORT&=0X0f;
03EA 85B3 in R24,0x15
03EC 8F70 andi R24,15
03EE 85BB out 0x15,R24
03F0 .dbline 85
03F0 ; LCD_DATA_PORT|=data_temp&0xf0; //写高四位
03F0 CB01 movw R24,R22
03F2 807F andi R24,240
03F4 9070 andi R25,0
03F6 25B2 in R2,0x15
03F8 3324 clr R3
03FA 282A or R2,R24
03FC 392A or R3,R25
03FE 25BA out 0x15,R2
0400 .dbline 86
0400 ; LCD_en_write();
0400 E1DF xcall _LCD_en_write
0402 .dbline 87
0402 ; data_temp=data_temp<<4;
0402 660F lsl R22
0404 771F rol R23
0406 660F lsl R22
0408 771F rol R23
040A 660F lsl R22
040C 771F rol R23
040E 660F lsl R22
0410 771F rol R23
0412 .dbline 88
0412 ; LCD_DATA_PORT&=0X0f;
0412 85B3 in R24,0x15
0414 8F70 andi R24,15
0416 85BB out 0x15,R24
0418 .dbline 89
0418 ; LCD_DATA_PORT|=data_temp&0xf0; //写低四位
0418 CB01 movw R24,R22
041A 807F andi R24,240
041C 9070 andi R25,0
041E 25B2 in R2,0x15
0420 3324 clr R3
0422 282A or R2,R24
0424 392A or R3,R25
0426 25BA out 0x15,R2
0428 .dbline 90
0428 ; LCD_en_write();
0428 CDDF xcall _LCD_en_write
042A .dbline 91
042A ; }
042A 21C0 xjmp L87
042C L86:
042C .dbline 93
042C ; else
042C ; {
042C .dbline 94
042C ; LCD_RS_PORT&=~LCD_RS; //RS=0
042C AA98 cbi 0x15,2
042E .dbline 95
042E ; LCD_DATA_PORT&=0X0f;
042E 85B3 in R24,0x15
0430 8F70 andi R24,15
0432 85BB out 0x15,R24
0434 .dbline 96
0434 ; LCD_DATA_PORT|=command_temp&0xf0; //写高四位
0434 CA01 movw R24,R20
0436 807F andi R24,240
0438 9070 andi R25,0
043A 25B2 in R2,0x15
043C 3324 clr R3
043E 282A or R2,R24
0440 392A or R3,R25
0442 25BA out 0x15,R2
0444 .dbline 97
0444 ; LCD_en_write();
0444 BFDF xcall _LCD_en_write
0446 .dbline 98
0446 ; command_temp=command_temp<<4;
0446 440F lsl R20
0448 551F rol R21
044A 440F lsl R20
044C 551F rol R21
044E 440F lsl R20
0450 551F rol R21
0452 440F lsl R20
0454 551F rol R21
0456 .dbline 99
0456 ; LCD_DATA_PORT&=0x0f;
0456 85B3 in R24,0x15
0458 8F70 andi R24,15
045A 85BB out 0x15,R24
045C .dbline 100
045C ; LCD_DATA_PORT|=command_temp&0xf0; //写低四位
045C CA01 movw R24,R20
045E 807F andi R24,240
0460 9070 andi R25,0
0462 25B2 in R2,0x15
0464 3324 clr R3
0466 282A or R2,R24
0468 392A or R3,R25
046A 25BA out 0x15,R2
046C .dbline 101
046C ; LCD_en_write();
046C ABDF xcall _LCD_en_write
046E .dbline 102
046E ; }
046E L87:
046E .dbline -2
046E L85:
046E .dbline 0 ; func end
046E 0C940000 xjmp pop_xgsetF03C
0472 .dbsym r data_temp 22 i
0472 .dbsym r command_temp 20 i
0472 .dbsym r data 12 i
0472 .dbsym r command 10 i
0472 .dbend
0472 .dbfunc e clear _clear fV
0472 ; i -> R20
.even
0472 _clear::
0472 4A93 st -y,R20
0474 .dbline -1
0474 .dbline 108
0474 ; }
0474 ; /*-------------------------------------------------------------
0474 ; 函数: 清屏lcd1602
0474 ; ---------------------------------------------------------------*/
0474 ; void clear(void)
0474 ; {
0474 .dbline 110
0474 ; unsigned char i;
0474 ; LCD_set_xy(0,0);
0474 2227 clr R18
0476 0027 clr R16
0478 93DF xcall _LCD_set_xy
047A .dbline 111
047A ; for(i=0;i<16;i++)
047A 4427 clr R20
047C 06C0 xjmp L92
047E L89:
047E .dbline 112
047E ; LCD_write_char(0,' ');
047E 20E2 ldi R18,32
0480 30E0 ldi R19,0
0482 0027 clr R16
0484 1127 clr R17
0486 A4DF xcall _LCD_write_char
0488 L90:
0488 .dbline 111
0488 4395 inc R20
048A L92:
048A .dbline 111
048A 4031 cpi R20,16
048C C0F3 brlo L89
048E X32:
048E .dbline 113
048E ; LCD_set_xy(0,1);
048E 21E0 ldi R18,1
0490 0027 clr R16
0492 86DF xcall _LCD_set_xy
0494 .dbline 114
0494 ; for(i=0;i<16;i++)
0494 4427 clr R20
0496 06C0 xjmp L96
0498 L93:
0498 .dbline 115
0498 ; LCD_write_char(0,' ');
0498 20E2 ldi R18,32
049A 30E0 ldi R19,0
049C 0027 clr R16
049E 1127 clr R17
04A0 97DF xcall _LCD_write_char
04A2 L94:
04A2 .dbline 114
04A2 4395 inc R20
04A4 L96:
04A4 .dbline 114
04A4 4031 cpi R20,16
04A6 C0F3 brlo L93
04A8 X33:
04A8 .dbline -2
04A8 L88:
04A8 .dbline 0 ; func end
04A8 4991 ld R20,y+
04AA 0895 ret
04AC .dbsym r i 20 c
04AC .dbend
04AC .dbfunc e LCD_write_string _LCD_write_string fV
04AC ; s -> R20,R21
04AC ; Y -> R12
04AC ; X -> R10
.even
04AC _LCD_write_string::
04AC 0E940000 xcall push_xgset303C
04B0 C22E mov R12,R18
04B2 A02E mov R10,R16
04B4 4E81 ldd R20,y+6
04B6 5F81 ldd R21,y+7
04B8 .dbline -1
04B8 .dbline 123
04B8 ; }
04B8 ; /*-------------------------------------------------------------
04B8 ; 函数: 写字符串
04B8 ; 参数:列---X=0~15,行---Y=0~1 写地址
04B8 ; s为所要写的字符串
04B8 ; ---------------------------------------------------------------*/
04B8 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
04B8 ; {
04B8 .dbline 124
04B8 ; LCD_set_xy(X,Y);
04B8 2C2D mov R18,R12
04BA 0A2D mov R16,R10
04BC 71DF xcall _LCD_set_xy
04BE 08C0 xjmp L99
04C0 L98:
04C0 .dbline 126
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -