📄 lcd.lis
字号:
.module LCD.c
.area text(rom, con, rel)
; i -> R20
; t -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset1
0004 ; #include <iom128v.h>
0004 ; #ifndef __lcd_h
0004 ; #define __lcd_h
0004 ; #define req asm("sbi 0x03,6")
0004 ; #define cl_req asm("cbi 0x03,6")
0004 ; #define dat asm("sbi 0x18,0")
0004 ; #define cl_dat asm("cbi 0x18,0")
0004 ; #define cl_reset asm("cbi 0x15,3")
0004 ; #define set_reset asm("sbi 0x15,3")
0004 ; #define LCD 0x9000
0004 ; void delay (unsigned int t)
0004 ; {
0004 41E0 ldi R20,1
0006 01C0 xjmp L5
0008 L2:
0008 L3:
0008 4395 inc R20
000A L5:
000A ; unsigned char i;
000A ; for (i=1;i<t;i++);
000A 242E mov R2,R20
000C 3324 clr R3
000E 2016 cp R2,R16
0010 3106 cpc R3,R17
0012 D0F3 brlo L2
0014 L1:
0014 0E940000 xcall pop_gset1
0018 .dbline 0 ; func end
0018 0895 ret
001A ; i -> R16,R17
.even
001A _delay_1ms::
001A ; }
001A ; void delay_1ms(void)
001A ; {
001A 0027 clr R16
001C 1127 clr R17
001E 02C0 xjmp L10
0020 L7:
0020 L8:
0020 0F5F subi R16,255 ; offset = 1
0022 1F4F sbci R17,255
0024 L10:
0024 ; unsigned int i;
0024 ; for (i=0;i<2286;i++);
0024 0E3E cpi R16,238
0026 E8E0 ldi R30,8
0028 1E07 cpc R17,R30
002A D0F3 brlo L7
002C L6:
002C .dbline 0 ; func end
002C 0895 ret
002E ; i -> R20,R21
002E ; n -> R22,R23
.even
002E _delay_nms::
002E 0E940000 xcall push_gset2
0032 B801 movw R22,R16
0034 ; }
0034 ; void delay_nms(unsigned int n)
0034 ; {
0034 ; unsigned int i=0;
0034 4427 clr R20
0036 5527 clr R21
0038 ; for (i=0;i<n;i++)
0038 03C0 xjmp L15
003A L12:
003A EFDF xcall _delay_1ms
003C L13:
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 L15:
0040 4617 cp R20,R22
0042 5707 cpc R21,R23
0044 D0F3 brlo L12
0046 L11:
0046 0E940000 xcall pop_gset2
004A .dbline 0 ; func end
004A 0895 ret
004C ; p -> R20,R21
004C ; data -> R16
.even
004C _lcd_w::
004C 0E940000 xcall push_gset1
0050 ; delay_1ms();
0050 ; }
0050 ;
0050 ;
0050 ; void lcd_w(unsigned char data)
0050 ; {
0050 ; unsigned char *p=(unsigned char *)(LCD);
0050 40E0 ldi R20,36864
0052 50E9 ldi R21,144
0054 L17:
0054 L18:
0054 ; while((PINE&0x80)!=0x00)
0054 81B1 in R24,0x1
0056 8078 andi R24,128
0058 E9F7 brne L17
005A ; ;
005A ; dat;
005A C09A sbi 0x18,0
005C ; *p=data;
005C FA01 movw R30,R20
005E 0083 std z+0,R16
0060 ; cl_dat;
0060 C098 cbi 0x18,0
0062 ; ;;
0062 ; req;
0062 1E9A sbi 0x03,6
0064 ; ;;
0064 L20:
0064 L21:
0064 ; while((PINE&0x80)==0x00)
0064 81B1 in R24,0x1
0066 8078 andi R24,128
0068 E9F3 breq L20
006A ; ;
006A ; cl_req;
006A 1E98 cbi 0x03,6
006C L16:
006C 0E940000 xcall pop_gset1
0070 .dbline 0 ; func end
0070 0895 ret
.even
0072 _lcd_init::
0072 ; }
0072 ; void lcd_init (void)
0072 ; {
0072 ; MCUCR=MCUCR|0x80;
0072 85B7 in R24,0x35
0074 8068 ori R24,128
0076 85BF out 0x35,R24
0078 ; DDRB|=0x01;
0078 B89A sbi 0x17,0
007A ; PORTB&=0xfe;
007A 88B3 in R24,0x18
007C 8E7F andi R24,254
007E 88BB out 0x18,R24
0080 ; DDRE=0x40;
0080 80E4 ldi R24,64
0082 82B9 out 0x2,R24
0084 ; PORTE=0xff;
0084 8FEF ldi R24,255
0086 83B9 out 0x3,R24
0088 ; cl_reset;
0088 AB98 cbi 0x15,3
008A ; delay(10);
008A 0AE0 ldi R16,10
008C 10E0 ldi R17,0
008E B8DF xcall _delay
0090 ; set_reset;
0090 AB9A sbi 0x15,3
0092 ; delay(10);
0092 0AE0 ldi R16,10
0094 10E0 ldi R17,0
0096 B4DF xcall _delay
0098 ; cl_req;
0098 1E98 cbi 0x03,6
009A ; delay(10);
009A 0AE0 ldi R16,10
009C 10E0 ldi R17,0
009E B0DF xcall _delay
00A0 L23:
00A0 .dbline 0 ; func end
00A0 0895 ret
.even
00A2 _lcd_clear::
00A2 ; }
00A2 ; void lcd_clear (void)
00A2 ; {
00A2 ; lcd_w(0xf4);
00A2 04EF ldi R16,244
00A4 D3DF xcall _lcd_w
00A6 L24:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 ; i -> R12,R13
00A8 ; ch -> R22,R23
00A8 ; y -> R10
00A8 ; x -> R20
.even
00A8 _lcd_putsc::
00A8 0E940000 xcall push_gset4
00AC A22E mov R10,R18
00AE 402F mov R20,R16
00B0 6885 ldd R22,y+8
00B2 7985 ldd R23,y+9
00B4 ; }
00B4 ;
00B4 ; void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
00B4 ; { unsigned int i;
00B4 ; x+=2;
00B4 4E5F subi R20,254 ; addi 2
00B6 25C0 xjmp L27
00B8 L26:
00B8 ; while (*ch!=0)
00B8 ; {
00B8 ; lcd_w(0xf0);
00B8 00EF ldi R16,240
00BA C8DF xcall _lcd_w
00BC ; lcd_w(x);
00BC 042F mov R16,R20
00BE C6DF xcall _lcd_w
00C0 ; lcd_w(y);
00C0 0A2D mov R16,R10
00C2 C4DF xcall _lcd_w
00C4 ; lcd_w(*ch-0xa0);
00C4 FB01 movw R30,R22
00C6 0081 ldd R16,z+0
00C8 005A subi R16,160
00CA C0DF xcall _lcd_w
00CC ; ch++;
00CC 6F5F subi R22,255 ; offset = 1
00CE 7F4F sbci R23,255
00D0 ; lcd_w(*ch-0xa0);
00D0 FB01 movw R30,R22
00D2 0081 ldd R16,z+0
00D4 005A subi R16,160
00D6 BADF xcall _lcd_w
00D8 ; ch++;
00D8 6F5F subi R22,255 ; offset = 1
00DA 7F4F sbci R23,255
00DC ; delay_nms(2);
00DC 02E0 ldi R16,2
00DE 10E0 ldi R17,0
00E0 A6DF xcall _delay_nms
00E2 ; for(i=0;i<16;i++)
00E2 CC24 clr R12
00E4 DD24 clr R13
00E6 08C0 xjmp L32
00E8 L29:
00E8 07EF ldi R16,247
00EA B0DF xcall _lcd_w
00EC 02E0 ldi R16,2
00EE 10E0 ldi R17,0
00F0 9EDF xcall _delay_nms
00F2 L30:
00F2 C601 movw R24,R12
00F4 0196 adiw R24,1
00F6 6C01 movw R12,R24
00F8 L32:
00F8 C601 movw R24,R12
00FA 8031 cpi R24,16
00FC E0E0 ldi R30,0
00FE 9E07 cpc R25,R30
0100 98F3 brlo L29
0102 L27:
0102 FB01 movw R30,R22
0104 2080 ldd R2,z+0
0106 2220 tst R2
0108 09F0 breq X0
010A D6CF xjmp L26
010C X0:
010C ; {lcd_w(0xf7);
010C ; delay_nms(2);}
010C ; }
010C ; for(i=0;i<115;i++)
010C CC24 clr R12
010E DD24 clr R13
0110 08C0 xjmp L36
0112 L33:
0112 07EF ldi R16,247
0114 9BDF xcall _lcd_w
0116 02E0 ldi R16,2
0118 10E0 ldi R17,0
011A 89DF xcall _delay_nms
011C L34:
011C C601 movw R24,R12
011E 0196 adiw R24,1
0120 6C01 movw R12,R24
0122 L36:
0122 C601 movw R24,R12
0124 8337 cpi R24,115
0126 E0E0 ldi R30,0
0128 9E07 cpc R25,R30
012A 98F3 brlo L33
012C L25:
012C 0E940000 xcall pop_gset4
0130 .dbline 0 ; func end
0130 0895 ret
0132 ; i -> R12,R13
0132 ; ch -> R22,R23
0132 ; y -> R10
0132 ; x -> R20
.even
0132 _lcd_putsm::
0132 0E940000 xcall push_gset4
0136 A22E mov R10,R18
0138 402F mov R20,R16
013A 6885 ldd R22,y+8
013C 7985 ldd R23,y+9
013E ; {lcd_w(0xf7);
013E ; delay_nms(2);}
013E ; }
013E ; void lcd_putsm(unsigned char x,unsigned char y,unsigned char *ch)
013E ; { unsigned int i;
013E ; x+=4;
013E 4C5F subi R20,252 ; addi 4
0140 1EC0 xjmp L39
0142 L38:
0142 ; while (*ch!=0)
0142 ; {
0142 ; lcd_w(0xf1);
0142 01EF ldi R16,241
0144 83DF xcall _lcd_w
0146 ; lcd_w(x);
0146 042F mov R16,R20
0148 81DF xcall _lcd_w
014A ; lcd_w(y);
014A 0A2D mov R16,R10
014C 7FDF xcall _lcd_w
014E ; lcd_w(*ch);
014E FB01 movw R30,R22
0150 0081 ldd R16,z+0
0152 7CDF xcall _lcd_w
0154 ; ch++;
0154 6F5F subi R22,255 ; offset = 1
0156 7F4F sbci R23,255
0158 ; delay_nms(1);
0158 01E0 ldi R16,1
015A 10E0 ldi R17,0
015C 68DF xcall _delay_nms
015E ; for(i=0;i<8;i++)
015E CC24 clr R12
0160 DD24 clr R13
0162 08C0 xjmp L44
0164 L41:
0164 07EF ldi R16,247
0166 72DF xcall _lcd_w
0168 02E0 ldi R16,2
016A 10E0 ldi R17,0
016C 60DF xcall _delay_nms
016E L42:
016E C601 movw R24,R12
0170 0196 adiw R24,1
0172 6C01 movw R12,R24
0174 L44:
0174 C601 movw R24,R12
0176 8830 cpi R24,8
0178 E0E0 ldi R30,0
017A 9E07 cpc R25,R30
017C 98F3 brlo L41
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -