📄 lcd.lis
字号:
011A .dbline 0 ; func end
011A 0895 ret
011C .dbend
011C .dbfunc e LCD_display_char _LCD_display_char fV
011C ; data -> y+4
011C ; y -> R22,R23
011C ; x -> R20,R21
.even
011C _LCD_display_char::
011C 00D0 rcall push_gset2
011E 622F mov R22,R18
0120 732F mov R23,R19
0122 402F mov R20,R16
0124 512F mov R21,R17
0126 .dbline -1
0126 .dbline 92
0126 ; }
0126 ; void LCD_display_char(int x,int y,unsigned char data)
0126 ; {
0126 .dbline 93
0126 ; LCD_set_xy(x,y); //写地址函数
0126 262F mov R18,R22
0128 372F mov R19,R23
012A 042F mov R16,R20
012C 152F mov R17,R21
012E C8DF rcall _LCD_set_xy
0130 .dbline 94
0130 ; LCD_write_char(0,data);
0130 2C81 ldd R18,y+4
0132 3327 clr R19
0134 0027 clr R16
0136 1127 clr R17
0138 02D0 rcall _LCD_write_char
013A .dbline -2
013A L14:
013A 00D0 rcall pop_gset2
013C .dbline 0 ; func end
013C 0895 ret
013E .dbsym l data 4 c
013E .dbsym r y 22 I
013E .dbsym r x 20 I
013E .dbend
013E .dbfunc e LCD_write_char _LCD_write_char fV
013E ; data -> R22,R23
013E ; command -> R20,R21
.even
013E _LCD_write_char::
013E 00D0 rcall push_gset2
0140 622F mov R22,R18
0142 732F mov R23,R19
0144 402F mov R20,R16
0146 512F mov R21,R17
0148 .dbline -1
0148 .dbline 98
0148 ; }
0148 ;
0148 ; void LCD_write_char(unsigned command,unsigned data) // 写数据
0148 ; {
0148 .dbline 100
0148 ;
0148 ; delay_nus(16);
0148 00E1 ldi R16,16
014A 10E0 ldi R17,0
014C 26D0 rcall _delay_nus
014E .dbline 101
014E ; if(command==0)
014E 4030 cpi R20,0
0150 4507 cpc R20,R21
0152 49F4 brne L16
0154 X2:
0154 .dbline 102
0154 ; {
0154 .dbline 103
0154 ; LCD_RS_PORT|=LCD_RS; //RS=1
0154 5B9A sbi 0xb,3
0156 .dbline 104
0156 ; LCD_EN_PORT&=~LCD_EN;
0156 5C98 cbi 0xb,4
0158 .dbline 105
0158 ; LCD_DATA_PORT=data;
0158 65B9 out 0x5,R22
015A .dbline 106
015A ; LCD_EN_PORT|=LCD_EN;
015A 5C9A sbi 0xb,4
015C .dbline 108
015C ;
015C ; delay_nus(50);
015C 02E3 ldi R16,50
015E 10E0 ldi R17,0
0160 1CD0 rcall _delay_nus
0162 .dbline 109
0162 ; LCD_EN_PORT&=~LCD_EN;
0162 5C98 cbi 0xb,4
0164 .dbline 110
0164 ; }
0164 08C0 rjmp L17
0166 L16:
0166 .dbline 112
0166 .dbline 113
0166 5B98 cbi 0xb,3
0168 .dbline 114
0168 5C98 cbi 0xb,4
016A .dbline 115
016A 45B9 out 0x5,R20
016C .dbline 116
016C 5C9A sbi 0xb,4
016E .dbline 118
016E 02E3 ldi R16,50
0170 10E0 ldi R17,0
0172 13D0 rcall _delay_nus
0174 .dbline 119
0174 5C98 cbi 0xb,4
0176 .dbline 120
0176 L17:
0176 .dbline -2
0176 L15:
0176 00D0 rcall pop_gset2
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbsym r data 22 i
017A .dbsym r command 20 i
017A .dbend
017A .dbfunc e port_init _port_init fV
.even
017A _port_init::
017A .dbline -1
017A .dbline 124
017A ; else
017A ; {
017A ; LCD_RS_PORT&=~LCD_RS; //RS=0
017A ; LCD_EN_PORT&=~LCD_EN;
017A ; LCD_DATA_PORT=command;
017A ; LCD_EN_PORT|=LCD_EN;
017A ;
017A ; delay_nus(50);
017A ; LCD_EN_PORT&=~LCD_EN;
017A ; }
017A ; }
017A ;
017A ; void port_init(void)
017A ; {
017A .dbline 125
017A ; PORTB = 0x1B;
017A 8BE1 ldi R24,27
017C 85B9 out 0x5,R24
017E .dbline 126
017E ; DDRB = 0xFF;
017E 8FEF ldi R24,255
0180 84B9 out 0x4,R24
0182 .dbline 127
0182 ; PORTC = 0x03; //m103 output only
0182 83E0 ldi R24,3
0184 88B9 out 0x8,R24
0186 .dbline 128
0186 ; DDRC = 0x03;
0186 87B9 out 0x7,R24
0188 .dbline 129
0188 ; PORTD = 0x00;
0188 2224 clr R2
018A 2BB8 out 0xb,R2
018C .dbline 130
018C ; DDRD = 0x18;
018C 88E1 ldi R24,24
018E 8AB9 out 0xa,R24
0190 .dbline -2
0190 L18:
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbend
0192 .dbfunc e init_devices _init_devices fV
.even
0192 _init_devices::
0192 .dbline -1
0192 .dbline 135
0192 ; }
0192 ;
0192 ; //call this routine to initialize all peripherals
0192 ; void init_devices(void)
0192 ; {
0192 .dbline 137
0192 ; //stop errant interrupts until set up
0192 ; port_init();
0192 F3DF rcall _port_init
0194 .dbline -2
0194 L19:
0194 .dbline 0 ; func end
0194 0895 ret
0196 .dbend
0196 .dbfunc e delay_1us _delay_1us fV
.even
0196 _delay_1us::
0196 .dbline -1
0196 .dbline 146
0196 ; //all peripherals are now initialized
0196 ; }
0196 ;
0196 ; /*-----------------------------------------------------------------------
0196 ; 延时函数
0196 ; 系统时钟:8M
0196 ; -----------------------------------------------------------------------*/
0196 ; void delay_1us(void) //1us延时函数
0196 ; {
0196 .dbline 147
0196 ; asm("nop");
0196 0000 nop
0198 .dbline -2
0198 L20:
0198 .dbline 0 ; func end
0198 0895 ret
019A .dbend
019A .dbfunc e delay_nus _delay_nus fV
019A ; i -> R20,R21
019A ; n -> R22,R23
.even
019A _delay_nus::
019A 00D0 rcall push_gset2
019C 602F mov R22,R16
019E 712F mov R23,R17
01A0 .dbline -1
01A0 .dbline 151
01A0 ; }
01A0 ;
01A0 ; void delay_nus(unsigned int n) //N us延时函数
01A0 ; {
01A0 .dbline 152
01A0 ; unsigned int i=0;
01A0 4427 clr R20
01A2 5527 clr R21
01A4 .dbline 153
01A4 ; for (i=0;i<n;i++)
01A4 03C0 rjmp L25
01A6 L22:
01A6 .dbline 154
01A6 F7DF rcall _delay_1us
01A8 L23:
01A8 .dbline 153
01A8 4F5F subi R20,255 ; offset = 1
01AA 5F4F sbci R21,255
01AC L25:
01AC .dbline 153
01AC 4617 cp R20,R22
01AE 5707 cpc R21,R23
01B0 D0F3 brlo L22
01B2 .dbline -2
01B2 L21:
01B2 00D0 rcall pop_gset2
01B4 .dbline 0 ; func end
01B4 0895 ret
01B6 .dbsym r i 20 i
01B6 .dbsym r n 22 i
01B6 .dbend
01B6 .dbfunc e delay_1ms _delay_1ms fV
01B6 ; i -> R16,R17
.even
01B6 _delay_1ms::
01B6 .dbline -1
01B6 .dbline 158
01B6 ; delay_1us();
01B6 ; }
01B6 ;
01B6 ; void delay_1ms(void) //1ms延时函数
01B6 ; {
01B6 .dbline 160
01B6 0027 clr R16
01B8 1127 clr R17
01BA 02C0 rjmp L30
01BC L27:
01BC .dbline 160
01BC L28:
01BC .dbline 160
01BC 0F5F subi R16,255 ; offset = 1
01BE 1F4F sbci R17,255
01C0 L30:
01C0 .dbline 160
01C0 ; unsigned int i;
01C0 ; for (i=0;i<114;i++);
01C0 0237 cpi R16,114
01C2 E0E0 ldi R30,0
01C4 1E07 cpc R17,R30
01C6 D0F3 brlo L27
01C8 .dbline -2
01C8 L26:
01C8 .dbline 0 ; func end
01C8 0895 ret
01CA .dbsym r i 16 i
01CA .dbend
01CA .dbfunc e delay_nms _delay_nms fV
01CA ; i -> R20,R21
01CA ; n -> R22,R23
.even
01CA _delay_nms::
01CA 00D0 rcall push_gset2
01CC 602F mov R22,R16
01CE 712F mov R23,R17
01D0 .dbline -1
01D0 .dbline 164
01D0 ; }
01D0 ;
01D0 ; void delay_nms(unsigned int n) //N ms延时函数
01D0 ; {
01D0 .dbline 165
01D0 ; unsigned int i=0;
01D0 4427 clr R20
01D2 5527 clr R21
01D4 .dbline 166
01D4 ; for (i=0;i<n;i++)
01D4 03C0 rjmp L35
01D6 L32:
01D6 .dbline 167
01D6 EFDF rcall _delay_1ms
01D8 L33:
01D8 .dbline 166
01D8 4F5F subi R20,255 ; offset = 1
01DA 5F4F sbci R21,255
01DC L35:
01DC .dbline 166
01DC 4617 cp R20,R22
01DE 5707 cpc R21,R23
01E0 D0F3 brlo L32
01E2 .dbline -2
01E2 L31:
01E2 00D0 rcall pop_gset2
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym r i 20 i
01E6 .dbsym r n 22 i
01E6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -