⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsdfds.lst

📁 Proteus与AVR应用实例,对初学者很有帮助。
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -