⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -