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

📄 lcd1602.lis

📁 lcd液晶驱动显示原代码 根据硬件自己修改
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0090                   .dbline 71
 0090           ;    lcd_control_port&=~lcd_RS;//RS=0 
 0090 A898              cbi 0x15,0
 0092                   .dbline 72
 0092           ;    lcd_control_port|=lcd_RW;//RW=1 
 0092 A99A              sbi 0x15,1
 0094                   .dbline 73
 0094           ;    NOP(); 
 0094 0000              nop
 0096                   .dbline 74
 0096           ;    lcd_control_port|=lcd_EN;//E=1 
 0096 AA9A              sbi 0x15,2
 0098           L8:
 0098                   .dbline 75
 0098           L9:
 0098                   .dbline 75
 0098           ;    while(lcd_busy_pin&busy);//等待LCD_DB7为0 
 0098 B799              sbic 0x16,7
 009A FECF              rjmp L8
 009C                   .dbline 76
 009C           ;    lcd_control_port&=~lcd_EN;//重设E=0 
 009C AA98              cbi 0x15,2
 009E                   .dbline 77
 009E           ;    lcd_busy_ddr|=busy;//设置busy口为输出 
 009E BF9A              sbi 0x17,7
 00A0                   .dbline -2
 00A0           L7:
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbend
 00A2                   .dbfunc e lcd_set_xy _lcd_set_xy fV
 00A2           ;        address -> R20
 00A2           ;              y -> R20
 00A2           ;              x -> R22
                        .even
 00A2           _lcd_set_xy::
 00A2 00D0              rcall push_gset2
 00A4 422F              mov R20,R18
 00A6 602F              mov R22,R16
 00A8                   .dbline -1
 00A8                   .dbline 84
 00A8           ; } 
 00A8           ; /**LCD_set_xy:设置LCD显示的起始位置输入参数:x、y :  
 00A8           ;                     显示字符串的位置,X:0-15,Y:0-1 
 00A8           ;                     LCD第一行显示寄存器地址:0X80-0X8F 
 00A8           ;                     LCD第一行显示寄存器地址:0XC0-0XCF   ***/ 
 00A8           ; void lcd_set_xy( unsigned char x, unsigned char y ) 
 00A8           ; { 
 00A8                   .dbline 86
 00A8           ;     unsigned char address; 
 00A8           ;     if (y == 0)  
 00A8 4423              tst R20
 00AA 19F4              brne L12
 00AC                   .dbline 87
 00AC           ;        address = 0x80 + x; 
 00AC 462F              mov R20,R22
 00AE 4058              subi R20,128    ; addi 128
 00B0 02C0              rjmp L13
 00B2           L12:
 00B2                   .dbline 89
 00B2           ;     else  
 00B2           ;         address = 0xc0 + x; 
 00B2 462F              mov R20,R22
 00B4 4054              subi R20,64    ; addi 192
 00B6           L13:
 00B6                   .dbline 90
 00B6           ;     lcd_write_command(address,1);//一定需要检查忙信号,所以为1 
 00B6 21E0              ldi R18,1
 00B8 042F              mov R16,R20
 00BA CEDF              rcall _lcd_write_command
 00BC                   .dbline -2
 00BC           L11:
 00BC 00D0              rcall pop_gset2
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0                   .dbsym r address 20 c
 00C0                   .dbsym r y 20 c
 00C0                   .dbsym r x 22 c
 00C0                   .dbend
 00C0                   .dbfunc e display_a_char _display_a_char fV
 00C0           ;      char_data -> y+4
 00C0           ;              y -> R22
 00C0           ;              x -> R20
                        .even
 00C0           _display_a_char::
 00C0 00D0              rcall push_gset2
 00C2 622F              mov R22,R18
 00C4 402F              mov R20,R16
 00C6                   .dbline -1
 00C6                   .dbline 94
 00C6           ; } 
 00C6           ; //显示一个字符函数 
 00C6           ; void display_a_char(unsigned char x,unsigned char y,unsigned char char_data)//char_data为要显示的字符 
 00C6           ; { 
 00C6                   .dbline 95
 00C6           ;     lcd_set_xy(x,y); 
 00C6 262F              mov R18,R22
 00C8 042F              mov R16,R20
 00CA EBDF              rcall _lcd_set_xy
 00CC                   .dbline 96
 00CC           ;     lcd_write_data(char_data); 
 00CC 0C81              ldd R16,y+4
 00CE D3DF              rcall _lcd_write_data
 00D0                   .dbline -2
 00D0           L14:
 00D0 00D0              rcall pop_gset2
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym l char_data 4 c
 00D4                   .dbsym r y 22 c
 00D4                   .dbsym r x 20 c
 00D4                   .dbend
 00D4                   .dbfunc e display_a_string _display_a_string fV
 00D4           ;            ptr -> R20,R21
 00D4           ;              y -> R10
 00D4           ;              x -> R22
                        .even
 00D4           _display_a_string::
 00D4 00D0              rcall push_gset3
 00D6 A22E              mov R10,R18
 00D8 602F              mov R22,R16
 00DA 4E81              ldd R20,y+6
 00DC 5F81              ldd R21,y+7
 00DE                   .dbline -1
 00DE                   .dbline 103
 00DE           ; } 
 00DE           ; 
 00DE           ; //指定一行显示连续字符串:0显示在第一行,1显示在第二行,注字符串不能长于16个字符 
 00DE           ; //显示一行连续字符串函数 
 00DE           ; 
 00DE           ; void display_a_string(unsigned char x,unsigned char y,unsigned char *ptr) 
 00DE           ; { 
 00DE                   .dbline 105
 00DE           ; //ptr:指向无符号字符型变量的指针变量,指针也就是地址,指字符串数组的首指针 
 00DE           ;     lcd_set_xy(x,y); 
 00DE 2A2D              mov R18,R10
 00E0 062F              mov R16,R22
 00E2 DFDF              rcall _lcd_set_xy
 00E4 05C0              rjmp L17
 00E6           L16:
 00E6                   .dbline 107
 00E6                   .dbline 108
 00E6 FA01              movw R30,R20
 00E8 0081              ldd R16,z+0
 00EA C5DF              rcall _lcd_write_data
 00EC                   .dbline 109
 00EC 4F5F              subi R20,255  ; offset = 1
 00EE 5F4F              sbci R21,255
 00F0                   .dbline 110
 00F0           L17:
 00F0                   .dbline 106
 00F0           ;    while(*ptr)//当ptr='\0'(空指针null)跳出循环 
 00F0 FA01              movw R30,R20
 00F2 2080              ldd R2,z+0
 00F4 2220              tst R2
 00F6 B9F7              brne L16
 00F8                   .dbline -2
 00F8           L15:
 00F8 00D0              rcall pop_gset3
 00FA                   .dbline 0 ; func end
 00FA 0895              ret
 00FC                   .dbsym r ptr 20 pc
 00FC                   .dbsym r y 10 c
 00FC                   .dbsym r x 22 c
 00FC                   .dbend
 00FC                   .dbfunc e display_a_fluid _display_a_fluid fV
 00FC           ;            ptr -> R20,R21
 00FC           ;              y -> R10
 00FC           ;              x -> R22
                        .even
 00FC           _display_a_fluid::
 00FC 00D0              rcall push_gset3
 00FE A22E              mov R10,R18
 0100 602F              mov R22,R16
 0102 4E81              ldd R20,y+6
 0104 5F81              ldd R21,y+7
 0106                   .dbline -1
 0106                   .dbline 114
 0106           ;     { 
 0106           ;      lcd_write_data(*ptr);//*ptr,指向该地址的内容 
 0106           ;      ptr++; 
 0106           ;     } 
 0106           ; }
 0106           ; /*********************流动字幕***********************/
 0106           ; void display_a_fluid(unsigned char x,unsigned char y,unsigned char *ptr) 
 0106           ;                               { lcd_write_command(0x07,1);//流动字幕
 0106                   .dbline 114
 0106 21E0              ldi R18,1
 0108 07E0              ldi R16,7
 010A A6DF              rcall _lcd_write_command
 010C                   .dbline 115
 010C           ;                                 lcd_set_xy(x,y);
 010C 2A2D              mov R18,R10
 010E 062F              mov R16,R22
 0110 C8DF              rcall _lcd_set_xy
 0112 08C0              rjmp L21
 0114           L20:
 0114                   .dbline 117
 0114                   .dbline 118
 0114 FA01              movw R30,R20
 0116 0081              ldd R16,z+0
 0118 AEDF              rcall _lcd_write_data
 011A                   .dbline 119
 011A 08EC              ldi R16,200
 011C 10E0              ldi R17,0
 011E 00D0              rcall _delay_nms
 0120                   .dbline 120
 0120 4F5F              subi R20,255  ; offset = 1
 0122 5F4F              sbci R21,255
 0124                   .dbline 121
 0124           L21:
 0124                   .dbline 116
 0124           ;                                 while(*ptr)
 0124 FA01              movw R30,R20
 0126 2080              ldd R2,z+0
 0128 2220              tst R2
 012A A1F7              brne L20
 012C                   .dbline -2
 012C           L19:
 012C 00D0              rcall pop_gset3
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbsym r ptr 20 pc
 0130                   .dbsym r y 10 c
 0130                   .dbsym r x 22 c
 0130                   .dbend

⌨️ 快捷键说明

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