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

📄 lcd.lis

📁 MEGA16单片机程序包2
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 009A DDDF              xcall _LCD_en_write
 009C                   .dbline -2
 009C           L11:
 009C 0E940000          xcall pop_gset1
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r command 20 c
 00A2                   .dbend
 00A2                   .dbfunc e LCD_write_data _LCD_write_data fV
 00A2           ;           data -> R20
                        .even
 00A2           _LCD_write_data::
 00A2 0E940000          xcall push_gset1
 00A6 402F              mov R20,R16
 00A8                   .dbline -1
 00A8                   .dbline 96
 00A8           ;    
 00A8           ; } 
 00A8           ; 
 00A8           ; void LCD_write_data(uchar data) //写数据 
 00A8           ; { 
 00A8                   .dbline 97
 00A8           ;   delay(16); 
 00A8 00E1              ldi R16,16
 00AA 10E0              ldi R17,0
 00AC A9DF              xcall _delay
 00AE                   .dbline 98
 00AE           ;   LCD_RS_PORT|=LCD_RS;       //RS=1 
 00AE D99A              sbi 0x1b,1
 00B0                   .dbline 99
 00B0           ;   LCD_DATA_PORT&=0X0f;       //清高四位 
 00B0 8BB3              in R24,0x1b
 00B2 8F70              andi R24,15
 00B4 8BBB              out 0x1b,R24
 00B6                   .dbline 100
 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 101
 00C0           ;   LCD_en_write(); 
 00C0 CADF              xcall _LCD_en_write
 00C2                   .dbline 102
 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 103
 00CA           ;   LCD_DATA_PORT&=0X0f;        //清高四位 
 00CA 8BB3              in R24,0x1b
 00CC 8F70              andi R24,15
 00CE 8BBB              out 0x1b,R24
 00D0                   .dbline 104
 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 105
 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 110
 00EA           ; } 
 00EA           ; 
 00EA           ; 
 00EA           ; void LCD_set_xy( uchar x, uchar y )  //写地址函数 
 00EA           ; { 
 00EA                   .dbline 112
 00EA           ;     uchar address; 
 00EA           ;     if (y == 0) address = 0x80 + x; 
 00EA 4423              tst R20
 00EC 19F4              brne L14
 00EE                   .dbline 112
 00EE 462F              mov R20,R22
 00F0 4058              subi R20,128    ; addi 128
 00F2 02C0              xjmp L15
 00F4           L14:
 00F4                   .dbline 113
 00F4           ;     else   address = 0xc0 + x; 
 00F4 462F              mov R20,R22
 00F6 4054              subi R20,64    ; addi 192
 00F8           L15:
 00F8                   .dbline 114
 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 118
 010E           ; } 
 010E           ;    
 010E           ; void LCD_write_string(uchar X,uchar Y,uchar *s) //列x=0~15,行y=0,1 
 010E           ; { 
 010E                   .dbline 119
 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 121
 0116                   .dbline 122
 0116 FA01              movw R30,R20
 0118 0081              ldd R16,z+0
 011A C3DF              xcall _LCD_write_data
 011C                   .dbline 123
 011C 4F5F              subi R20,255  ; offset = 1
 011E 5F4F              sbci R21,255
 0120                   .dbline 124
 0120           L18:
 0120                   .dbline 120
 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 129
 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 130
 0136           ;   LCD_set_xy( X, Y );      //写地址 
 0136 262F              mov R18,R22
 0138 042F              mov R16,R20
 013A D3DF              xcall _LCD_set_xy
 013C                   .dbline 131
 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_lcd _init_lcd fV
                        .even
 0146           _init_lcd::
 0146                   .dbline -1
 0146                   .dbline 136
 0146           ;    
 0146           ; } 
 0146           ; 
 0146           ; void init_lcd(void) 
 0146           ; { 
 0146                   .dbline 137
 0146           ;   CLI();             //禁止所有中断
 0146 F894              cli
 0148                   .dbline 138
 0148           ;   LCD_init(); 
 0148 71DF              xcall _LCD_init
 014A                   .dbline 139
 014A           ;   MCUCR = 0x00; 
 014A 2224              clr R2
 014C 25BE              out 0x35,R2
 014E                   .dbline 140
 014E           ;   GICR  = 0x00; 
 014E 2BBE              out 0x3b,R2
 0150                   .dbline 141
 0150           ;   TIMSK = 0x00;     
 0150 29BE              out 0x39,R2
 0152                   .dbline 142
 0152           ;   SEI();            //重新开启所有中断
 0152 7894              sei
 0154                   .dbline -2
 0154           L21:
 0154                   .dbline 0 ; func end
 0154 0895              ret
 0156                   .dbend

⌨️ 快捷键说明

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