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

📄 lcd.lis

📁 AVR mega16系列单片机开发程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B4 8BBB              out 0x1b,R24
 00B6                   .dbline 101
 00B6           ;   LCD_DATA_PORT|=data&0xf0;  //写高四位 
 00B6 842F              mov R24,R20
 00B8 807F              andi R24,240
 00BA 2BB2              in R2,0x1b
 00BC 282A              or R2,R24
 00BE 2BBA              out 0x1b,R2
 00C0                   .dbline 102
 00C0           ;   LCD_en_write(); 
 00C0 CADF              xcall _LCD_en_write
 00C2                   .dbline 103
 00C2           ;   data=data<<4;               //低四位移到高四位 
 00C2 842F              mov R24,R20
 00C4 8F70              andi R24,#0x0F
 00C6 8295              swap R24
 00C8 482F              mov R20,R24
 00CA                   .dbline 104
 00CA           ;   LCD_DATA_PORT&=0X0f;        //清高四位 
 00CA 8BB3              in R24,0x1b
 00CC 8F70              andi R24,15
 00CE 8BBB              out 0x1b,R24
 00D0                   .dbline 105
 00D0           ;   LCD_DATA_PORT|=data&0xf0;   //写低四位 
 00D0 842F              mov R24,R20
 00D2 807F              andi R24,240
 00D4 2BB2              in R2,0x1b
 00D6 282A              or R2,R24
 00D8 2BBA              out 0x1b,R2
 00DA                   .dbline 106
 00DA           ;   LCD_en_write(); 
 00DA BDDF              xcall _LCD_en_write
 00DC                   .dbline -2
 00DC           L12:
 00DC 0E940000          xcall pop_gset1
 00E0                   .dbline 0 ; func end
 00E0 0895              ret
 00E2                   .dbsym r data 20 c
 00E2                   .dbend
 00E2                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 00E2           ;        address -> R20
 00E2           ;              y -> R20
 00E2           ;              x -> R22
                        .even
 00E2           _LCD_set_xy::
 00E2 0E940000          xcall push_gset2
 00E6 422F              mov R20,R18
 00E8 602F              mov R22,R16
 00EA                   .dbline -1
 00EA                   .dbline 111
 00EA           ; } 
 00EA           ; 
 00EA           ; 
 00EA           ; void LCD_set_xy( uchar x, uchar y )  //写地址函数 
 00EA           ; { 
 00EA                   .dbline 113
 00EA           ;     uchar address; 
 00EA           ;     if (y == 0) address = 0x80 + x; 
 00EA 4423              tst R20
 00EC 19F4              brne L14
 00EE                   .dbline 113
 00EE 462F              mov R20,R22
 00F0 4058              subi R20,128    ; addi 128
 00F2 02C0              xjmp L15
 00F4           L14:
 00F4                   .dbline 114
 00F4           ;     else   address = 0xc0 + x; 
 00F4 462F              mov R20,R22
 00F6 4054              subi R20,64    ; addi 192
 00F8           L15:
 00F8                   .dbline 115
 00F8           ;     LCD_write_command( address); 
 00F8 042F              mov R16,R20
 00FA B3DF              xcall _LCD_write_command
 00FC                   .dbline -2
 00FC           L13:
 00FC 0E940000          xcall pop_gset2
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbsym r address 20 c
 0102                   .dbsym r y 20 c
 0102                   .dbsym r x 22 c
 0102                   .dbend
 0102                   .dbfunc e LCD_write_string _LCD_write_string fV
 0102           ;              s -> R20,R21
 0102           ;              Y -> R10
 0102           ;              X -> R22
                        .even
 0102           _LCD_write_string::
 0102 0E940000          xcall push_gset3
 0106 A22E              mov R10,R18
 0108 602F              mov R22,R16
 010A 4E81              ldd R20,y+6
 010C 5F81              ldd R21,y+7
 010E                   .dbline -1
 010E                   .dbline 119
 010E           ; } 
 010E           ;    
 010E           ; void LCD_write_string(uchar X,uchar Y,uchar *s) //列x=0~15,行y=0,1 
 010E           ; { 
 010E                   .dbline 120
 010E           ;     LCD_set_xy( X, Y ); //写地址     
 010E 2A2D              mov R18,R10
 0110 062F              mov R16,R22
 0112 E7DF              xcall _LCD_set_xy
 0114 05C0              xjmp L18
 0116           L17:
 0116                   .dbline 122
 0116                   .dbline 123
 0116 FA01              movw R30,R20
 0118 0081              ldd R16,z+0
 011A C3DF              xcall _LCD_write_data
 011C                   .dbline 124
 011C 4F5F              subi R20,255  ; offset = 1
 011E 5F4F              sbci R21,255
 0120                   .dbline 125
 0120           L18:
 0120                   .dbline 121
 0120           ;     while (*s)  // 写显示字符 
 0120 FA01              movw R30,R20
 0122 2080              ldd R2,z+0
 0124 2220              tst R2
 0126 B9F7              brne L17
 0128                   .dbline -2
 0128           L16:
 0128 0E940000          xcall pop_gset3
 012C                   .dbline 0 ; func end
 012C 0895              ret
 012E                   .dbsym r s 20 pc
 012E                   .dbsym r Y 10 c
 012E                   .dbsym r X 22 c
 012E                   .dbend
 012E                   .dbfunc e LCD_write_char _LCD_write_char fV
 012E           ;           data -> y+4
 012E           ;              Y -> R22
 012E           ;              X -> R20
                        .even
 012E           _LCD_write_char::
 012E 0E940000          xcall push_gset2
 0132 622F              mov R22,R18
 0134 402F              mov R20,R16
 0136                   .dbline -1
 0136                   .dbline 130
 0136           ;     { 
 0136           ;       LCD_write_data( *s ); 
 0136           ;       s ++; 
 0136           ;     } 
 0136           ;        
 0136           ; } 
 0136           ; 
 0136           ; void LCD_write_char(uchar X,uchar Y,uchar data) //列x=0~15,行y=0,1 
 0136           ; { 
 0136                   .dbline 131
 0136           ;   LCD_set_xy( X, Y );      //写地址 
 0136 262F              mov R18,R22
 0138 042F              mov R16,R20
 013A D3DF              xcall _LCD_set_xy
 013C                   .dbline 132
 013C           ;   LCD_write_data( data); 
 013C 0C81              ldd R16,y+4
 013E B1DF              xcall _LCD_write_data
 0140                   .dbline -2
 0140           L20:
 0140 0E940000          xcall pop_gset2
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbsym l data 4 c
 0146                   .dbsym r Y 22 c
 0146                   .dbsym r X 20 c
 0146                   .dbend
 0146                   .dbfunc e init_devices _init_devices fV
                        .even
 0146           _init_devices::
 0146                   .dbline -1
 0146                   .dbline 137
 0146           ;    
 0146           ; } 
 0146           ; 
 0146           ; void init_devices(void) 
 0146           ; { 
 0146                   .dbline 138
 0146           ;   CLI();             //disable all interrupts 
 0146 F894              cli
 0148                   .dbline 139
 0148           ;   LCD_init(); 
 0148 71DF              xcall _LCD_init
 014A                   .dbline 140
 014A           ;   MCUCR = 0x00; 
 014A 2224              clr R2
 014C 25BE              out 0x35,R2
 014E                   .dbline 141
 014E           ;   GICR  = 0x00; 
 014E 2BBE              out 0x3b,R2
 0150                   .dbline 142
 0150           ;   TIMSK = 0x00;      // r interrupt sources 
 0150 29BE              out 0x39,R2
 0152                   .dbline 143
 0152           ;   SEI();            //re-enable interrupts 
 0152 7894              sei
 0154                   .dbline -2
 0154           L21:
 0154                   .dbline 0 ; func end
 0154 0895              ret
 0156                   .dbend
 0156                   .dbfunc e main _main fV
                        .even
 0156           _main::
 0156 2297              sbiw R28,2
 0158                   .dbline -1
 0158                   .dbline 148
 0158           ; }
 0158           ; 
 0158           ; 
 0158           ; void main(void) 
 0158           ; { 
 0158                   .dbline 149
 0158           ;    init_devices(); 
 0158 F6DF              xcall _init_devices
 015A                   .dbline 150
 015A           ;    LCD_write_string(0,0,"MCU IS:"); 
 015A 80E0              ldi R24,<L23
 015C 90E0              ldi R25,>L23
 015E 9983              std y+1,R25
 0160 8883              std y+0,R24
 0162 2227              clr R18
 0164 0027              clr R16
 0166 CDDF              xcall _LCD_write_string
 0168                   .dbline 151
 0168           ;    for(;;) 
 0168           L24:
 0168                   .dbline 152
 0168                   .dbline 153
 0168 80E0              ldi R24,<L28
 016A 90E0              ldi R25,>L28
 016C 9983              std y+1,R25
 016E 8883              std y+0,R24
 0170 21E0              ldi R18,1
 0172 0027              clr R16
 0174 C6DF              xcall _LCD_write_string
 0176                   .dbline 154
 0176 2224              clr R2
 0178 2882              std y+0,R2
 017A 2227              clr R18
 017C 07E0              ldi R16,7
 017E D7DF              xcall _LCD_write_char
 0180                   .dbline 155
 0180                   .dbline 151
 0180                   .dbline 151
 0180 F3CF              xjmp L24
 0182           X1:
 0182                   .dbline -2
 0182           L22:
 0182 2296              adiw R28,2
 0184                   .dbline 0 ; func end
 0184 0895              ret
 0186                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c
 0000           L28:
 0000                   .blkb 9
                        .area idata
 0000 41546D656761313600        .byte 'A,'T,'m,'e,'g,'a,49,54,0
                        .area data(ram, con, rel)
 0009                   .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c
 0009           L23:
 0009                   .blkb 8
                        .area idata
 0009 4D43552049533A00  .byte 'M,'C,'U,32,'I,'S,58,0
                        .area data(ram, con, rel)
 0011                   .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -