📄 pcf8563_test.lis
字号:
00A4 ; --------------------------------------------------------------*/
00A4 ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
00A4 ; {
00A4 .dbline 55
00A4 ; unsigned char address;
00A4 ; if(y ==0)
00A4 AA20 tst R10
00A6 19F4 brne L18
00A8 X3:
00A8 .dbline 56
00A8 ; address=0x80+x; //the first line
00A8 462F mov R20,R22
00AA 4058 subi R20,128 ; addi 128
00AC 02C0 xjmp L19
00AE L18:
00AE .dbline 58
00AE ; else
00AE ; address=0xc0+x; //the second line
00AE 462F mov R20,R22
00B0 4054 subi R20,64 ; addi 192
00B2 L19:
00B2 .dbline 59
00B2 ; LCD_write_char(address,0);
00B2 2227 clr R18
00B4 3327 clr R19
00B6 042F mov R16,R20
00B8 1127 clr R17
00BA 08D0 xcall _LCD_write_char
00BC .dbline -2
00BC L17:
00BC .dbline 0 ; func end
00BC 0C940000 xjmp pop_xgsetF00C
00C0 .dbsym r address 20 c
00C0 .dbsym r y 10 c
00C0 .dbsym r x 22 c
00C0 .dbend
00C0 .dbfunc e LCD_en_write _LCD_en_write fV
.even
00C0 _LCD_en_write::
00C0 .dbline -1
00C0 .dbline 65
00C0 ; }
00C0 ; /*-------------------------------------------------------------
00C0 ; 函数: lcd1602使能
00C0 ; *--------------------------------------------------------------*/
00C0 ; void LCD_en_write(void) //液晶使能
00C0 ; {
00C0 .dbline 66
00C0 ; LCD_EN_PORT|=LCD_EN;
00C0 AB9A sbi 0x15,3
00C2 .dbline 67
00C2 ; delay_us(5);
00C2 05E0 ldi R16,5
00C4 10E0 ldi R17,0
00C6 9EDF xcall _delay_us
00C8 .dbline 68
00C8 ; LCD_EN_PORT&=~LCD_EN;
00C8 AB98 cbi 0x15,3
00CA .dbline -2
00CA L20:
00CA .dbline 0 ; func end
00CA 0895 ret
00CC .dbend
00CC .dbfunc e LCD_write_char _LCD_write_char fV
00CC ; data_temp -> R22,R23
00CC ; command_temp -> R20,R21
00CC ; data -> R12,R13
00CC ; command -> R10,R11
.even
00CC _LCD_write_char::
00CC 0E940000 xcall push_xgsetF03C
00D0 6901 movw R12,R18
00D2 5801 movw R10,R16
00D4 .dbline -1
00D4 .dbline 76
00D4 ; }
00D4 ; /*------------------------------------------------------------
00D4 ; 函数: 写命令或数据到lcd1602
00D4 ; 参数:command: 0---写数据, 1---写命令
00D4 ; data: 所要写的命令或数据
00D4 ; *-------------------------------------------------------------*/
00D4 ; void LCD_write_char(unsigned command,unsigned data)
00D4 ; {
00D4 .dbline 78
00D4 ; unsigned command_temp,data_temp;
00D4 ; command_temp=command;
00D4 A501 movw R20,R10
00D6 .dbline 79
00D6 ; data_temp=data;
00D6 B601 movw R22,R12
00D8 .dbline 80
00D8 ; delay_us(25);
00D8 09E1 ldi R16,25
00DA 10E0 ldi R17,0
00DC 93DF xcall _delay_us
00DE .dbline 81
00DE ; if(command==0)
00DE 4030 cpi R20,0
00E0 4507 cpc R20,R21
00E2 11F5 brne L22
00E4 X4:
00E4 .dbline 82
00E4 ; {
00E4 .dbline 83
00E4 ; LCD_RS_PORT|=LCD_RS; //RS=1
00E4 AA9A sbi 0x15,2
00E6 .dbline 84
00E6 ; LCD_DATA_PORT&=0X0f;
00E6 85B3 in R24,0x15
00E8 8F70 andi R24,15
00EA 85BB out 0x15,R24
00EC .dbline 85
00EC ; LCD_DATA_PORT|=data_temp&0xf0; //写高四位
00EC CB01 movw R24,R22
00EE 807F andi R24,240
00F0 9070 andi R25,0
00F2 25B2 in R2,0x15
00F4 3324 clr R3
00F6 282A or R2,R24
00F8 392A or R3,R25
00FA 25BA out 0x15,R2
00FC .dbline 86
00FC ; LCD_en_write();
00FC E1DF xcall _LCD_en_write
00FE .dbline 87
00FE ; data_temp=data_temp<<4;
00FE 660F lsl R22
0100 771F rol R23
0102 660F lsl R22
0104 771F rol R23
0106 660F lsl R22
0108 771F rol R23
010A 660F lsl R22
010C 771F rol R23
010E .dbline 88
010E ; LCD_DATA_PORT&=0X0f;
010E 85B3 in R24,0x15
0110 8F70 andi R24,15
0112 85BB out 0x15,R24
0114 .dbline 89
0114 ; LCD_DATA_PORT|=data_temp&0xf0; //写低四位
0114 CB01 movw R24,R22
0116 807F andi R24,240
0118 9070 andi R25,0
011A 25B2 in R2,0x15
011C 3324 clr R3
011E 282A or R2,R24
0120 392A or R3,R25
0122 25BA out 0x15,R2
0124 .dbline 90
0124 ; LCD_en_write();
0124 CDDF xcall _LCD_en_write
0126 .dbline 91
0126 ; }
0126 21C0 xjmp L23
0128 L22:
0128 .dbline 93
0128 ; else
0128 ; {
0128 .dbline 94
0128 ; LCD_RS_PORT&=~LCD_RS; //RS=0
0128 AA98 cbi 0x15,2
012A .dbline 95
012A ; LCD_DATA_PORT&=0X0f;
012A 85B3 in R24,0x15
012C 8F70 andi R24,15
012E 85BB out 0x15,R24
0130 .dbline 96
0130 ; LCD_DATA_PORT|=command_temp&0xf0; //写高四位
0130 CA01 movw R24,R20
0132 807F andi R24,240
0134 9070 andi R25,0
0136 25B2 in R2,0x15
0138 3324 clr R3
013A 282A or R2,R24
013C 392A or R3,R25
013E 25BA out 0x15,R2
0140 .dbline 97
0140 ; LCD_en_write();
0140 BFDF xcall _LCD_en_write
0142 .dbline 98
0142 ; command_temp=command_temp<<4;
0142 440F lsl R20
0144 551F rol R21
0146 440F lsl R20
0148 551F rol R21
014A 440F lsl R20
014C 551F rol R21
014E 440F lsl R20
0150 551F rol R21
0152 .dbline 99
0152 ; LCD_DATA_PORT&=0x0f;
0152 85B3 in R24,0x15
0154 8F70 andi R24,15
0156 85BB out 0x15,R24
0158 .dbline 100
0158 ; LCD_DATA_PORT|=command_temp&0xf0; //写低四位
0158 CA01 movw R24,R20
015A 807F andi R24,240
015C 9070 andi R25,0
015E 25B2 in R2,0x15
0160 3324 clr R3
0162 282A or R2,R24
0164 392A or R3,R25
0166 25BA out 0x15,R2
0168 .dbline 101
0168 ; LCD_en_write();
0168 ABDF xcall _LCD_en_write
016A .dbline 102
016A ; }
016A L23:
016A .dbline -2
016A L21:
016A .dbline 0 ; func end
016A 0C940000 xjmp pop_xgsetF03C
016E .dbsym r data_temp 22 i
016E .dbsym r command_temp 20 i
016E .dbsym r data 12 i
016E .dbsym r command 10 i
016E .dbend
016E .dbfunc e clear _clear fV
016E ; i -> R20
.even
016E _clear::
016E 4A93 st -y,R20
0170 .dbline -1
0170 .dbline 108
0170 ; }
0170 ; /*-------------------------------------------------------------
0170 ; 函数: 清屏lcd1602
0170 ; ---------------------------------------------------------------*/
0170 ; void clear(void)
0170 ; {
0170 .dbline 110
0170 ; unsigned char i;
0170 ; LCD_set_xy(0,0);
0170 2227 clr R18
0172 0027 clr R16
0174 93DF xcall _LCD_set_xy
0176 .dbline 111
0176 ; for(i=0;i<16;i++)
0176 4427 clr R20
0178 06C0 xjmp L28
017A L25:
017A .dbline 112
017A ; LCD_write_char(0,' ');
017A 20E2 ldi R18,32
017C 30E0 ldi R19,0
017E 0027 clr R16
0180 1127 clr R17
0182 A4DF xcall _LCD_write_char
0184 L26:
0184 .dbline 111
0184 4395 inc R20
0186 L28:
0186 .dbline 111
0186 4031 cpi R20,16
0188 C0F3 brlo L25
018A X5:
018A .dbline 113
018A ; LCD_set_xy(0,1);
018A 21E0 ldi R18,1
018C 0027 clr R16
018E 86DF xcall _LCD_set_xy
0190 .dbline 114
0190 ; for(i=0;i<16;i++)
0190 4427 clr R20
0192 06C0 xjmp L32
0194 L29:
0194 .dbline 115
0194 ; LCD_write_char(0,' ');
0194 20E2 ldi R18,32
0196 30E0 ldi R19,0
0198 0027 clr R16
019A 1127 clr R17
019C 97DF xcall _LCD_write_char
019E L30:
019E .dbline 114
019E 4395 inc R20
01A0 L32:
01A0 .dbline 114
01A0 4031 cpi R20,16
01A2 C0F3 brlo L29
01A4 X6:
01A4 .dbline -2
01A4 L24:
01A4 .dbline 0 ; func end
01A4 4991 ld R20,y+
01A6 0895 ret
01A8 .dbsym r i 20 c
01A8 .dbend
01A8 .dbfunc e LCD_write_string _LCD_write_string fV
01A8 ; s -> R20,R21
01A8 ; Y -> R12
01A8 ; X -> R10
.even
01A8 _LCD_write_string::
01A8 0E940000 xcall push_xgset303C
01AC C22E mov R12,R18
01AE A02E mov R10,R16
01B0 4E81 ldd R20,y+6
01B2 5F81 ldd R21,y+7
01B4 .dbline -1
01B4 .dbline 123
01B4 ; }
01B4 ; /*-------------------------------------------------------------
01B4 ; 函数: 写字符串
01B4 ; 参数:列---X=0~15,行---Y=0~1 写地址
01B4 ; s为所要写的字符串
01B4 ; ---------------------------------------------------------------*/
01B4 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
01B4 ; {
01B4 .dbline 124
01B4 ; LCD_set_xy(X,Y);
01B4 2C2D mov R18,R12
01B6 0A2D mov R16,R10
01B8 71DF xcall _LCD_set_xy
01BA 08C0 xjmp L35
01BC L34:
01BC .dbline 126
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -