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

📄 lcd.lis

📁 作为LCD显示的 AVR开发学习源码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0098 0000              nop
 009A                   .dbline 83
 009A           ;       lcd_control_port|=lcd_EN;//E=1
 009A C39A              sbi 0x18,3
 009C                   .dbline 84
 009C           ;       lcd_data_port=char_data;
 009C 45BB              out 0x15,R20
 009E                   .dbline 85
 009E           ;       lcd_control_port&=~lcd_EN;//重设E=0
 009E C398              cbi 0x18,3
 00A0                   .dbline -2
 00A0           L9:
 00A0 0E940000          xcall pop_gset1
 00A4                   .dbline 0 ; func end
 00A4 0895              ret
 00A6                   .dbsym r char_data 20 c
 00A6                   .dbend
 00A6                   .dbfunc e wait_enable _wait_enable fV
                        .even
 00A6           _wait_enable::
 00A6                   .dbline -1
 00A6                   .dbline 91
 00A6           ; }
 00A6           ; 
 00A6           ; //正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
 00A6           ; //检测忙信号,等待LCD空闲函数
 00A6           ; void wait_enable(void)
 00A6           ; {
 00A6                   .dbline 92
 00A6           ;       lcd_busy_ddr&=~busy;//设置busy口为输入
 00A6 A798              cbi 0x14,7
 00A8                   .dbline 93
 00A8           ;       lcd_control_port&=~lcd_RS;//RS=0
 00A8 C598              cbi 0x18,5
 00AA                   .dbline 94
 00AA           ;       lcd_control_port|=lcd_RW;//RW=1
 00AA C49A              sbi 0x18,4
 00AC                   .dbline 95
 00AC           ;       NOP();
 00AC 0000              nop
 00AE                   .dbline 96
 00AE           ;       lcd_control_port|=lcd_EN;//E=1
 00AE C39A              sbi 0x18,3
 00B0           L11:
 00B0                   .dbline 97
 00B0           L12:
 00B0                   .dbline 97
 00B0           ;       while(lcd_busy_pin&busy);//等待LCD_DB7为0
 00B0 9F99              sbic 0x13,7
 00B2 FECF              rjmp L11
 00B4                   .dbline 98
 00B4           ;       lcd_control_port&=~lcd_EN;//重设E=0
 00B4 C398              cbi 0x18,3
 00B6                   .dbline 99
 00B6           ;       lcd_busy_ddr|=busy;//设置busy口为输出
 00B6 A79A              sbi 0x14,7
 00B8                   .dbline -2
 00B8           L10:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbend
 00BA                   .dbfunc e display_a_char _display_a_char fV
 00BA           ;   position_tem -> R22
 00BA           ;      char_data -> R20
 00BA           ;       position -> R10
                        .even
 00BA           _display_a_char::
 00BA 0E940000          xcall push_gset3
 00BE 422F              mov R20,R18
 00C0 A02E              mov R10,R16
 00C2                   .dbline -1
 00C2                   .dbline 105
 00C2           ; }
 00C2           ; 
 00C2           ; //指定位置显示一个字符:第一行位置0~15,第二行16~31
 00C2           ; //显示一个字符函数
 00C2           ; void display_a_char(unsigned char position,unsigned char char_data)//参数position指定位置0~31,char_data为要显示的字符
 00C2           ; {
 00C2                   .dbline 107
 00C2           ;       unsigned char position_tem;
 00C2           ;       if(position>=0x10)
 00C2 8A2D              mov R24,R10
 00C4 8031              cpi R24,16
 00C6 18F0              brlo L15
 00C8                   .dbline 108
 00C8           ;       position_tem=position+0xb0;
 00C8 682F              mov R22,R24
 00CA 6055              subi R22,80    ; addi 176
 00CC 02C0              xjmp L16
 00CE           L15:
 00CE                   .dbline 110
 00CE           ;       else
 00CE           ;       position_tem=position+0x80;
 00CE 6A2D              mov R22,R10
 00D0 6058              subi R22,128    ; addi 128
 00D2           L16:
 00D2                   .dbline 111
 00D2           ;       lcd_write_command(position_tem,1);
 00D2 21E0              ldi R18,1
 00D4 062F              mov R16,R22
 00D6 C8DF              xcall _lcd_write_command
 00D8                   .dbline 112
 00D8           ;       lcd_write_data(char_data);
 00D8 042F              mov R16,R20
 00DA D7DF              xcall _lcd_write_data
 00DC                   .dbline -2
 00DC           L14:
 00DC 0E940000          xcall pop_gset3
 00E0                   .dbline 0 ; func end
 00E0 0895              ret
 00E2                   .dbsym r position_tem 22 c
 00E2                   .dbsym r char_data 20 c
 00E2                   .dbsym r position 10 c
 00E2                   .dbend
 00E2                   .dbfunc e display_a_string _display_a_string fV
 00E2           ;        col_tem -> R20
 00E2           ;              i -> R22
 00E2           ;            ptr -> R10,R11
 00E2           ;            col -> R20
                        .even
 00E2           _display_a_string::
 00E2 0E940000          xcall push_gset3
 00E6 5901              movw R10,R18
 00E8 402F              mov R20,R16
 00EA                   .dbline -1
 00EA                   .dbline 118
 00EA           ; }
 00EA           ; 
 00EA           ; //指定一行显示连续字符串:0显示在第一行,1显示在第二行,注字符串不能长于16个字符
 00EA           ; //显示一行连续字符串函数
 00EA           ; void display_a_string(unsigned char col,unsigned char *ptr)//参数col指定行,*ptr指字符串数组的首指针
 00EA           ; {
 00EA                   .dbline 120
 00EA           ;       unsigned char col_tem,i;
 00EA           ;       col_tem=col<<4;//若col为1(即在LCD第二行显示字符串),先把col左移4位,使显示字符的首位置改到第二行首位,即位置16
 00EA 842F              mov R24,R20
 00EC 8F70              andi R24,#0x0F
 00EE 8295              swap R24
 00F0 482F              mov R20,R24
 00F2                   .dbline 121
 00F2           ;       for(i=0;i<16;i++)
 00F2 6627              clr R22
 00F4 0AC0              xjmp L21
 00F6           L18:
 00F6                   .dbline 122
 00F6 E62F              mov R30,R22
 00F8 FF27              clr R31
 00FA EA0D              add R30,R10
 00FC FB1D              adc R31,R11
 00FE 2081              ldd R18,z+0
 0100 242E              mov R2,R20
 0102 4F5F              subi R20,255    ; addi 1
 0104 022D              mov R16,R2
 0106 D9DF              xcall _display_a_char
 0108           L19:
 0108                   .dbline 121
 0108 6395              inc R22
 010A           L21:
 010A                   .dbline 121
 010A 6031              cpi R22,16
 010C A0F3              brlo L18
 010E                   .dbline -2
 010E           L17:
 010E 0E940000          xcall pop_gset3
 0112                   .dbline 0 ; func end
 0112 0895              ret
 0114                   .dbsym r col_tem 20 c
 0114                   .dbsym r i 22 c
 0114                   .dbsym r ptr 10 pc
 0114                   .dbsym r col 20 c
 0114                   .dbend
 0114                   .dbfunc e delay_1ms _delay_1ms fV
 0114           ;              i -> R16,R17
                        .even
 0114           _delay_1ms::
 0114                   .dbline -1
 0114                   .dbline 128
 0114           ;       display_a_char(col_tem++,*(ptr+i));
 0114           ; }
 0114           ; 
 0114           ; /*---------------------------------------延时函数-------------------------------------*/
 0114           ; //1ms延时函数
 0114           ; void delay_1ms(void)
 0114           ; {
 0114                   .dbline 130
 0114 0027              clr R16
 0116 1127              clr R17
 0118 02C0              xjmp L26
 011A           L23:
 011A                   .dbline 130
 011A           L24:
 011A                   .dbline 130
 011A 0F5F              subi R16,255  ; offset = 1
 011C 1F4F              sbci R17,255
 011E           L26:
 011E                   .dbline 130
 011E           ;       unsigned int i;
 011E           ;       for(i=0;i<600;i++);
 011E 0835              cpi R16,88
 0120 E2E0              ldi R30,2
 0122 1E07              cpc R17,R30
 0124 D0F3              brlo L23
 0126                   .dbline -2
 0126           L22:
 0126                   .dbline 0 ; func end
 0126 0895              ret
 0128                   .dbsym r i 16 i
 0128                   .dbend
 0128                   .dbfunc e delay_nms _delay_nms fV
 0128           ;              i -> R20,R21
 0128           ;              n -> R22,R23
                        .even
 0128           _delay_nms::
 0128 0E940000          xcall push_gset2
 012C B801              movw R22,R16
 012E                   .dbline -1
 012E                   .dbline 135
 012E           ; }
 012E           ; 
 012E           ; //n ms延时函数
 012E           ; void delay_nms(unsigned int n)
 012E           ; {
 012E                   .dbline 137
 012E 4427              clr R20
 0130 5527              clr R21
 0132 03C0              xjmp L31
 0134           L28:
 0134                   .dbline 137
 0134 EFDF              xcall _delay_1ms
 0136           L29:
 0136                   .dbline 137
 0136 4F5F              subi R20,255  ; offset = 1
 0138 5F4F              sbci R21,255
 013A           L31:
 013A                   .dbline 137
 013A           ;       unsigned int i;
 013A           ;       for(i=0;i<n;i++)delay_1ms();
 013A 4617              cp R20,R22
 013C 5707              cpc R21,R23
 013E D0F3              brlo L28
 0140                   .dbline -2
 0140           L27:
 0140 0E940000          xcall pop_gset2
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbsym r i 20 i
 0146                   .dbsym r n 22 i
 0146                   .dbend

⌨️ 快捷键说明

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