📄 1602b_lcd.lis
字号:
.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 + -