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

📄 1602b_lcd.lis

📁 本次设计的自动往返电动小汽车
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602B_LCD.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\自动往返小汽车\源程序\自动往返小车lcd版\1602B_LCD.c
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; /**********************************************************
 0000           ; /* TC1602B LCD DISPLAY
 0000           ; /* LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
 0000           ;                    入命令
 0000           ; /* LCD第一行显示寄存器地址:0X80-0X8F
 0000           ; /* LCD第二行显示寄存器地址:0XC0-0XCF
 0000           ; /* 光标命令:
 0000           ; /* LCD_write_char(0x0e,0);    //光标开
 0000           ; /* LCD_write_char(0x0d,0);    //光标所在字符闪烁  
 0000           ; /* LCD_write_char(0x0c,0);    //光标关  
 0000           ; **********************************************************/
 0000           ; #include <io8515v.h>
 0000           ; #include <macros.h>
 0000           ; #include "1602LCD.h"
 0000           ; 
 0000           ; void LCD_init(void) 
 0000           ; { 
 0000                   .dbline 18
 0000           ;   LCD_CTRL_DDR|=LCD_RS | LCD_EN | LCD_RW;
 0000 87B3              in R24,0x17
 0002 8E60              ori R24,14
 0004 87BB              out 0x17,R24
 0006                   .dbline 19
 0006           ;   LCD_DATA_DDR|=LCD_DATA;
 0006 87B3              in R24,0x17
 0008 806F              ori R24,240
 000A 87BB              out 0x17,R24
 000C                   .dbline 20
 000C           ;   delay_nms(100); 
 000C 04E6              ldi R16,100
 000E 10E0              ldi R17,0
 0010 00D0              rcall _delay_nms
 0012                   .dbline 21
 0012           ;   LCD_write_char(0x28,0);                                         //功能设置  
 0012 2227              clr R18
 0014 3327              clr R19
 0016 08E2              ldi R16,40
 0018 10E0              ldi R17,0
 001A 3AD0              rcall _LCD_write_char
 001C                   .dbline 22
 001C           ;   LCD_write_char(0x28,0);                                         //功能设置  
 001C 2227              clr R18
 001E 3327              clr R19
 0020 08E2              ldi R16,40
 0022 10E0              ldi R17,0
 0024 35D0              rcall _LCD_write_char
 0026                   .dbline 23
 0026           ;   LCD_write_char(0x28,0);                                         //功能设置    
 0026 2227              clr R18
 0028 3327              clr R19
 002A 08E2              ldi R16,40
 002C 10E0              ldi R17,0
 002E 30D0              rcall _LCD_write_char
 0030                   .dbline 24
 0030           ;   LCD_write_char(0x28,0);                                         //功能设置  
 0030 2227              clr R18
 0032 3327              clr R19
 0034 08E2              ldi R16,40
 0036 10E0              ldi R17,0
 0038 2BD0              rcall _LCD_write_char
 003A                   .dbline 25
 003A           ;   LCD_write_char(0x28,0);                                         //功能设置  
 003A 2227              clr R18
 003C 3327              clr R19
 003E 08E2              ldi R16,40
 0040 10E0              ldi R17,0
 0042 26D0              rcall _LCD_write_char
 0044                   .dbline 26
 0044           ;   LCD_write_char(0x28,0);                                         //功能设置  
 0044 2227              clr R18
 0046 3327              clr R19
 0048 08E2              ldi R16,40
 004A 10E0              ldi R17,0
 004C 21D0              rcall _LCD_write_char
 004E                   .dbline 27
 004E           ;   delay_nus(100); 
 004E 04E6              ldi R16,100
 0050 10E0              ldi R17,0
 0052 00D0              rcall _delay_nus
 0054                   .dbline 28
 0054           ;   LCD_write_char(0x06,0);                                             //显示光标移动设置
 0054 2227              clr R18
 0056 3327              clr R19
 0058 06E0              ldi R16,6
 005A 10E0              ldi R17,0
 005C 19D0              rcall _LCD_write_char
 005E                   .dbline 29
 005E           ;   delay_nus(100);
 005E 04E6              ldi R16,100
 0060 10E0              ldi R17,0
 0062 00D0              rcall _delay_nus
 0064                   .dbline 30
 0064           ;   LCD_write_char(0x01,0);                                             //显示清屏
 0064 2227              clr R18
 0066 3327              clr R19
 0068 01E0              ldi R16,1
 006A 10E0              ldi R17,0
 006C 11D0              rcall _LCD_write_char
 006E                   .dbline 31
 006E           ;   delay_nms(2);
 006E 02E0              ldi R16,2
 0070 10E0              ldi R17,0
 0072 00D0              rcall _delay_nms
 0074                   .dbline 32
 0074           ;   LCD_write_char(0x0C,0);                                             //显示开 
 0074 2227              clr R18
 0076 3327              clr R19
 0078 0CE0              ldi R16,12
 007A 10E0              ldi R17,0
 007C 09D0              rcall _LCD_write_char
 007E                   .dbline 33
 007E           ;   delay_nus(100);
 007E 04E6              ldi R16,100
 0080 10E0              ldi R17,0
 0082                   .dbline -2
 0082                   .dbline 34
 0082           ; }
 0082           L1:
 0082                   .dbline 0 ; func end
 0082 00C0              rjmp _delay_nus
 0084                   .dbend
 0084                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 0084           _LCD_en_write::
 0084                   .dbline -1
 0084                   .dbline 37
 0084           ;  
 0084           ; void LCD_en_write(void)        //EN端产生一个高电平脉冲,写LCD
 0084           ;   {
 0084                   .dbline 38
 0084           ;     LCD_EN_PORT |= LCD_EN;
 0084 C39A              sbi 0x18,3
 0086                   .dbline 39
 0086           ;     delay_nus(5);
 0086 05E0              ldi R16,5
 0088 10E0              ldi R17,0
 008A 00D0              rcall _delay_nus
 008C                   .dbline 40
 008C           ;     LCD_EN_PORT &= ~LCD_EN;
 008C C398              cbi 0x18,3
 008E                   .dbline -2
 008E                   .dbline 41
 008E           ;   }
 008E           L2:
 008E                   .dbline 0 ; func end
 008E 0895              ret
 0090                   .dbend
 0090                   .dbfunc e LCD_write_char _LCD_write_char fV
 0090           ;      data_temp -> R22,R23
 0090           ;   command_temp -> R20,R21
 0090           ;           data -> R12,R13
 0090           ;        command -> R10,R11
                        .even
 0090           _LCD_write_char::
 0090 00D0              rcall push_gset4
 0092 C22E              mov R12,R18
 0094 D32E              mov R13,R19
 0096 A02E              mov R10,R16
 0098 B12E              mov R11,R17
 009A                   .dbline -1
 009A                   .dbline 51
 009A           ; 
 009A           ; /****************************************************************
 009A           ; /* LCD_write_char    : 英文字符串显示函数
 009A           ; /* 输入参数:*s      :英文字符串指针?
 009A           ;              X、Y    : 显示字符串的位置,X:0-15,Y:0-1
 009A           ;                      LCD第一行显示寄存器地址:0X80-0X8F
 009A           ;                      LCD第一行显示寄存器地址:0XC0-0XCF               
 009A           ; *****************************************************************/
 009A           ; void LCD_write_char(unsigned command,unsigned data)
 009A           ;   {
 009A                   .dbline 54
 009A           ;     unsigned command_temp,data_temp;        
 009A           ;     
 009A           ;       command_temp = command;
 009A 4A2D              mov R20,R10
 009C 5B2D              mov R21,R11
 009E                   .dbline 55
 009E           ;     data_temp = data;
 009E 6C2D              mov R22,R12
 00A0 7D2D              mov R23,R13
 00A2                   .dbline 56
 00A2           ;     LCD_wait_Ready();
 00A2 52D0              rcall _LCD_wait_Ready
 00A4                   .dbline 57
 00A4           ;     LCD_RW_PORT &= ~LCD_RW;             //RW=0
 00A4 C298              cbi 0x18,2
 00A6                   .dbline 58
 00A6           ;     if (command == 0)
 00A6 4030              cpi R20,0
 00A8 4507              cpc R20,R21
 00AA 71F4              brne L4
 00AC           X0:
 00AC                   .dbline 59
 00AC           ;       {
 00AC                   .dbline 60
 00AC           ;        LCD_RS_PORT |= LCD_RS;             //RS=1 
 00AC C19A              sbi 0x18,1
 00AE                   .dbline 61
 00AE           ;        LCD_DATA_PORT &= 0X0F;
 00AE 88B3              in R24,0x18
 00B0 8F70              andi R24,15
 00B2 88BB              out 0x18,R24
 00B4                   .dbline 62
 00B4           ;        LCD_DATA_PORT |= data_temp&0xf0;   //send high 4bit
 00B4 862F              mov R24,R22
 00B6 972F              mov R25,R23
 00B8 807F              andi R24,240
 00BA 9070              andi R25,0
 00BC 28B2              in R2,0x18
 00BE 3324              clr R3
 00C0 282A              or R2,R24
 00C2 392A              or R3,R25
 00C4 28BA              out 0x18,R2
 00C6                   .dbline 63
 00C6           ;       }
 00C6 0DC0              rjmp L5
 00C8           L4:
 00C8                   .dbline 65
 00C8           ;     else 
 00C8           ;       {
 00C8                   .dbline 66
 00C8           ;        LCD_RS_PORT &= ~LCD_RS;            //RS=0
 00C8 C198              cbi 0x18,1
 00CA                   .dbline 67
 00CA           ;        LCD_DATA_PORT &= 0X0F;
 00CA 88B3              in R24,0x18
 00CC 8F70              andi R24,15
 00CE 88BB              out 0x18,R24
 00D0                   .dbline 68
 00D0           ;      LCD_DATA_PORT |= command_temp&0xf0;//send high 4bit
 00D0 842F              mov R24,R20
 00D2 952F              mov R25,R21
 00D4 807F              andi R24,240
 00D6 9070              andi R25,0
 00D8 28B2              in R2,0x18
 00DA 3324              clr R3
 00DC 282A              or R2,R24
 00DE 392A              or R3,R25
 00E0 28BA              out 0x18,R2
 00E2                   .dbline 69
 00E2           ;       }
 00E2           L5:
 00E2                   .dbline 70
 00E2           ;     LCD_en_write();
 00E2 D0DF              rcall _LCD_en_write
 00E4                   .dbline 71
 00E4           ;     command_temp=command_temp << 4;     //send low 4bit
 00E4 440F              lsl R20
 00E6 551F              rol R21
 00E8 440F              lsl R20
 00EA 551F              rol R21
 00EC 440F              lsl R20
 00EE 551F              rol R21
 00F0 440F              lsl R20
 00F2 551F              rol R21
 00F4                   .dbline 72
 00F4           ;     data_temp=data_temp       << 4;
 00F4 660F              lsl R22
 00F6 771F              rol R23
 00F8 660F              lsl R22
 00FA 771F              rol R23
 00FC 660F              lsl R22
 00FE 771F              rol R23
 0100 660F              lsl R22
 0102 771F              rol R23
 0104                   .dbline 73
 0104           ;     LCD_DATA_PORT &= 0X0F;
 0104 88B3              in R24,0x18
 0106 8F70              andi R24,15
 0108 88BB              out 0x18,R24
 010A                   .dbline 74
 010A           ;     if (command==0)
 010A AA20              tst R10
 010C 61F4              brne L6
 010E BB20              tst R11
 0110 51F4              brne L6
 0112           X1:
 0112                   .dbline 75
 0112           ;       LCD_DATA_PORT |= data_temp&0xf0;

⌨️ 快捷键说明

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