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

📄 lcd12864.lis

📁 转于ICCAVR.COM ,转于ICCAVR.COM ,
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module lcd12864.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\016-LCD12864\lcd12864.c
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_us::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; /*
 0000           ;       LCD1602液晶屏驱动模块
 0000           ;       1、可直接嵌入到项目中使用
 0000           ;       2、晶振频率:1M
 0000           ;       3、如晶振提高低层驱动延时要作相应修改
 0000           ; 
 0000           ;       AVR_AFA
 0000           ;       www.iccavr.com
 0000           ; */
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include "font.h"
 0000           ; 
 0000           ; #define RS_CLR        PORTD &= ~(1 << PD3)/*命令或数据选择*/
 0000           ; #define RS_SET        PORTD |= (1 << PD3)/*RS = 1命令,RS = 0数据*/
 0000           ; 
 0000           ; #define RW_CLR        PORTD &= ~(1 << PD4)/*读取或写入选择*/
 0000           ; #define RW_SET        PORTD |= (1 << PD4)/*RW = 1读,RW = 0写*/
 0000           ; 
 0000           ; #define EN_CLR        PORTD &= ~(1 << PD6)/*读写使能信号*/
 0000           ; #define EN_SET        PORTD |= (1 << PD6)/*下降沿有效*/
 0000           ; 
 0000           ; #define RST_CLR       PORTD &= ~(1 << PD7)/*芯片复位脚*/
 0000           ; #define RST_SET       PORTD |= (1 << PD7)/*高电平复位*/
 0000           ; 
 0000           ; #define CSA_CLR       PORTC &= ~(1 << PC6)/*左半屏片选*/
 0000           ; #define CSA_SET       PORTC |= (1 << PC6)/*高电平选中*/
 0000           ; 
 0000           ; #define CSB_CLR       PORTC &= ~(1 << PC7)/*右半屏片选*/
 0000           ; #define CSB_SET       PORTC |= (1 << PC7)/*高电平选中*/
 0000           ; 
 0000           ; /*延时函数*/
 0000           ; void delay_us(unsigned int n) {
 0000                   .dbline 35
 0000           ; 
 0000           ;       if (n == 0) {
 0000 0030              cpi R16,0
 0002 0107              cpc R16,R17
 0004 09F4              brne L5
 0006           X0:
 0006                   .dbline 35
 0006                   .dbline 36
 0006           ;               return ;
 0006 06C0              xjmp L1
 0008           L4:
 0008                   .dbline 38
 0008           L5:
 0008                   .dbline 38
 0008           ;               }
 0008           ;       while (--n);
 0008 C801              movw R24,R16
 000A 0197              sbiw R24,1
 000C 8C01              movw R16,R24
 000E 0030              cpi R16,0
 0010 0107              cpc R16,R17
 0012 D1F7              brne L4
 0014           X1:
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym r n 16 i
 0016                   .dbend
 0016                   .dbfunc e delay_ms _delay_ms fV
 0016           ;              a -> R20
 0016           ;              b -> R22
 0016           ;              i -> R16
                        .even
 0016           _delay_ms::
 0016 0E940000          xcall push_gset2
 001A                   .dbline -1
 001A                   .dbline 42
 001A           ; }
 001A           ; 
 001A           ; /*延时函数*/
 001A           ; void delay_ms(unsigned char i) {
 001A                   .dbline 45
 001A 41E0              ldi R20,1
 001C 06C0              xjmp L11
 001E           L8:
 001E                   .dbline 45
 001E           ; 
 001E           ;       unsigned char a, b;
 001E           ;       for (a = 1; a < i; a++) {
 001E                   .dbline 46
 001E 61E0              ldi R22,1
 0020 01C0              xjmp L15
 0022           L12:
 0022                   .dbline 46
 0022                   .dbline 47
 0022                   .dbline 48
 0022           L13:
 0022                   .dbline 46
 0022 6395              inc R22
 0024           L15:
 0024                   .dbline 46
 0024 6623              tst R22
 0026 E9F7              brne L12
 0028                   .dbline 49
 0028           L9:
 0028                   .dbline 45
 0028 4395              inc R20
 002A           L11:
 002A                   .dbline 45
 002A 4017              cp R20,R16
 002C C0F3              brlo L8
 002E                   .dbline -2
 002E           L7:
 002E 0E940000          xcall pop_gset2
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r a 20 c
 0034                   .dbsym r b 22 c
 0034                   .dbsym r i 16 c
 0034                   .dbend
 0034                   .dbfunc e LCD0_write_com _LCD0_write_com fV
 0034           ;            com -> R20
                        .even
 0034           _LCD0_write_com::
 0034 0E940000          xcall push_gset1
 0038 402F              mov R20,R16
 003A                   .dbline -1
 003A                   .dbline 53
 003A           ;               for (b = 1; b; b++) {
 003A           ;                       ;
 003A           ;                       }
 003A           ;               }
 003A           ; }
 003A           ; 
 003A           ; /*显示屏命令写入函数前半屏*/
 003A           ; void LCD0_write_com(unsigned char com) {
 003A                   .dbline 55
 003A           ;       
 003A           ;       RS_CLR;
 003A 9398              cbi 0x12,3
 003C                   .dbline 56
 003C           ;       RW_CLR;
 003C 9498              cbi 0x12,4
 003E                   .dbline 57
 003E           ;       CSA_SET;
 003E AE9A              sbi 0x15,6
 0040                   .dbline 58
 0040           ;       CSB_CLR;
 0040 AF98              cbi 0x15,7
 0042                   .dbline 59
 0042           ;       EN_SET;
 0042 969A              sbi 0x12,6
 0044                   .dbline 60
 0044           ;       PORTB = com;
 0044 48BB              out 0x18,R20
 0046                   .dbline 61
 0046           ;       delay_us(1);
 0046 01E0              ldi R16,1
 0048 10E0              ldi R17,0
 004A DADF              xcall _delay_us
 004C                   .dbline 62
 004C           ;       EN_CLR;
 004C 9698              cbi 0x12,6
 004E                   .dbline -2
 004E           L16:
 004E 0E940000          xcall pop_gset1
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r com 20 c
 0054                   .dbend
 0054                   .dbfunc e LCD1_write_com _LCD1_write_com fV
 0054           ;            com -> R20
                        .even
 0054           _LCD1_write_com::
 0054 0E940000          xcall push_gset1
 0058 402F              mov R20,R16
 005A                   .dbline -1
 005A                   .dbline 66
 005A           ; }
 005A           ; 
 005A           ; /*显示屏命令写入函数后半屏*/
 005A           ; void LCD1_write_com(unsigned char com) {
 005A                   .dbline 68
 005A           ;       
 005A           ;       RS_CLR;
 005A 9398              cbi 0x12,3
 005C                   .dbline 69
 005C           ;       RW_CLR;
 005C 9498              cbi 0x12,4
 005E                   .dbline 70
 005E           ;       CSA_CLR;
 005E AE98              cbi 0x15,6
 0060                   .dbline 71
 0060           ;       CSB_SET;
 0060 AF9A              sbi 0x15,7
 0062                   .dbline 72
 0062           ;       EN_SET;
 0062 969A              sbi 0x12,6
 0064                   .dbline 73
 0064           ;       PORTB = com;
 0064 48BB              out 0x18,R20
 0066                   .dbline 74
 0066           ;       delay_us(1);
 0066 01E0              ldi R16,1
 0068 10E0              ldi R17,0
 006A CADF              xcall _delay_us
 006C                   .dbline 75
 006C           ;       EN_CLR;
 006C 9698              cbi 0x12,6
 006E                   .dbline -2
 006E           L17:
 006E 0E940000          xcall pop_gset1
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbsym r com 20 c
 0074                   .dbend
 0074                   .dbfunc e LCD0_write_data _LCD0_write_data fV
 0074           ;           data -> R20
                        .even
 0074           _LCD0_write_data::
 0074 0E940000          xcall push_gset1
 0078 402F              mov R20,R16
 007A                   .dbline -1
 007A                   .dbline 79
 007A           ; }
 007A           ; 
 007A           ; /*显示屏命令写入函数*/
 007A           ; void LCD0_write_data(unsigned char data) {
 007A                   .dbline 81
 007A           ; 
 007A           ;       RS_SET;
 007A 939A              sbi 0x12,3
 007C                   .dbline 82
 007C           ;       RW_CLR;
 007C 9498              cbi 0x12,4
 007E                   .dbline 83
 007E           ;       CSA_SET;
 007E AE9A              sbi 0x15,6
 0080                   .dbline 84
 0080           ;       CSB_CLR;
 0080 AF98              cbi 0x15,7
 0082                   .dbline 85
 0082           ;       EN_SET;
 0082 969A              sbi 0x12,6
 0084                   .dbline 86
 0084           ;       PORTB = data;
 0084 48BB              out 0x18,R20
 0086                   .dbline 87
 0086           ;       delay_us(1);
 0086 01E0              ldi R16,1
 0088 10E0              ldi R17,0
 008A BADF              xcall _delay_us
 008C                   .dbline 88
 008C           ;       EN_CLR;
 008C 9698              cbi 0x12,6
 008E                   .dbline -2
 008E           L18:
 008E 0E940000          xcall pop_gset1
 0092                   .dbline 0 ; func end
 0092 0895              ret
 0094                   .dbsym r data 20 c
 0094                   .dbend
 0094                   .dbfunc e LCD1_write_data _LCD1_write_data fV
 0094           ;           data -> R20
                        .even
 0094           _LCD1_write_data::
 0094 0E940000          xcall push_gset1
 0098 402F              mov R20,R16
 009A                   .dbline -1
 009A                   .dbline 92
 009A           ; }
 009A           ; 
 009A           ; /*显示屏命令写入函数*/
 009A           ; void LCD1_write_data(unsigned char data) {
 009A                   .dbline 94
 009A           ; 
 009A           ;       RS_SET;
 009A 939A              sbi 0x12,3
 009C                   .dbline 95
 009C           ;       RW_CLR;
 009C 9498              cbi 0x12,4
 009E                   .dbline 96
 009E           ;       CSA_CLR;
 009E AE98              cbi 0x15,6
 00A0                   .dbline 97
 00A0           ;       CSB_SET;
 00A0 AF9A              sbi 0x15,7
 00A2                   .dbline 98
 00A2           ;       EN_SET;
 00A2 969A              sbi 0x12,6
 00A4                   .dbline 99
 00A4           ;       PORTB = data;
 00A4 48BB              out 0x18,R20
 00A6                   .dbline 100
 00A6           ;       delay_us(1);
 00A6 01E0              ldi R16,1
 00A8 10E0              ldi R17,0
 00AA AADF              xcall _delay_us
 00AC                   .dbline 101
 00AC           ;       EN_CLR;
 00AC 9698              cbi 0x12,6
 00AE                   .dbline -2
 00AE           L19:
 00AE 0E940000          xcall pop_gset1
 00B2                   .dbline 0 ; func end
 00B2 0895              ret
 00B4                   .dbsym r data 20 c
 00B4                   .dbend
 00B4                   .dbfunc e disp_clear _disp_clear fV
 00B4           ;              x -> R20
 00B4           ;              y -> R10
 00B4           ;             x1 -> R22
 00B4           ;             x0 -> R12
                        .even
 00B4           _disp_clear::
 00B4 0E940000          xcall push_gset4
 00B8 622F              mov R22,R18
 00BA C02E              mov R12,R16
 00BC A884              ldd R10,y+8
 00BE                   .dbline -1
 00BE                   .dbline 105
 00BE           ; }
 00BE           ; 
 00BE           ; /*显示屏清空显示*/
 00BE           ; void disp_clear(unsigned char x0, unsigned char x1, unsigned char y) {
 00BE                   .dbline 110
 00BE           ; 
 00BE           ;       unsigned char x;
 00BE           ;       
 00BE           ;       /*清除高位*/    
 00BE           ;       x = x0;
 00BE 4C2D              mov R20,R12
 00C0                   .dbline 111
 00C0           ;       if (x < 63) {                   /*地址在左半屏范围内*/
 00C0 4F33              cpi R20,63
 00C2 70F4              brsh L24
 00C4                   .dbline 111
 00C4                   .dbline 112
 00C4           ;               LCD0_write_com(y | 0xB8);
 00C4 0A2D              mov R16,R10
 00C6 086B              ori R16,184
 00C8 B5DF              xcall _LCD0_write_com
 00CA                   .dbline 113
 00CA           ;               LCD0_write_com(x | 0x40);
 00CA 042F              mov R16,R20
 00CC 0064              ori R16,64
 00CE B2DF              xcall _LCD0_write_com
 00D0                   .dbline 114
 00D0           ;               }
 00D0 07C0              xjmp L24
 00D2           L23:
 00D2                   .dbline 115
 00D2           ;       while (x < x1) {
 00D2                   .dbline 116
 00D2           ;               LCD0_write_data(0x00);
 00D2 0027              clr R16
 00D4 CFDF              xcall _LCD0_write_data
 00D6                   .dbline 117
 00D6           ;               x ++;
 00D6 4395              inc R20
 00D8                   .dbline 118
 00D8           ;               if (x > 63) {           /*判断地址是否越界*/
 00D8 8FE3              ldi R24,63
 00DA 8417              cp R24,R20
 00DC 08F4              brsh L26
 00DE                   .dbline 118
 00DE                   .dbline 119
 00DE           ;                       break;
 00DE 02C0              xjmp L25
 00E0           L26:
 00E0                   .dbline 121
 00E0           L24:
 00E0                   .dbline 115
 00E0 4617              cp R20,R22
 00E2 B8F3              brlo L23
 00E4           L25:
 00E4                   .dbline 122
 00E4           ;                       }
 00E4           ;               }
 00E4           ;       if (x < x1) {                   /*地址进入左半屏范围*/
 00E4 4617              cp R20,R22
 00E6 50F4              brsh L31
 00E8                   .dbline 122

⌨️ 快捷键说明

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