📄 1.lis
字号:
.module _1.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
0000 _tab::
0000 .blkb 2
.area idata
0000 3031 .byte 48,49
.area data(ram, con, rel)
0002 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
0002 .blkb 2
.area idata
0002 3233 .byte 50,51
.area data(ram, con, rel)
0004 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
0004 .blkb 2
.area idata
0004 3435 .byte 52,53
.area data(ram, con, rel)
0006 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
0006 .blkb 2
.area idata
0006 3637 .byte 54,55
.area data(ram, con, rel)
0008 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
0008 .blkb 2
.area idata
0008 3839 .byte 56,57
.area data(ram, con, rel)
000A .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
000A .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
000A .dbsym e tab _tab A[10:10]c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 34
0000 ;
0000 ; #define LCD_EN_PORT PORTB //以下2个要设为同一个口
0000 ; #define LCD_EN_DDR DDRB
0000 ; #define LCD_RS_PORT PORTB //以下2个要设为同一个口
0000 ; #define LCD_RS_DDR DDRB
0000 ; #define LCD_DATA_PORT PORTB //以下3个要设为同一个口
0000 ; #define LCD_DATA_DDR DDRB //一定要用高4位
0000 ; #define LCD_DATA_PIN PINB
0000 ;
0000 ; #define LCD_RS (1<<PB7) //0x80 portB7 out
0000 ; #define LCD_EN (1<<PB6) //0x60 portB6 out
0000 ; #define LCD_DATA ((1<<PB5)|(1<<PB4)|(1<<PB3)|(1<<PB2))
0000 ;
0000 ; unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'};
0000 ; /*--------------------------------------------------------------------------------------------------
0000 ; 函数声明
0000 ; --------------------------------------------------------------------------------------------------*/
0000 ; void LCD_init(void);
0000 ; void LCD_en_write(void);
0000 ; void LCD_write_command(unsigned char command) ;
0000 ; void LCD_write_data(unsigned char data);
0000 ; void LCD_set_xy (unsigned char x, unsigned char y);
0000 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
0000 ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
0000 ;
0000 ; /*补充*/
0000 ; void LCD_write_shu(unsigned int x,unsigned int t,unsigned int n);
0000 ; /*补充*/
0000 ;
0000 ; void delay_nus(unsigned int n);
0000 ; void delay_nms(unsigned int n);
0000 ;
0000 ; void LCD_init(void) //液晶初始化
0000 ; {
0000 .dbline 35
0000 ; LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出
0000 87B3 in R24,0x17
0002 8C63 ori R24,60
0004 87BB out 0x17,R24
0006 .dbline 36
0006 ; LCD_EN_DDR|=LCD_EN; //设置EN方向为输出
0006 BE9A sbi 0x17,6
0008 .dbline 37
0008 ; LCD_RS_DDR|=LCD_RS; //设置RS方向为输出
0008 BF9A sbi 0x17,7
000A .dbline 38
000A ; LCD_write_command(0x28);
000A 08E2 ldi R16,40
000C 14D0 xcall _LCD_write_command
000E .dbline 39
000E ; LCD_en_write();
000E 0DD0 xcall _LCD_en_write
0010 .dbline 40
0010 ; delay_nus(40);
0010 08E2 ldi R16,40
0012 10E0 ldi R17,0
0014 F8D0 xcall _delay_nus
0016 .dbline 41
0016 ; LCD_write_command(0x28); //4位显示
0016 08E2 ldi R16,40
0018 0ED0 xcall _LCD_write_command
001A .dbline 42
001A ; LCD_write_command(0x0c); //显示开
001A 0CE0 ldi R16,12
001C 0CD0 xcall _LCD_write_command
001E .dbline 43
001E ; LCD_write_command(0x01); //清屏
001E 01E0 ldi R16,1
0020 0AD0 xcall _LCD_write_command
0022 .dbline 44
0022 ; delay_nms(2);
0022 02E0 ldi R16,2
0024 10E0 ldi R17,0
0026 07D1 xcall _delay_nms
0028 .dbline -2
0028 L1:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e LCD_en_write _LCD_en_write fV
.even
002A _LCD_en_write::
002A .dbline -1
002A .dbline 48
002A ; }
002A ;
002A ; void LCD_en_write(void) //液晶使能
002A ; {
002A .dbline 49
002A ; LCD_EN_PORT|=LCD_EN;
002A C69A sbi 0x18,6
002C .dbline 50
002C ; delay_nus(1);
002C 01E0 ldi R16,1
002E 10E0 ldi R17,0
0030 EAD0 xcall _delay_nus
0032 .dbline 51
0032 ; LCD_EN_PORT&=~LCD_EN;
0032 C698 cbi 0x18,6
0034 .dbline -2
0034 L2:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbend
0036 .dbfunc e LCD_write_command _LCD_write_command fV
0036 ; temp -> R22
0036 ; command -> R20
.even
0036 _LCD_write_command::
0036 4A93 st -y,R20
0038 6A93 st -y,R22
003A 402F mov R20,R16
003C .dbline -1
003C .dbline 55
003C ; }
003C ;
003C ; void LCD_write_command(unsigned char command) //写指令
003C ; {
003C .dbline 57
003C ; unsigned char temp;
003C ; command=((command&0b10000000)>>7)|((command&0b01000000)>>5)|((command&0b00100000)>>3)|((command&0b00010000)>>1)|((command&0b00001000)<<1)|((command&0b00000100)<<3)|((command&0b00000010)<<5)|((command&0b00000001)<<7);
003C 842F mov R24,R20
003E 8074 andi R24,64
0040 282E mov R2,R24
0042 2694 lsr R2
0044 2694 lsr R2
0046 2694 lsr R2
0048 2694 lsr R2
004A 2694 lsr R2
004C 842F mov R24,R20
004E 8078 andi R24,128
0050 382E mov R3,R24
0052 3694 lsr R3
0054 3694 lsr R3
0056 3694 lsr R3
0058 3694 lsr R3
005A 3694 lsr R3
005C 3694 lsr R3
005E 3694 lsr R3
0060 3228 or R3,R2
0062 842F mov R24,R20
0064 8072 andi R24,32
0066 8695 lsr R24
0068 8695 lsr R24
006A 8695 lsr R24
006C 382A or R3,R24
006E 842F mov R24,R20
0070 8071 andi R24,16
0072 8695 lsr R24
0074 382A or R3,R24
0076 842F mov R24,R20
0078 8870 andi R24,8
007A 880F lsl R24
007C 382A or R3,R24
007E 842F mov R24,R20
0080 8470 andi R24,4
0082 880F lsl R24
0084 880F lsl R24
0086 880F lsl R24
0088 382A or R3,R24
008A 842F mov R24,R20
008C 8270 andi R24,2
008E 880F lsl R24
0090 880F lsl R24
0092 880F lsl R24
0094 880F lsl R24
0096 880F lsl R24
0098 382A or R3,R24
009A 842F mov R24,R20
009C 8170 andi R24,1
009E 880F lsl R24
00A0 880F lsl R24
00A2 880F lsl R24
00A4 880F lsl R24
00A6 880F lsl R24
00A8 880F lsl R24
00AA 880F lsl R24
00AC 382A or R3,R24
00AE 432D mov R20,R3
00B0 .dbline 58
00B0 ; delay_nus(16);
00B0 00E1 ldi R16,16
00B2 10E0 ldi R17,0
00B4 A8D0 xcall _delay_nus
00B6 .dbline 59
00B6 ; temp=command<<2;
00B6 642F mov R22,R20
00B8 660F lsl R22
00BA 660F lsl R22
00BC .dbline 60
00BC ; LCD_RS_PORT&=~LCD_RS; //RS=0
00BC C798 cbi 0x18,7
00BE .dbline 61
00BE ; LCD_DATA_PORT&=0b11000011; //清高四位
00BE 88B3 in R24,0x18
00C0 837C andi R24,195
00C2 88BB out 0x18,R24
00C4 .dbline 62
00C4 ; LCD_DATA_PORT|=temp&0b00111100; //写高四位
00C4 862F mov R24,R22
00C6 8C73 andi R24,60
00C8 28B2 in R2,0x18
00CA 282A or R2,R24
00CC 28BA out 0x18,R2
00CE .dbline 63
00CE ; LCD_en_write();
00CE ADDF xcall _LCD_en_write
00D0 .dbline 64
00D0 ; command=command>>2; //低四位移到高四位
00D0 4695 lsr R20
00D2 4695 lsr R20
00D4 .dbline 65
00D4 ; LCD_DATA_PORT&=0b11000011; //清高四位
00D4 88B3 in R24,0x18
00D6 837C andi R24,195
00D8 88BB out 0x18,R24
00DA .dbline 66
00DA ; LCD_DATA_PORT|=command&0b00111100; //写低四位
00DA 842F mov R24,R20
00DC 8C73 andi R24,60
00DE 28B2 in R2,0x18
00E0 282A or R2,R24
00E2 28BA out 0x18,R2
00E4 .dbline 67
00E4 ; LCD_en_write();
00E4 A2DF xcall _LCD_en_write
00E6 .dbline -2
00E6 L3:
00E6 .dbline 0 ; func end
00E6 6991 ld R22,y+
00E8 4991 ld R20,y+
00EA 0895 ret
00EC .dbsym r temp 22 c
00EC .dbsym r command 20 c
00EC .dbend
00EC .dbfunc e LCD_write_data _LCD_write_data fV
00EC ; temp -> R22
00EC ; data -> R20
.even
00EC _LCD_write_data::
00EC 4A93 st -y,R20
00EE 6A93 st -y,R22
00F0 402F mov R20,R16
00F2 .dbline -1
00F2 .dbline 72
00F2 ;
00F2 ; }
00F2 ;
00F2 ; void LCD_write_data(unsigned char data) //写数据
00F2 ; {
00F2 .dbline 74
00F2 ; unsigned char temp;
00F2 ; data=((data&0b10000000)>>7)|((data&0b01000000)>>5)|((data&0b00100000)>>3)|((data&0b00010000)>>1)|((data&0b00001000)<<1)|((data&0b00000100)<<3)|((data&0b00000010)<<5)|((data&0b00000001)<<7);
00F2 842F mov R24,R20
00F4 8074 andi R24,64
00F6 282E mov R2,R24
00F8 2694 lsr R2
00FA 2694 lsr R2
00FC 2694 lsr R2
00FE 2694 lsr R2
0100 2694 lsr R2
0102 842F mov R24,R20
0104 8078 andi R24,128
0106 382E mov R3,R24
0108 3694 lsr R3
010A 3694 lsr R3
010C 3694 lsr R3
010E 3694 lsr R3
0110 3694 lsr R3
0112 3694 lsr R3
0114 3694 lsr R3
0116 3228 or R3,R2
0118 842F mov R24,R20
011A 8072 andi R24,32
011C 8695 lsr R24
011E 8695 lsr R24
0120 8695 lsr R24
0122 382A or R3,R24
0124 842F mov R24,R20
0126 8071 andi R24,16
0128 8695 lsr R24
012A 382A or R3,R24
012C 842F mov R24,R20
012E 8870 andi R24,8
0130 880F lsl R24
0132 382A or R3,R24
0134 842F mov R24,R20
0136 8470 andi R24,4
0138 880F lsl R24
013A 880F lsl R24
013C 880F lsl R24
013E 382A or R3,R24
0140 842F mov R24,R20
0142 8270 andi R24,2
0144 880F lsl R24
0146 880F lsl R24
0148 880F lsl R24
014A 880F lsl R24
014C 880F lsl R24
014E 382A or R3,R24
0150 842F mov R24,R20
0152 8170 andi R24,1
0154 880F lsl R24
0156 880F lsl R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -