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

📄 lcd.lis

📁 本程序是基于avr单片机的atmega48的控制16*4点阵型液晶。其中main文件调用LCD.c和LCD.h文件。用户可以直接把工程中的LCD.c和LCD.h文件放到自己的程序目录下即可。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -