📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile D:\DS18B20\main.c
0000 .dbfile D:\DS18B20\lcd.h
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 37
0000 ; /****************************端口宏定义**************************************/
0000 ; //LCD1602端口连接按照下面方式连接,RW接地.
0000 ; #define LCD_EN_PORT PORTA
0000 ; #define LCD_EN_DDR DDRA
0000 ; #define LCD_EN (1<<PA3)
0000 ;
0000 ; #define LCD_RS_PORT PORTA
0000 ; #define LCD_RS_DDR DDRA
0000 ; #define LCD_RS (1<<PA1)
0000 ;
0000 ; #define LCD_RW_PORT PORTA
0000 ; #define LCD_RW_DDR DDRA
0000 ; #define LCD_RW (1<<PA2)
0000 ;
0000 ; #define LCD_DATA_PORT PORTA
0000 ; #define LCD_DATA_DDR DDRA
0000 ; #define LCD_DATA_PIN PINA
0000 ; #define LCD_DATA ((1<<4)|(1<<5)|(1<<6)|(1<<7))
0000 ; /****************************函数申明****************************************/
0000 ; void LCD_init(void);
0000 ; void LCD_en_write(void);
0000 ; void LCD_WriteControl(unsigned char command);
0000 ; void LCD_WriteData(unsigned char data);
0000 ; void LCD_Clear(void);
0000 ; void LCD_Cursor (char row, char column);
0000 ; void LCD_DisplayCharacter (char Char);
0000 ; void LCD_DisplayString (char row, char column ,unsigned char *string);
0000 ; void LCD_DisplayInt (char row, char column ,unsigned int t);
0000 ; void LCD_Displayasc (char row, char column, char asc);
0000 ; void LCD_DisplayLong(char row, char column ,unsigned long t);
0000 ; void delay_1us(void);
0000 ; void delay_nus(unsigned int n);
0000 ; void delay_1ms(void);
0000 ; void delay_nms(unsigned int n);
0000 ; /*******************************液晶初始化***********************************/
0000 ; void LCD_init(void) //液晶初始化
0000 ; {
0000 .dbline 38
0000 ; LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出
0000 8AB3 in R24,0x1a
0002 806F ori R24,240
0004 8ABB out 0x1a,R24
0006 .dbline 39
0006 ; LCD_EN_DDR|=LCD_EN; //设置EN方向为输出
0006 D39A sbi 0x1a,3
0008 .dbline 40
0008 ; LCD_RS_DDR|=LCD_RS; //设置RS方向为输出
0008 D19A sbi 0x1a,1
000A .dbline 41
000A ; LCD_RS_DDR|=LCD_RW; //
000A D29A sbi 0x1a,2
000C .dbline 42
000C ; LCD_WriteControl(0x28);
000C 08E2 ldi R16,40
000E 14D0 xcall _LCD_WriteControl
0010 .dbline 43
0010 ; LCD_en_write();
0010 0DD0 xcall _LCD_en_write
0012 .dbline 44
0012 ; delay_nus(40);
0012 08E2 ldi R16,40
0014 10E0 ldi R17,0
0016 1BD1 xcall _delay_nus
0018 .dbline 45
0018 ; LCD_WriteControl(0x28); //4位显示
0018 08E2 ldi R16,40
001A 0ED0 xcall _LCD_WriteControl
001C .dbline 46
001C ; LCD_WriteControl(0x0c); //显示开
001C 0CE0 ldi R16,12
001E 0CD0 xcall _LCD_WriteControl
0020 .dbline 47
0020 ; LCD_WriteControl(0x01); //清屏
0020 01E0 ldi R16,1
0022 0AD0 xcall _LCD_WriteControl
0024 .dbline 48
0024 ; delay_nms(2);
0024 02E0 ldi R16,2
0026 10E0 ldi R17,0
0028 2BD1 xcall _delay_nms
002A .dbline -2
002A L1:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbend
002C .dbfunc e LCD_en_write _LCD_en_write fV
.even
002C _LCD_en_write::
002C .dbline -1
002C .dbline 52
002C ; }
002C ; /*******************************液晶使能*************************************/
002C ; void LCD_en_write(void) //液晶使能
002C ; {
002C .dbline 53
002C ; LCD_EN_PORT|=LCD_EN;
002C DB9A sbi 0x1b,3
002E .dbline 54
002E ; delay_nus(1);
002E 01E0 ldi R16,1
0030 10E0 ldi R17,0
0032 0DD1 xcall _delay_nus
0034 .dbline 55
0034 ; LCD_EN_PORT&=~LCD_EN;
0034 DB98 cbi 0x1b,3
0036 .dbline -2
0036 L2:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e LCD_WriteControl _LCD_WriteControl fV
0038 ; command -> R20
.even
0038 _LCD_WriteControl::
0038 4A93 st -y,R20
003A 402F mov R20,R16
003C .dbline -1
003C .dbline 59
003C ; }
003C ; /*******************************写指令***************************************/
003C ; void LCD_WriteControl(unsigned char command) //写指令
003C ; {
003C .dbline 60
003C ; delay_nus(16);
003C 00E1 ldi R16,16
003E 10E0 ldi R17,0
0040 06D1 xcall _delay_nus
0042 .dbline 61
0042 ; LCD_RS_PORT&=~LCD_RS; //RS=0
0042 D998 cbi 0x1b,1
0044 .dbline 62
0044 ; LCD_RW_PORT&=~LCD_RW; //
0044 DA98 cbi 0x1b,2
0046 .dbline 63
0046 ; LCD_DATA_PORT&=0X0f; //清高四位
0046 8BB3 in R24,0x1b
0048 8F70 andi R24,15
004A 8BBB out 0x1b,R24
004C .dbline 64
004C ; LCD_DATA_PORT|=command&0xf0; //写高四位
004C 842F mov R24,R20
004E 807F andi R24,240
0050 2BB2 in R2,0x1b
0052 282A or R2,R24
0054 2BBA out 0x1b,R2
0056 .dbline 65
0056 ; LCD_en_write();
0056 EADF xcall _LCD_en_write
0058 .dbline 66
0058 ; command=command<<4; //低四位移到高四位
0058 842F mov R24,R20
005A 8F70 andi R24,#0x0F
005C 8295 swap R24
005E 482F mov R20,R24
0060 .dbline 67
0060 ; LCD_DATA_PORT&=0x0f; //清高四位
0060 8BB3 in R24,0x1b
0062 8F70 andi R24,15
0064 8BBB out 0x1b,R24
0066 .dbline 68
0066 ; LCD_DATA_PORT|=command&0xf0; //写低四位
0066 842F mov R24,R20
0068 807F andi R24,240
006A 2BB2 in R2,0x1b
006C 282A or R2,R24
006E 2BBA out 0x1b,R2
0070 .dbline 69
0070 ; LCD_en_write();
0070 DDDF xcall _LCD_en_write
0072 .dbline -2
0072 L3:
0072 .dbline 0 ; func end
0072 4991 ld R20,y+
0074 0895 ret
0076 .dbsym r command 20 c
0076 .dbend
0076 .dbfunc e LCD_WriteData _LCD_WriteData fV
0076 ; data -> R20
.even
0076 _LCD_WriteData::
0076 4A93 st -y,R20
0078 402F mov R20,R16
007A .dbline -1
007A .dbline 73
007A ; }
007A ; /*******************************写数据***************************************/
007A ; void LCD_WriteData(unsigned char data) //写数据
007A ; {
007A .dbline 74
007A ; delay_nus(16);
007A 00E1 ldi R16,16
007C 10E0 ldi R17,0
007E E7D0 xcall _delay_nus
0080 .dbline 75
0080 ; LCD_RS_PORT|=LCD_RS; //RS=1
0080 D99A sbi 0x1b,1
0082 .dbline 76
0082 ; LCD_RW_PORT&=~LCD_RW; //
0082 DA98 cbi 0x1b,2
0084 .dbline 77
0084 ; LCD_DATA_PORT&=0X0f; //清高四位
0084 8BB3 in R24,0x1b
0086 8F70 andi R24,15
0088 8BBB out 0x1b,R24
008A .dbline 78
008A ; LCD_DATA_PORT|=data&0xf0; //写高四位
008A 842F mov R24,R20
008C 807F andi R24,240
008E 2BB2 in R2,0x1b
0090 282A or R2,R24
0092 2BBA out 0x1b,R2
0094 .dbline 79
0094 ; LCD_en_write();
0094 CBDF xcall _LCD_en_write
0096 .dbline 80
0096 ; data=data<<4; //低四位移到高四位
0096 842F mov R24,R20
0098 8F70 andi R24,#0x0F
009A 8295 swap R24
009C 482F mov R20,R24
009E .dbline 81
009E ; LCD_DATA_PORT&=0X0f; //清高四位
009E 8BB3 in R24,0x1b
00A0 8F70 andi R24,15
00A2 8BBB out 0x1b,R24
00A4 .dbline 82
00A4 ; LCD_DATA_PORT|=data&0xf0; //写低四位
00A4 842F mov R24,R20
00A6 807F andi R24,240
00A8 2BB2 in R2,0x1b
00AA 282A or R2,R24
00AC 2BBA out 0x1b,R2
00AE .dbline 83
00AE ; LCD_en_write();
00AE BEDF xcall _LCD_en_write
00B0 .dbline -2
00B0 L4:
00B0 .dbline 0 ; func end
00B0 4991 ld R20,y+
00B2 0895 ret
00B4 .dbsym r data 20 c
00B4 .dbend
00B4 .dbfunc e LCD_Clear _LCD_Clear fV
.even
00B4 _LCD_Clear::
00B4 .dbline -1
00B4 .dbline 88
00B4 ; }
00B4 ;
00B4 ; /*******************************清屏*****************************************/
00B4 ; void LCD_Clear(void)
00B4 ; {
00B4 .dbline 89
00B4 ; LCD_WriteControl(0x01);
00B4 01E0 ldi R16,1
00B6 C0DF xcall _LCD_WriteControl
00B8 .dbline -2
00B8 L5:
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbend
00BA .dbfunc e LCD_Cursor _LCD_Cursor fV
00BA ; column -> R20
00BA ; row -> R10
.even
00BA _LCD_Cursor::
00BA 0E940000 xcall push_xgsetF00C
00BE 422F mov R20,R18
00C0 A02E mov R10,R16
00C2 .dbline -1
00C2 .dbline 93
00C2 ; }
00C2 ;
00C2 ; void LCD_Cursor (char row, char column)
00C2 ; {
00C2 .dbline 94
00C2 ; switch (row)
00C2 6A2D mov R22,R10
00C4 7727 clr R23
00C6 6130 cpi R22,1
00C8 E0E0 ldi R30,0
00CA 7E07 cpc R23,R30
00CC 29F0 breq L10
00CE X0:
00CE 6230 cpi R22,2
00D0 E0E0 ldi R30,0
00D2 7E07 cpc R23,R30
00D4 31F0 breq L11
00D6 X1:
00D6 09C0 xjmp L8
00D8 L10:
00D8 .dbline 96
00D8 ; {
00D8 ; case 1: LCD_WriteControl (0x80 + column - 1); break;
00D8 042F mov R16,R20
00DA 0058 subi R16,128 ; addi 128
00DC 0150 subi R16,1
00DE ACDF xcall _LCD_WriteControl
00E0 .dbline 96
00E0 04C0 xjmp L8
00E2 L11:
00E2 .dbline 97
00E2 ; case 2: LCD_WriteControl (0xc0 + column - 1); break;
00E2 042F mov R16,R20
00E4 0054 subi R16,64 ; addi 192
00E6 0150 subi R16,1
00E8 A7DF xcall _LCD_WriteControl
00EA .dbline 97
00EA .dbline 98
00EA ; default: break;
00EA L8:
00EA .dbline -2
00EA L6:
00EA .dbline 0 ; func end
00EA 0C940000 xjmp pop_xgsetF00C
00EE .dbsym r column 20 c
00EE .dbsym r row 10 c
00EE .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -