📄 1602b_lcd.lis
字号:
.module _1602B_LCD.c
.area text(rom, con, rel)
0000 .dbfile D:\test6\1602B_LCD.c
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 21
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "1602LCD.h"
0000 ;
0000 ; /**********************************************************
0000 ; 光标命令
0000 ; LCD_write_char(0x0e,0); //光标开
0000 ; LCD_write_char(0x0d,0); //光标所在字符闪烁
0000 ; LCD_write_char(0x0c,0); //光标关
0000 ; **********************************************************/
0000 ; /**********************************************************
0000 ; TC1602B LCD DISPLAY
0000 ; 建立时间:2003年11月9号
0000 ; 修改日期:2003年11月14号
0000 ; LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
0000 ; 入命令
0000 ; LCD第一行显示寄存器地址:0X80-0X8F
0000 ; LCD第二行显示寄存器地址:0XC0-0XCF
0000 ; **********************************************************/
0000 ; void LCD_init(void)
0000 ; {
0000 .dbline 22
0000 ; delay_nms(15);
0000 0FE0 ldi R16,15
0002 10E0 ldi R17,0
0004 00D0 rcall _delay_nms
0006 .dbline 24
0006 ;
0006 ; LCD_write_char(0x28,0); //4bit test
0006 2227 clr R18
0008 3327 clr R19
000A 08E2 ldi R16,40
000C 10E0 ldi R17,0
000E 16D0 rcall _LCD_write_char
0010 .dbline 25
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 11D0 rcall _LCD_write_char
001A .dbline 26
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 0CD0 rcall _LCD_write_char
0024 .dbline 27
0024 ; LCD_write_char(0x06,0); //显示光标移动设置
0024 2227 clr R18
0026 3327 clr R19
0028 06E0 ldi R16,6
002A 10E0 ldi R17,0
002C 07D0 rcall _LCD_write_char
002E .dbline -2
002E L1:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbend
0030 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0030 _LCD_en_write::
0030 .dbline -1
0030 .dbline 31
0030 ; }
0030 ;
0030 ; void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
0030 ; {
0030 .dbline 32
0030 ; LCD_EN_PORT |= LCD_EN;
0030 AD9A sbi 0x15,5
0032 .dbline 33
0032 ; delay_nus(1);
0032 01E0 ldi R16,1
0034 10E0 ldi R17,0
0036 00D0 rcall _delay_nus
0038 .dbline 34
0038 ; LCD_EN_PORT &= ~LCD_EN;
0038 AD98 cbi 0x15,5
003A .dbline -2
003A L2:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e LCD_write_char _LCD_write_char fV
003C ; data_temp -> R22,R23
003C ; command_temp -> R20,R21
003C ; data -> R12,R13
003C ; command -> R10,R11
.even
003C _LCD_write_char::
003C 00D0 rcall push_gset4
003E 6901 movw R12,R18
0040 5801 movw R10,R16
0042 .dbline -1
0042 .dbline 49
0042 ; }
0042 ;
0042 ; /*-----------------------------------------------------------------------
0042 ; LCD_write_char : 英文字符串显示函数
0042 ;
0042 ; 输入参数:*s :英文字符串指针;
0042 ; X、Y : 显示字符串的位置,X:0-15,Y:0-1
0042 ; LCD第一行显示寄存器地址:0X80-0X8F
0042 ; LCD第一行显示寄存器地址:0XC0-0XCF
0042 ;
0042 ; 编写日期 :2003-11-19
0042 ; 最后修改日期 :2004-8-19
0042 ; -----------------------------------------------------------------------*/
0042 ; void LCD_write_char(unsigned command,unsigned data)
0042 ; {
0042 .dbline 52
0042 ; unsigned command_temp,data_temp;
0042 ;
0042 ; command_temp = command;
0042 A501 movw R20,R10
0044 .dbline 53
0044 ; data_temp = data;
0044 B601 movw R22,R12
0046 .dbline 55
0046 ;
0046 ; LCD_wait_Ready();
0046 4ED0 rcall _LCD_wait_Ready
0048 .dbline 57
0048 ;
0048 ; LCD_RW_PORT &= ~LCD_RW; //RW=0
0048 9398 cbi 0x12,3
004A .dbline 59
004A ;
004A ; if (command == 0)
004A 4030 cpi R20,0
004C 4507 cpc R20,R21
004E 69F4 brne L4
0050 X0:
0050 .dbline 60
0050 ; {
0050 .dbline 61
0050 ; LCD_RS_PORT |= LCD_RS; //RS=1
0050 AC9A sbi 0x15,4
0052 .dbline 62
0052 ; LCD_DATA_PORT &= 0X0F;
0052 82B3 in R24,0x12
0054 8F70 andi R24,15
0056 82BB out 0x12,R24
0058 .dbline 63
0058 ; LCD_DATA_PORT |= data_temp&0xf0; //send high 4bit
0058 CB01 movw R24,R22
005A 807F andi R24,240
005C 9070 andi R25,0
005E 22B2 in R2,0x12
0060 3324 clr R3
0062 282A or R2,R24
0064 392A or R3,R25
0066 22BA out 0x12,R2
0068 .dbline 64
0068 ; }
0068 0CC0 rjmp L5
006A L4:
006A .dbline 66
006A ; else
006A ; {
006A .dbline 67
006A ; LCD_RS_PORT &= ~LCD_RS; //RS=0
006A AC98 cbi 0x15,4
006C .dbline 68
006C ; LCD_DATA_PORT &= 0X0F;
006C 82B3 in R24,0x12
006E 8F70 andi R24,15
0070 82BB out 0x12,R24
0072 .dbline 69
0072 ; LCD_DATA_PORT |= command_temp&0xf0;//send high 4bit
0072 CA01 movw R24,R20
0074 807F andi R24,240
0076 9070 andi R25,0
0078 22B2 in R2,0x12
007A 3324 clr R3
007C 282A or R2,R24
007E 392A or R3,R25
0080 22BA out 0x12,R2
0082 .dbline 70
0082 ; }
0082 L5:
0082 .dbline 71
0082 ; LCD_en_write();
0082 D6DF rcall _LCD_en_write
0084 .dbline 73
0084 ;
0084 ; command_temp=command_temp << 4; //send low 4bit
0084 440F lsl R20
0086 551F rol R21
0088 440F lsl R20
008A 551F rol R21
008C 440F lsl R20
008E 551F rol R21
0090 440F lsl R20
0092 551F rol R21
0094 .dbline 74
0094 ; data_temp=data_temp << 4;
0094 660F lsl R22
0096 771F rol R23
0098 660F lsl R22
009A 771F rol R23
009C 660F lsl R22
009E 771F rol R23
00A0 660F lsl R22
00A2 771F rol R23
00A4 .dbline 76
00A4 ;
00A4 ; LCD_DATA_PORT &= 0X0F;
00A4 82B3 in R24,0x12
00A6 8F70 andi R24,15
00A8 82BB out 0x12,R24
00AA .dbline 77
00AA ; if (command==0)
00AA AA20 tst R10
00AC 59F4 brne L6
00AE BB20 tst R11
00B0 49F4 brne L6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -