📄 12864.lis
字号:
.module _12864.c
.area text(rom, con, rel)
0000 .dbfile D:\M16开发板实验教程\icc-avr\12864\12864.c
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 19
0000 ; #include "iom16v.h"
0000 ; #include "macros.h"
0000 ; #include "12864.h"
0000 ;
0000 ;
0000 ;
0000 ;
0000 ; /**********************************************************
0000 ; RT12864M LCD DISPLAY
0000 ; 建立时间:2005年2月1号
0000 ; 修改日期:2005年2月1号
0000 ;
0000 ; **********************************************************/
0000 ; extern void delay_nus(unsigned int n);
0000 ; extern void delay_nms(unsigned int n);
0000 ;
0000 ;
0000 ; void LCD_init(void)
0000 ; {
0000 .dbline 20
0000 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0000 C198 cbi 0x18,1
0002 .dbline 21
0002 ; delay_nms(1);
0002 01E0 ldi R16,1
0004 10E0 ldi R17,0
0006 A6D0 xcall _delay_nms
0008 .dbline 22
0008 ; LCD_write_char(0x34,0);
0008 2227 clr R18
000A 3327 clr R19
000C 04E3 ldi R16,52
000E 10E0 ldi R17,0
0010 1CD0 xcall _LCD_write_char
0012 .dbline 23
0012 ; delay_nms(8);
0012 08E0 ldi R16,8
0014 10E0 ldi R17,0
0016 9ED0 xcall _delay_nms
0018 .dbline 24
0018 ; LCD_write_char(0x30,0);
0018 2227 clr R18
001A 3327 clr R19
001C 00E3 ldi R16,48
001E 10E0 ldi R17,0
0020 14D0 xcall _LCD_write_char
0022 .dbline 25
0022 ; delay_nms(8);
0022 08E0 ldi R16,8
0024 10E0 ldi R17,0
0026 96D0 xcall _delay_nms
0028 .dbline 26
0028 ; LCD_write_char(0x0C,0); //显示清屏
0028 2227 clr R18
002A 3327 clr R19
002C 0CE0 ldi R16,12
002E 10E0 ldi R17,0
0030 0CD0 xcall _LCD_write_char
0032 .dbline 27
0032 ; delay_nms(8);
0032 08E0 ldi R16,8
0034 10E0 ldi R17,0
0036 8ED0 xcall _delay_nms
0038 .dbline 28
0038 ; LCD_write_char(0x01,0); //显示开
0038 2227 clr R18
003A 3327 clr R19
003C 01E0 ldi R16,1
003E 10E0 ldi R17,0
0040 04D0 xcall _LCD_write_char
0042 .dbline 29
0042 ; delay_nms(8);
0042 08E0 ldi R16,8
0044 10E0 ldi R17,0
0046 86D0 xcall _delay_nms
0048 .dbline -2
0048 L1:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e LCD_write_char _LCD_write_char fV
004A ; data_temp -> R22,R23
004A ; command_temp -> R20,R21
004A ; data -> R12,R13
004A ; command -> R10,R11
.even
004A _LCD_write_char::
004A 0E940000 xcall push_gset4
004E 6901 movw R12,R18
0050 5801 movw R10,R16
0052 .dbline -1
0052 .dbline 47
0052 ;
0052 ; }
0052 ;
0052 ;
0052 ;
0052 ; /*-----------------------------------------------------------------------
0052 ; LCD_write_char : 中英文字符串显示函数
0052 ; LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
0052 ; 入命令
0052 ; 输入参数:*s :中英文字符串指针;
0052 ; X、Y : 显示字符串的位置,X:0-15,Y:0-1
0052 ; LCD第一行显示寄存器地址:0X80-0X87
0052 ; LCD第二行显示寄存器地址:0X90-0X9F
0052 ; LCD第三行显示寄存器地址:0X88-0X8F
0052 ; LCD第四行显示寄存器地址:0X98-0X9F
0052 ; -----------------------------------------------------------------------*/
0052 ; void LCD_write_char(unsigned command,unsigned data)
0052 ; {
0052 .dbline 50
0052 ; unsigned command_temp;
0052 ; unsigned data_temp;
0052 ; command_temp = command;
0052 A501 movw R20,R10
0054 .dbline 51
0054 ; data_temp = data;
0054 B601 movw R22,R12
0056 .dbline 52
0056 ; if (command == 0)
0056 4030 cpi R20,0
0058 4507 cpc R20,R21
005A 61F4 brne L3
005C X0:
005C .dbline 53
005C ; {
005C .dbline 54
005C ; LCD_DATA_PORT = data_temp; //send 8bit
005C 6BBB out 0x1b,R22
005E .dbline 56
005E ;
005E ; LCD_RS_PORT |= LCD_RS; //RS=1
005E C09A sbi 0x18,0
0060 .dbline 58
0060 ;
0060 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0060 C198 cbi 0x18,1
0062 .dbline 59
0062 ; delay_nus(2);
0062 02E0 ldi R16,2
0064 10E0 ldi R17,0
0066 5DD0 xcall _delay_nus
0068 .dbline 60
0068 ; LCD_EN_PORT |= LCD_EN; //EN=1
0068 C19A sbi 0x18,1
006A .dbline 61
006A ; delay_nus(500);
006A 04EF ldi R16,500
006C 11E0 ldi R17,1
006E 59D0 xcall _delay_nus
0070 .dbline 62
0070 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0070 C198 cbi 0x18,1
0072 .dbline 63
0072 ; }
0072 0BC0 xjmp L4
0074 L3:
0074 .dbline 65
0074 .dbline 66
0074 4BBB out 0x1b,R20
0076 .dbline 68
0076 C098 cbi 0x18,0
0078 .dbline 69
0078 C198 cbi 0x18,1
007A .dbline 70
007A 02E0 ldi R16,2
007C 10E0 ldi R17,0
007E 51D0 xcall _delay_nus
0080 .dbline 71
0080 C19A sbi 0x18,1
0082 .dbline 72
0082 04EF ldi R16,500
0084 11E0 ldi R17,1
0086 4DD0 xcall _delay_nus
0088 .dbline 73
0088 C198 cbi 0x18,1
008A .dbline 74
008A L4:
008A .dbline -2
008A L2:
008A 0E940000 xcall pop_gset4
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbsym r data_temp 22 i
0090 .dbsym r command_temp 20 i
0090 .dbsym r data 12 i
0090 .dbsym r command 10 i
0090 .dbend
0090 .dbfunc e LCD_set_xy _LCD_set_xy fV
0090 ; address -> R20
0090 ; y -> R20
0090 ; x -> R22
.even
0090 _LCD_set_xy::
0090 0E940000 xcall push_gset2
0094 422F mov R20,R18
0096 602F mov R22,R16
0098 .dbline -1
0098 .dbline 90
0098 ; else
0098 ; {
0098 ; LCD_DATA_PORT = command_temp;//send command
0098 ;
0098 ; LCD_RS_PORT &= ~LCD_RS; //RS=0
0098 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0098 ; delay_nus(2);
0098 ; LCD_EN_PORT |= LCD_EN; //EN=1
0098 ; delay_nus(500);
0098 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0098 ; }
0098 ;
0098 ; }
0098 ;
0098 ;
0098 ; /*-----------------------------------------------------------------------
0098 ; LCD_set_xy : 设置LCD显示的起始位置
0098 ;
0098 ; 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-3
0098 ; LCD第一行显示寄存器地址:0X80-0X8F
0098 ; LCD第一行显示寄存器地址:0XC0-0XCF
0098 ;
0098 ; 编写日期 :2005
0098 ; 最后修改日期 :2005
0098 ; -----------------------------------------------------------------------*/
0098 ; void LCD_set_xy( unsigned char x, unsigned char y )
0098 ; {
0098 .dbline 92
0098 5527 clr R21
009A 4030 cpi R20,0
009C 4507 cpc R20,R21
009E 69F0 breq L9
00A0 X1:
00A0 4130 cpi R20,1
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
00A6 61F0 breq L10
00A8 4230 cpi R20,2
00AA E0E0 ldi R30,0
00AC 5E07 cpc R21,R30
00AE 59F0 breq L11
00B0 4330 cpi R20,3
00B2 E0E0 ldi R30,0
00B4 5E07 cpc R21,R30
00B6 51F0 breq L12
00B8 0CC0 xjmp L6
00BA X2:
00BA .dbline 92
00BA ; unsigned char address;
00BA ; switch(y){
00BA L9:
00BA .dbline 94
00BA ; case 0:
00BA ; address = 0x80 + x;
00BA 462F mov R20,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -