📄 fsdfds.lst
字号:
__start:
__text_start:
0036 E5CF LDI R28,0x5F
0037 E0D4 LDI R29,4
0038 BFCD OUT 0x3D,R28
0039 BFDE OUT 0x3E,R29
003A 51C0 SUBI R28,0x10
003B 40D0 SBCI R29,0
003C EA0A LDI R16,0xAA
003D 8308 STD Y+0,R16
003E 2400 CLR R0
003F E7E8 LDI R30,0x78
0040 E0F0 LDI R31,0
0041 E010 LDI R17,0
0042 37ED CPI R30,0x7D
0043 07F1 CPC R31,R17
0044 F011 BEQ 0x0047
0045 9201 ST R0,Z+
0046 CFFB RJMP 0x0042
0047 8300 STD Z+0,R16
0048 E5E4 LDI R30,0x54
0049 E0F0 LDI R31,0
004A E6A0 LDI R26,0x60
004B E0B0 LDI R27,0
004C E010 LDI R17,0
004D 36EC CPI R30,0x6C
004E 07F1 CPC R31,R17
004F F021 BEQ 0x0054
0050 95C8 LPM
0051 9631 ADIW R30,1
0052 920D ST R0,X+
0053 CFF9 RJMP 0x004D
0054 940E01EB CALL _main
_exit:
0056 CFFF RJMP _exit
FILE: D:\我的文档\桌面\harvest\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 编译器:ICC-AVR v6.31A
(0004) 目标芯片 : M16
(0005) 时钟: 8.0000Mhz
(0006) -----------------------------------------------------------------------*/
(0007) #ifndef __delay_h
(0008) #define __delay_h
(0009) void delay_nus(unsigned int n);
(0010) void delay_nms(unsigned int n);
(0011) void delay_1us(void);
(0012) void delay_1ms(void) ;
(0013)
(0014) void delay_1us(void) //1us延时函数
(0015) {
(0016) asm("nop");
_delay_1us:
0057 0000 NOP
0058 9508 RET
_delay_nus:
i --> R20
n --> R22
0059 940E0267 CALL push_gset2
005B 01B8 MOVW R22,R16
(0017) }
(0018)
(0019) void delay_nus(unsigned int n) //N us延时函数
(0020) {
(0021) unsigned int i=0;
005C 2744 CLR R20
005D 2755 CLR R21
(0022) for (i=0;i<n;i++)
005E C003 RJMP 0x0062
(0023) delay_1us();
005F DFF7 RCALL _delay_1us
0060 5F4F SUBI R20,0xFF
0061 4F5F SBCI R21,0xFF
0062 1746 CP R20,R22
0063 0757 CPC R21,R23
0064 F3D0 BCS 0x005F
0065 940E025B CALL pop_gset2
0067 9508 RET
(0024) }
(0025)
(0026) void delay_1ms(void) //1ms延时函数
(0027) {
(0028) unsigned int i;
(0029) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0068 2700 CLR R16
0069 2711 CLR R17
006A C002 RJMP 0x006D
006B 5F0F SUBI R16,0xFF
006C 4F1F SBCI R17,0xFF
006D 3704 CPI R16,0x74
006E E0E4 LDI R30,4
006F 071E CPC R17,R30
0070 F3D0 BCS 0x006B
0071 9508 RET
_delay_nms:
i --> R20
n --> R22
0072 940E0267 CALL push_gset2
0074 01B8 MOVW R22,R16
(0030) }
(0031)
(0032) void delay_nms(unsigned int n) //N ms延时函数
(0033) {
(0034) unsigned int i=0;
0075 2744 CLR R20
0076 2755 CLR R21
(0035) for (i=0;i<n;i++)
0077 C003 RJMP 0x007B
(0036) delay_1ms();
0078 DFEF RCALL _delay_1ms
0079 5F4F SUBI R20,0xFF
007A 4F5F SBCI R21,0xFF
007B 1746 CP R20,R22
007C 0757 CPC R21,R23
007D F3D0 BCS 0x0078
007E 940E025B CALL pop_gset2
0080 9508 RET
FILE: D:\我的文档\桌面\harvest\lcd.h
(0001) /*---------------------------------------------------------
(0002) 液晶LCD1602C 使用4条数据线(D4~D7)
(0003) 编译器:ICC-AVR v6.31A 日期: 2005-11-24 20:29:57
(0004) 目标芯片 : M16
(0005) 时钟: 8.0000Mhz
(0006) 作者:archeng504
(0007) -----------------------------------------------------------*/
(0008) #ifndef __lcd_h
(0009) #define __lcd_h
(0010) /*-------------------------------------------------------------
(0011) LCD引脚定义
(0012) 1---GND
(0013) 2---VCC
(0014) 3---VO
(0015) 4---RS
(0016) 5---RW
(0017) 6---EN
(0018) 7到14--D0-D7
(0019) 15--背景灯+
(0020) 16--背景灯-
(0021) -----------------------------------------------------------------*/
(0022) #include <iom16v.h>
(0023) #include <macros.h>
(0024) #include <delay.h>
(0025) /*---------------------------------------------------------------
(0026) 下面是AVR与LCD连接信息
(0027) PC2 ->RS
(0028) PC3 ->EN
(0029) 地 ->RW
(0030) PC4 ->D4
(0031) PC5 ->D5
(0032) PC6 ->D6
(0033) PC7 ->D7
(0034) 要使用本驱动,改变下面配置信息即可
(0035) -----------------------------------------------------------------*/
(0036) #define LCD_EN_PORT PORTB //以下2个要设为同一个口
(0037) #define LCD_EN_DDR DDRB
(0038) #define LCD_RS_PORT PORTB //以下2个要设为同一个口
(0039) #define LCD_RS_DDR DDRB
(0040) #define LCD_DATA_PORT PORTB //以下3个要设为同一个口
(0041) #define LCD_DATA_DDR DDRB //一定要用高4位
(0042) #define LCD_DATA_PIN PINB
(0043) #define LCD_RS (1<<PB2) //0x04 portC2 out
(0044) #define LCD_EN (1<<PB3) //0x08 portC3 out
(0045) #define LCD_DATA ((1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7)) //0xf0 portD4/5/6/7 out
(0046) /*--------------------------------------------------------------------------------------------------
(0047) 函数说明
(0048) --------------------------------------------------------------------------------------------------*/
(0049) void LCD_init(void);
(0050) void LCD_en_write(void);
(0051) void LCD_write_command(unsigned char command) ;
(0052) void LCD_write_data(unsigned char data);
(0053) void LCD_set_xy (unsigned char x, unsigned char y);
(0054) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0055) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
(0056) void delay_nus(unsigned int n);
(0057) void delay_nms(unsigned int n);
(0058) void LCD_init(void) //液晶初始化
(0059) {
(0060) LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出
_LCD_init:
0081 B387 IN R24,0x17
0082 6F80 ORI R24,0xF0
0083 BB87 OUT 0x17,R24
(0061) LCD_EN_DDR|=LCD_EN; //设置EN方向为输出
0084 9ABB SBI 0x17,3
(0062) LCD_RS_DDR|=LCD_RS; //设置RS方向为输出
0085 9ABA SBI 0x17,2
(0063) LCD_write_command(0x28);
0086 E208 LDI R16,0x28
0087 D014 RCALL _LCD_write_command
(0064) LCD_en_write();
0088 D00D RCALL _LCD_en_write
(0065) delay_nus(40);
0089 E208 LDI R16,0x28
008A E010 LDI R17,0
008B DFCD RCALL _delay_nus
(0066) LCD_write_command(0x28); //4位显示
008C E208 LDI R16,0x28
008D D00E RCALL _LCD_write_command
(0067) LCD_write_command(0x0c); //显示开
008E E00C LDI R16,0xC
008F D00C RCALL _LCD_write_command
(0068) LCD_write_command(0x01); //清屏
0090 E001 LDI R16,1
0091 D00A RCALL _LCD_write_command
(0069) delay_nms(2);
0092 E002 LDI R16,2
0093 E010 LDI R17,0
0094 DFDD RCALL _delay_nms
0095 9508 RET
(0070) }
(0071)
(0072) void LCD_en_write(void) //液晶使能
(0073) {
(0074) LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
0096 9AC3 SBI 0x18,3
(0075) delay_nus(1);
0097 E001 LDI R16,1
0098 E010 LDI R17,0
0099 DFBF RCALL _delay_nus
(0076) LCD_EN_PORT&=~LCD_EN;
009A 98C3 CBI 0x18,3
009B 9508 RET
_LCD_write_command:
command --> R20
009C 940E0269 CALL push_gset1
009E 2F40 MOV R20,R16
(0077) }
(0078)
(0079) void LCD_write_command(unsigned char command) //写指令
(0080) {
(0081) delay_nus(16);
009F E100 LDI R16,0x10
00A0 E010 LDI R17,0
00A1 DFB7 RCALL _delay_nus
(0082) LCD_RS_PORT&=~LCD_RS; //RS=0
00A2 98C2 CBI 0x18,2
(0083) LCD_DATA_PORT&=0X0f; //清高四位
00A3 B388 IN R24,0x18
00A4 708F ANDI R24,0xF
00A5 BB88 OUT 0x18,R24
(0084) LCD_DATA_PORT|=command&0xf0; //写高四位
00A6 2F84 MOV R24,R20
00A7 7F80 ANDI R24,0xF0
00A8 B228 IN R2,0x18
00A9 2A28 OR R2,R24
00AA BA28 OUT 0x18,R2
(0085) LCD_en_write();
00AB DFEA RCALL _LCD_en_write
(0086) command=command<<4; //低四位移到高四位
00AC 2F84 MOV R24,R20
00AD 708F ANDI R24,0xF
00AE 9582 SWAP R24
00AF 2F48 MOV R20,R24
(0087) LCD_DATA_PORT&=0x0f; //清高四位
00B0 B388 IN R24,0x18
00B1 708F ANDI R24,0xF
00B2 BB88 OUT 0x18,R24
(0088) LCD_DATA_PORT|=command&0xf0; //写低四位
00B3 2F84 MOV R24,R20
00B4 7F80 ANDI R24,0xF0
00B5 B228 IN R2,0x18
00B6 2A28 OR R2,R24
00B7 BA28 OUT 0x18,R2
(0089) LCD_en_write();
00B8 DFDD RCALL _LCD_en_write
00B9 940E026C CALL pop_gset1
00BB 9508 RET
_LCD_write_data:
data --> R20
00BC 940E0269 CALL push_gset1
00BE 2F40 MOV R20,R16
(0090)
(0091) }
(0092)
(0093) void LCD_write_data(unsigned char data) //写数据
(0094) {
(0095) delay_nus(16);
00BF E100 LDI R16,0x10
00C0 E010 LDI R17,0
00C1 DF97 RCALL _delay_nus
(0096) LCD_RS_PORT|=LCD_RS; //RS=1
00C2 9AC2 SBI 0x18,2
(0097) LCD_DATA_PORT&=0X0f; //清高四位
00C3 B388 IN R24,0x18
00C4 708F ANDI R24,0xF
00C5 BB88 OUT 0x18,R24
(0098) LCD_DATA_PORT|=data&0xf0; //写高四位
00C6 2F84 MOV R24,R20
00C7 7F80 ANDI R24,0xF0
00C8 B228 IN R2,0x18
00C9 2A28 OR R2,R24
00CA BA28 OUT 0x18,R2
(0099) LCD_en_write();
00CB DFCA RCALL _LCD_en_write
(0100) data=data<<4; //低四位移到高四位
00CC 2F84 MOV R24,R20
00CD 708F ANDI R24,0xF
00CE 9582 SWAP R24
00CF 2F48 MOV R20,R24
(0101) LCD_DATA_PORT&=0X0f; //清高四位
00D0 B388 IN R24,0x18
00D1 708F ANDI R24,0xF
00D2 BB88 OUT 0x18,R24
(0102) LCD_DATA_PORT|=data&0xf0; //写低四位
00D3 2F84 MOV R24,R20
00D4 7F80 ANDI R24,0xF0
00D5 B228 IN R2,0x18
00D6 2A28 OR R2,R24
00D7 BA28 OUT 0x18,R2
(0103) LCD_en_write();
00D8 DFBD RCALL _LCD_en_write
00D9 940E026C CALL pop_gset1
00DB 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -