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

📄 lcd1602.lis

📁 环保型IC卡门禁系统的C程序
💻 LIS
字号:
                        .module lcd1602.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\lcd1602.c
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 7
 0000           ; //-----------------------------LCD1602 Function---------------------------------
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include "lcd1602.h"
 0000           ; 
 0000           ; void LCD_init(void)       //液晶初始化
 0000           ; {
 0000                   .dbline 8
 0000           ;  delay_nms(2);
 0000 02E0              ldi R16,2
 0002 10E0              ldi R17,0
 0004 00D0              rcall _delay_nms
 0006                   .dbline 10
 0006           ;  
 0006           ;  LCD_write_char(0x28,0);  //4位显示
 0006 2227              clr R18
 0008 3327              clr R19
 000A 08E2              ldi R16,40
 000C 10E0              ldi R17,0
 000E 39D0              rcall _LCD_write_char
 0010                   .dbline 11
 0010           ;  LCD_write_char(0x0c,0);  //显示开
 0010 2227              clr R18
 0012 3327              clr R19
 0014 0CE0              ldi R16,12
 0016 10E0              ldi R17,0
 0018 34D0              rcall _LCD_write_char
 001A                   .dbline 12
 001A           ;  LCD_write_char(0x01,0);  //清屏
 001A 2227              clr R18
 001C 3327              clr R19
 001E 01E0              ldi R16,1
 0020 10E0              ldi R17,0
 0022 2FD0              rcall _LCD_write_char
 0024                   .dbline -2
 0024           L1:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbend
 0026                   .dbfunc e LCD_write_string _LCD_write_string fV
 0026           ;              s -> R20,R21
 0026           ;              Y -> R10
 0026           ;              X -> R22
                        .even
 0026           _LCD_write_string::
 0026 00D0              rcall push_gset3
 0028 A22E              mov R10,R18
 002A 602F              mov R22,R16
 002C 4E81              ldd R20,y+6
 002E 5F81              ldd R21,y+7
 0030                   .dbline -1
 0030                   .dbline 16
 0030           ; }
 0030           ; 
 0030           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 0030           ; {
 0030                   .dbline 17
 0030           ;   LCD_set_xy( X, Y ); //写地址
 0030 2A2D              mov R18,R10
 0032 062F              mov R16,R22
 0034 0FD0              rcall _LCD_set_xy
 0036 08C0              rjmp L4
 0038           L3:
 0038                   .dbline 20
 0038                   .dbline 21
 0038 FA01              movw R30,R20
 003A 2081              ldd R18,z+0
 003C 3327              clr R19
 003E 0027              clr R16
 0040 1127              clr R17
 0042 1FD0              rcall _LCD_write_char
 0044                   .dbline 22
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048                   .dbline 23
 0048           L4:
 0048                   .dbline 19
 0048           ;     
 0048           ;   while (*s)  // 写显示字符
 0048 FA01              movw R30,R20
 004A 2080              ldd R2,z+0
 004C 2220              tst R2
 004E A1F7              brne L3
 0050                   .dbline -2
 0050           L2:
 0050 00D0              rcall pop_gset3
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r s 20 pc
 0054                   .dbsym r Y 10 c
 0054                   .dbsym r X 22 c
 0054                   .dbend
 0054                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 0054           ;        address -> R20
 0054           ;              y -> R20
 0054           ;              x -> R22
                        .even
 0054           _LCD_set_xy::
 0054 00D0              rcall push_gset2
 0056 422F              mov R20,R18
 0058 602F              mov R22,R16
 005A                   .dbline -1
 005A                   .dbline 27
 005A           ;   {
 005A           ;     LCD_write_char( 0, *s );
 005A           ;     s ++;
 005A           ;   }
 005A           ; }
 005A           ; 
 005A           ; void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
 005A           ; {
 005A                   .dbline 30
 005A           ;   unsigned char address;
 005A           ;   
 005A           ;   if (y == 0) 
 005A 4423              tst R20
 005C 19F4              brne L7
 005E                   .dbline 31
 005E           ;     address = 0x80 + x;
 005E 462F              mov R20,R22
 0060 4058              subi R20,128    ; addi 128
 0062 02C0              rjmp L8
 0064           L7:
 0064                   .dbline 33
 0064           ;   else 
 0064           ;     address = 0xc0 + x;
 0064 462F              mov R20,R22
 0066 4054              subi R20,64    ; addi 192
 0068           L8:
 0068                   .dbline 34
 0068           ;     LCD_write_char( address, 0 );
 0068 2227              clr R18
 006A 3327              clr R19
 006C 042F              mov R16,R20
 006E 1127              clr R17
 0070 08D0              rcall _LCD_write_char
 0072                   .dbline -2
 0072           L6:
 0072 00D0              rcall pop_gset2
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r address 20 c
 0076                   .dbsym r y 20 c
 0076                   .dbsym r x 22 c
 0076                   .dbend
 0076                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 0076           _LCD_en_write::
 0076                   .dbline -1
 0076                   .dbline 38
 0076           ; }
 0076           ; 
 0076           ; void LCD_en_write(void)  //液晶使能
 0076           ; {
 0076                   .dbline 39
 0076           ;   LCD_EN_PORT|=LCD_EN;
 0076 AC9A              sbi 0x15,4
 0078                   .dbline 40
 0078           ;   delay_nus(1);
 0078 01E0              ldi R16,1
 007A 10E0              ldi R17,0
 007C 00D0              rcall _delay_nus
 007E                   .dbline 41
 007E           ;   LCD_EN_PORT&=~LCD_EN;
 007E AC98              cbi 0x15,4
 0080                   .dbline -2
 0080           L9:
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbend
 0082                   .dbfunc e LCD_write_char _LCD_write_char fV
 0082           ;      data_temp -> R22,R23
 0082           ;   command_temp -> R20,R21
 0082           ;           data -> R12,R13
 0082           ;        command -> R10,R11
                        .even
 0082           _LCD_write_char::
 0082 00D0              rcall push_gset4
 0084 6901              movw R12,R18
 0086 5801              movw R10,R16
 0088                   .dbline -1
 0088                   .dbline 45
 0088           ; }
 0088           ; 
 0088           ; void LCD_write_char(unsigned command,unsigned data) // 写数据
 0088           ; {
 0088                   .dbline 48
 0088           ;  unsigned command_temp,data_temp;
 0088           ;  
 0088           ;  command_temp=command;
 0088 A501              movw R20,R10
 008A                   .dbline 49
 008A           ;  data_temp=data;
 008A B601              movw R22,R12
 008C                   .dbline 50
 008C           ;  delay_nus(16);
 008C 00E1              ldi R16,16
 008E 10E0              ldi R17,0
 0090 00D0              rcall _delay_nus
 0092                   .dbline 52
 0092           ;  
 0092           ;  if(command==0)
 0092 4030              cpi R20,0
 0094 4507              cpc R20,R21
 0096 11F5              brne L11
 0098           X0:
 0098                   .dbline 53
 0098           ;  {
 0098                   .dbline 54
 0098           ;   LCD_RS_PORT|=LCD_RS;  //RS=1
 0098 AD9A              sbi 0x15,5
 009A                   .dbline 55
 009A           ;   LCD_DATA_PORT&=0Xf0;
 009A 85B3              in R24,0x15
 009C 807F              andi R24,240
 009E 85BB              out 0x15,R24
 00A0                   .dbline 56
 00A0           ;   LCD_DATA_PORT|=((data_temp&0xf0)>>4);  //写高四位
 00A0 CB01              movw R24,R22
 00A2 807F              andi R24,240
 00A4 9070              andi R25,0
 00A6 9695              lsr R25
 00A8 8795              ror R24
 00AA 9695              lsr R25
 00AC 8795              ror R24
 00AE 9695              lsr R25
 00B0 8795              ror R24
 00B2 9695              lsr R25
 00B4 8795              ror R24
 00B6 25B2              in R2,0x15
 00B8 3324              clr R3
 00BA 282A              or R2,R24
 00BC 392A              or R3,R25
 00BE 25BA              out 0x15,R2
 00C0                   .dbline 57
 00C0           ;   LCD_en_write(); 
 00C0 DADF              rcall _LCD_en_write
 00C2                   .dbline 58
 00C2           ;   LCD_DATA_PORT&=0Xf0;
 00C2 85B3              in R24,0x15
 00C4 807F              andi R24,240
 00C6 85BB              out 0x15,R24
 00C8                   .dbline 59
 00C8           ;   LCD_DATA_PORT|=data_temp&0x0f;   //写低四位
 00C8 CB01              movw R24,R22
 00CA 8F70              andi R24,15
 00CC 9070              andi R25,0
 00CE 25B2              in R2,0x15
 00D0 3324              clr R3
 00D2 282A              or R2,R24
 00D4 392A              or R3,R25
 00D6 25BA              out 0x15,R2
 00D8                   .dbline 60
 00D8           ;   LCD_en_write();
 00D8 CEDF              rcall _LCD_en_write
 00DA                   .dbline 61
 00DA           ;  }
 00DA 21C0              rjmp L12
 00DC           L11:
 00DC                   .dbline 63
 00DC                   .dbline 64
 00DC AD98              cbi 0x15,5
 00DE                   .dbline 65
 00DE 85B3              in R24,0x15
 00E0 807F              andi R24,240
 00E2 85BB              out 0x15,R24
 00E4                   .dbline 66
 00E4 CA01              movw R24,R20
 00E6 807F              andi R24,240
 00E8 9070              andi R25,0
 00EA 9695              lsr R25
 00EC 8795              ror R24
 00EE 9695              lsr R25
 00F0 8795              ror R24
 00F2 9695              lsr R25
 00F4 8795              ror R24
 00F6 9695              lsr R25
 00F8 8795              ror R24
 00FA 25B2              in R2,0x15
 00FC 3324              clr R3
 00FE 282A              or R2,R24
 0100 392A              or R3,R25
 0102 25BA              out 0x15,R2
 0104                   .dbline 67
 0104 B8DF              rcall _LCD_en_write
 0106                   .dbline 68
 0106 85B3              in R24,0x15
 0108 807F              andi R24,240
 010A 85BB              out 0x15,R24
 010C                   .dbline 69
 010C CA01              movw R24,R20
 010E 8F70              andi R24,15
 0110 9070              andi R25,0
 0112 25B2              in R2,0x15
 0114 3324              clr R3
 0116 282A              or R2,R24
 0118 392A              or R3,R25
 011A 25BA              out 0x15,R2
 011C                   .dbline 70
 011C ACDF              rcall _LCD_en_write
 011E                   .dbline 71
 011E           L12:
 011E                   .dbline -2
 011E           L10:
 011E 00D0              rcall pop_gset4
 0120                   .dbline 0 ; func end
 0120 0895              ret
 0122                   .dbsym r data_temp 22 i
 0122                   .dbsym r command_temp 20 i
 0122                   .dbsym r data 12 i
 0122                   .dbsym r command 10 i
 0122                   .dbend

⌨️ 快捷键说明

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