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

📄 lcd.lis

📁 本程序是基于avr单片机的atmega48的控制16*4点阵型液晶。其中main文件调用LCD.c和LCD.h文件。用户可以直接把工程中的LCD.c和LCD.h文件放到自己的程序目录下即可。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\avrprojs\lcd_block\lcd.c
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; //ICC-AVR application builder : 2008-8-5 下午 04:30:31
 0000           ; // Target : M48
 0000           ; // Crystal: 1.0000Mhz
 0000           ; 
 0000           ; #include <iom48v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define LCD_DATA_PORT  PORTB
 0000           ; #define LCD_DATA_DDR   DDRB
 0000           ; #define LCD_EN_PORT  PORTD
 0000           ; #define LCD_RS_PORT  PORTD
 0000           ; #define LCD_EN  0x10
 0000           ; #define LCD_RS  0x08
 0000           ; 
 0000           ; 
 0000           ; void LCD_init(void)       //液晶初始化
 0000           ; {
 0000                   .dbline 18
 0000           ;  delay_nms(2);
 0000 02E0              ldi R16,2
 0002 10E0              ldi R17,0
 0004 E2D0              rcall _delay_nms
 0006                   .dbline 19
 0006           ;  LCD_write_char(0x38,0);  //8位显示
 0006 2227              clr R18
 0008 3327              clr R19
 000A 08E3              ldi R16,56
 000C 10E0              ldi R17,0
 000E 97D0              rcall _LCD_write_char
 0010                   .dbline 21
 0010           ; 
 0010           ;   delay_nms(6);
 0010 06E0              ldi R16,6
 0012 10E0              ldi R17,0
 0014 DAD0              rcall _delay_nms
 0016                   .dbline 22
 0016           ;  LCD_write_char(0x38,0);  //8位显示
 0016 2227              clr R18
 0018 3327              clr R19
 001A 08E3              ldi R16,56
 001C 10E0              ldi R17,0
 001E 8FD0              rcall _LCD_write_char
 0020                   .dbline 24
 0020           ; 
 0020           ;   delay_nms(2);
 0020 02E0              ldi R16,2
 0022 10E0              ldi R17,0
 0024 D2D0              rcall _delay_nms
 0026                   .dbline 25
 0026           ;  LCD_write_char(0x38,0);  //8位显示
 0026 2227              clr R18
 0028 3327              clr R19
 002A 08E3              ldi R16,56
 002C 10E0              ldi R17,0
 002E 87D0              rcall _LCD_write_char
 0030                   .dbline 27
 0030           ; 
 0030           ;  LCD_write_char(0x38,0);  //8位显示
 0030 2227              clr R18
 0032 3327              clr R19
 0034 08E3              ldi R16,56
 0036 10E0              ldi R17,0
 0038 82D0              rcall _LCD_write_char
 003A                   .dbline 28
 003A           ;   delay_nms(2);
 003A 02E0              ldi R16,2
 003C 10E0              ldi R17,0
 003E C5D0              rcall _delay_nms
 0040                   .dbline 29
 0040           ;  LCD_write_char(0x01,0);  //8位显示
 0040 2227              clr R18
 0042 3327              clr R19
 0044 01E0              ldi R16,1
 0046 10E0              ldi R17,0
 0048 7AD0              rcall _LCD_write_char
 004A                   .dbline 30
 004A           ;   delay_nms(2);
 004A 02E0              ldi R16,2
 004C 10E0              ldi R17,0
 004E BDD0              rcall _delay_nms
 0050                   .dbline 31
 0050           ;  LCD_write_char(0x08,0);  //8位显示
 0050 2227              clr R18
 0052 3327              clr R19
 0054 08E0              ldi R16,8
 0056 10E0              ldi R17,0
 0058 72D0              rcall _LCD_write_char
 005A                   .dbline 32
 005A           ;   delay_nms(1);
 005A 01E0              ldi R16,1
 005C 10E0              ldi R17,0
 005E B5D0              rcall _delay_nms
 0060                   .dbline 34
 0060           ;  
 0060           ;  LCD_write_char(0x06,0);  //8位显示
 0060 2227              clr R18
 0062 3327              clr R19
 0064 06E0              ldi R16,6
 0066 10E0              ldi R17,0
 0068 6AD0              rcall _LCD_write_char
 006A                   .dbline 35
 006A           ;  delay_nms(1);
 006A 01E0              ldi R16,1
 006C 10E0              ldi R17,0
 006E ADD0              rcall _delay_nms
 0070                   .dbline 38
 0070           ;  
 0070           ;  
 0070           ;  LCD_write_char(0x0c,0);  //显示开
 0070 2227              clr R18
 0072 3327              clr R19
 0074 0CE0              ldi R16,12
 0076 10E0              ldi R17,0
 0078 62D0              rcall _LCD_write_char
 007A                   .dbline 40
 007A           ;  //delay_nms(100);
 007A           ;  LCD_write_char(0x01,0);  //清屏
 007A 2227              clr R18
 007C 3327              clr R19
 007E 01E0              ldi R16,1
 0080 10E0              ldi R17,0
 0082 5DD0              rcall _LCD_write_char
 0084                   .dbline -2
 0084           L1:
 0084                   .dbline 0 ; func end
 0084 0895              ret
 0086                   .dbend
 0086                   .dbfunc e LCD_write_string _LCD_write_string fV
 0086           ;              s -> R20,R21
 0086           ;              Y -> R10,R11
 0086           ;              X -> R22,R23
                        .even
 0086           _LCD_write_string::
 0086 00D0              rcall push_gset3
 0088 A22E              mov R10,R18
 008A B32E              mov R11,R19
 008C 602F              mov R22,R16
 008E 712F              mov R23,R17
 0090 4E81              ldd R20,y+6
 0092 5F81              ldd R21,y+7
 0094                   .dbline -1
 0094                   .dbline 45
 0094           ;  //delay_nms(3);
 0094           ; }
 0094           ; 
 0094           ; void LCD_write_string(int X,int Y,unsigned char *s)
 0094           ;   {
 0094                   .dbline 46
 0094           ;     LCD_set_xy( X, Y ); //写地址
 0094 2A2D              mov R18,R10
 0096 3B2D              mov R19,R11
 0098 062F              mov R16,R22
 009A 172F              mov R17,R23
 009C 11D0              rcall _LCD_set_xy
 009E 09C0              rjmp L4
 00A0           L3:
 00A0                   .dbline 49
 00A0                   .dbline 50
 00A0 E42F              mov R30,R20
 00A2 F52F              mov R31,R21
 00A4 2081              ldd R18,z+0
 00A6 3327              clr R19
 00A8 0027              clr R16
 00AA 1127              clr R17
 00AC 48D0              rcall _LCD_write_char
 00AE                   .dbline 51
 00AE 4F5F              subi R20,255  ; offset = 1
 00B0 5F4F              sbci R21,255
 00B2                   .dbline 52
 00B2           L4:
 00B2                   .dbline 48
 00B2           ;     
 00B2           ;     while (*s)  // 写显示字符
 00B2 E42F              mov R30,R20
 00B4 F52F              mov R31,R21
 00B6 2080              ldd R2,z+0
 00B8 2220              tst R2
 00BA 91F7              brne L3
 00BC                   .dbline -2
 00BC           L2:
 00BC 00D0              rcall pop_gset3
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0                   .dbsym r s 20 pc
 00C0                   .dbsym r Y 10 I
 00C0                   .dbsym r X 22 I
 00C0                   .dbend
 00C0                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 00C0           ;        address -> R20
 00C0           ;              y -> R22,R23
 00C0           ;              x -> R20,R21
                        .even
 00C0           _LCD_set_xy::
 00C0 00D0              rcall push_gset2
 00C2 622F              mov R22,R18
 00C4 732F              mov R23,R19
 00C6 402F              mov R20,R16
 00C8 512F              mov R21,R17
 00CA                   .dbline -1
 00CA                   .dbline 57
 00CA           ;       {
 00CA           ;         LCD_write_char( 0, *s );
 00CA           ;           s ++;
 00CA           ;       }
 00CA           ;   }
 00CA           ; 
 00CA           ; 
 00CA           ; void LCD_set_xy( int x, int y )  //写地址函数
 00CA           ;   {
 00CA                   .dbline 60
 00CA           ;     
 00CA           ;     unsigned char address;
 00CA           ;       delay_nus(100);
 00CA 04E6              ldi R16,100
 00CC 10E0              ldi R17,0
 00CE 65D0              rcall _delay_nus
 00D0                   .dbline 61
 00D0           ;       address=x&0x0f;
 00D0 4F70              andi R20,15
 00D2 5070              andi R21,0
 00D4                   .dbline 62
 00D4           ;     switch(y)
 00D4 6030              cpi R22,0
 00D6 6707              cpc R22,R23
 00D8 69F0              breq L9
 00DA           X0:
 00DA 6130              cpi R22,1
 00DC E0E0              ldi R30,0
 00DE 7E07              cpc R23,R30
 00E0 51F0              breq L10
 00E2 6230              cpi R22,2
 00E4 E0E0              ldi R30,0
 00E6 7E07              cpc R23,R30
 00E8 41F0              breq L11
 00EA 6330              cpi R22,3
 00EC E0E0              ldi R30,0
 00EE 7E07              cpc R23,R30
 00F0 31F0              breq L12
 00F2 06C0              rjmp L8
 00F4           X1:
 00F4                   .dbline 63
 00F4           ;       {
 00F4           L9:
 00F4                   .dbline 65
 00F4           ;               case 0:
 00F4           ;                       address+= 0x00;          //0x00 - 0x0f
 00F4                   .dbline 66
 00F4           ;                       break;
 00F4 05C0              rjmp L8
 00F6           L10:
 00F6                   .dbline 68
 00F6           ;               case 1:
 00F6           ;                       address+= 0x40;          //0x40 - 0x4f
 00F6 405C              subi R20,192    ; addi 64
 00F8                   .dbline 69
 00F8           ;                       break;
 00F8 03C0              rjmp L8
 00FA           L11:
 00FA                   .dbline 71
 00FA           ;               case 2:
 00FA           ;                       address+= 0x10;          //0x10 - 0x1f
 00FA 405F              subi R20,240    ; addi 16
 00FC                   .dbline 72
 00FC           ;                       break;
 00FC 01C0              rjmp L8
 00FE           L12:
 00FE                   .dbline 74
 00FE           ;               case 3:
 00FE           ;                       address+= 0x50;          //0x50 - 0x5f
 00FE 405B              subi R20,176    ; addi 80
 0100                   .dbline 75
 0100           ;                       break;
 0100                   .dbline 77
 0100           ;               default :
 0100           ;                       break;
 0100           L8:
 0100                   .dbline 79
 0100           ;       }
 0100           ;       address=address|0x80;
 0100 4068              ori R20,128
 0102                   .dbline 80
 0102           ;     LCD_write_char( address, 0 );
 0102 2227              clr R18
 0104 3327              clr R19
 0106 042F              mov R16,R20
 0108 1127              clr R17
 010A 19D0              rcall _LCD_write_char
 010C                   .dbline -2
 010C           L6:
 010C 00D0              rcall pop_gset2
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbsym r address 20 c
 0110                   .dbsym r y 22 I
 0110                   .dbsym r x 20 I
 0110                   .dbend
 0110                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 0110           _LCD_en_write::
 0110                   .dbline -1
 0110                   .dbline 86
 0110           ;       //delay_nms(2);
 0110           ;   }
 0110           ; 
 0110           ; 
 0110           ; void LCD_en_write(void)  //液晶使能
 0110           ; {
 0110                   .dbline 87
 0110           ;   LCD_EN_PORT|=LCD_EN;
 0110 5C9A              sbi 0xb,4
 0112                   .dbline 88
 0112           ;   delay_nus(1);
 0112 01E0              ldi R16,1
 0114 10E0              ldi R17,0
 0116 41D0              rcall _delay_nus
 0118                   .dbline 89
 0118           ;   LCD_EN_PORT&=~LCD_EN;
 0118 5C98              cbi 0xb,4
 011A                   .dbline -2
 011A           L13:

⌨️ 快捷键说明

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