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

📄 test.lst

📁 max144源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
      3B E5CF      LDI	R28,0x5F
      3C E0D4      LDI	R29,4
      3D BFCD      OUT	0x3D,R28
      3E BFDE      OUT	0x3E,R29
      3F 51C0      SUBI	R28,0x10
      40 40D0      SBCI	R29,0
      41 EA0A      LDI	R16,0xAA
      42 8308      STD	Y+0,R16
      43 2400      CLR	R0
      44 E8E2      LDI	R30,0x82
      45 E0F0      LDI	R31,0
      46 E010      LDI	R17,0
      47 3CE6      CPI	R30,0xC6
      48 07F1      CPC	R31,R17
      49 F011      BEQ	0x004C
      4A 9201      ST	R0,Z+
      4B CFFB      RJMP	0x0047
      4C 8300      STD	Z+0,R16
      4D E5E4      LDI	R30,0x54
      4E E0F0      LDI	R31,0
      4F E6A0      LDI	R26,0x60
      50 E0B0      LDI	R27,0
      51 E010      LDI	R17,0
      52 E000      LDI	R16,0
      53 BF0B      OUT	0x3B,R16
      54 37E6      CPI	R30,0x76
      55 07F1      CPC	R31,R17
      56 F021      BEQ	0x005B
      57 95C8      LPM
      58 9631      ADIW	R30,1
      59 920D      ST	R0,X+
      5A CFF9      RJMP	0x0054
      5B 940E 0296 CALL	_main
_exit:
      5D CFFF      RJMP	_exit
FILE: D:\iccavr\mega16\11\max144\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_us(void)
(0006) {
(0007)  asm("nop");
_delay_us:
      5E 0000      NOP
      5F 9508      RET
_delay_nus:
  t                    --> R20
      60 934A      ST	R20,-Y
      61 935A      ST	R21,-Y
      62 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_nus(unsigned int t)
(0014) {
      63 C001      RJMP	0x0065
(0015)  while(t--)
(0016)   delay_us();
      64 DFF9      RCALL	_delay_us
      65 011A      MOVW	R2,R20
      66 5041      SUBI	R20,1
      67 4050      SBCI	R21,0
      68 2022      TST	R2
      69 F7D1      BNE	0x0064
      6A 2033      TST	R3
      6B F7C1      BNE	0x0064
      6C 9159      LD	R21,Y+
      6D 9149      LD	R20,Y+
      6E 9508      RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms	   :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_ms(void)
(0022) {
(0023)  unsigned int i;
(0024)  for(i=0;i<1140;i++);
_delay_ms:
  i                    --> R16
      6F 2700      CLR	R16
      70 2711      CLR	R17
      71 C002      RJMP	0x0074
      72 5F0F      SUBI	R16,0xFF
      73 4F1F      SBCI	R17,0xFF
      74 3704      CPI	R16,0x74
      75 E0E4      LDI	R30,4
      76 071E      CPC	R17,R30
      77 F3D0      BCS	0x0072
      78 9508      RET
_delay_nms:
  t                    --> R20
      79 934A      ST	R20,-Y
      7A 935A      ST	R21,-Y
      7B 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_nms(unsigned int t)
(0031) {
      7C C001      RJMP	0x007E
(0032)  while(t--)
(0033)   delay_ms();
      7D DFF1      RCALL	_delay_ms
      7E 011A      MOVW	R2,R20
      7F 5041      SUBI	R20,1
      80 4050      SBCI	R21,0
      81 2022      TST	R2
      82 F7D1      BNE	0x007D
      83 2033      TST	R3
      84 F7C1      BNE	0x007D
      85 9159      LD	R21,Y+
      86 9149      LD	R20,Y+
      87 9508      RET
FILE: D:\iccavr\mega16\11\max144\lcd1602.h
(0001) /*-------------------------------------------
(0002)    RS----------PC2
(0003)    RW----------GND
(0004)    EN----------PC3
(0005)    D4-D7-------PC4-PC7
(0006) ---------------------------------------------*/
(0007) //定义MCU与LCD的接口 
(0008) #define LCD_EN_PORT   PORTC
(0009) #define LCD_EN_DDR    DDRC
(0010) #define LCD_RS_PORT   PORTC
(0011) #define LCD_RS_DDR    DDRC
(0012) #define LCD_DATA_PORT PORTC
(0013) #define LCD_DATA_DDR  DDRC
(0014) #define LCD_DATA_PIN  PINC
(0015) #define LCD_EN        0x08   //portc3 out
(0016) #define LCD_RS        0x04   //portc2 out
(0017) #define LCD_DATA      0xf0 //portc4/5/6/7 out
(0018) 
(0019) /*----------------------------------------------------------
(0020) Public function prototypes
(0021) ----------------------------------------------------------*/
(0022) void LCD_init (void);
(0023) void LCD_en_write (void);
(0024) void clear(void);
(0025) void LCD_write_char(unsigned command,unsigned data);
(0026) void LCD_set_xy(unsigned char x, unsigned char y);
(0027) 
(0028) /*------------------------------------------------------------
(0029) 函数: lcd1602口线初始化和液晶初始化
(0030) -------------------------------------------------------------*/
(0031) void LCD_init(void) //液晶初始化
(0032) {
(0033)  LCD_DATA_DDR|=LCD_DATA;
_LCD_init:
      88 B384      IN	R24,0x14
      89 6F80      ORI	R24,0xF0
      8A BB84      OUT	0x14,R24
(0034)  LCD_EN_DDR|=LCD_EN;
      8B 9AA3      SBI	0x14,3
(0035)  LCD_RS_DDR|=LCD_RS;
      8C 9AA2      SBI	0x14,2
(0036)  delay_nms(15);
      8D E00F      LDI	R16,0xF
      8E E010      LDI	R17,0
      8F DFE9      RCALL	_delay_nms
(0037)  LCD_write_char(0x28,0); //4位显示
      90 2722      CLR	R18
      91 2733      CLR	R19
      92 E208      LDI	R16,0x28
      93 E010      LDI	R17,0
      94 D02A      RCALL	_LCD_write_char
(0038)  delay_nms(15);
      95 E00F      LDI	R16,0xF
      96 E010      LDI	R17,0
      97 DFE1      RCALL	_delay_nms
(0039)  LCD_write_char(0x0c,0); //显示开
      98 2722      CLR	R18
      99 2733      CLR	R19
      9A E00C      LDI	R16,0xC
      9B E010      LDI	R17,0
      9C D022      RCALL	_LCD_write_char
(0040)  delay_nms(15);
      9D E00F      LDI	R16,0xF
      9E E010      LDI	R17,0
      9F DFD9      RCALL	_delay_nms
(0041)  LCD_write_char(0x01,0); //清屏
      A0 2722      CLR	R18
      A1 2733      CLR	R19
      A2 E001      LDI	R16,1
      A3 E010      LDI	R17,0
      A4 D01A      RCALL	_LCD_write_char
(0042)  clear();
      A5 D06A      RCALL	_clear
      A6 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
      A7 940E 0375 CALL	push_xgsetF00C
      A9 2EA2      MOV	R10,R18
      AA 2F60      MOV	R22,R16
(0043) }
(0044) 
(0045) /*------------------------------------------------------------
(0046) 函数: 设置显示地址
(0047) para: x---the display address of a line limit: 0---15
(0048)       y---the display line limit 0 or 1 
(0049) --------------------------------------------------------------*/
(0050) void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
(0051) {
(0052)   unsigned char address;
(0053)   if(y ==0) 
      AB 20AA      TST	R10
      AC F419      BNE	0x00B0
(0054)    address=0x80+x; //the first line
      AD 2F46      MOV	R20,R22
      AE 5840      SUBI	R20,0x80
      AF C002      RJMP	0x00B2
(0055)   else 
(0056)    address=0xc0+x; //the second line
      B0 2F46      MOV	R20,R22
      B1 5440      SUBI	R20,0x40
(0057)   LCD_write_char(address,0);
      B2 2722      CLR	R18
      B3 2733      CLR	R19
      B4 2F04      MOV	R16,R20
      B5 2711      CLR	R17
      B6 D008      RCALL	_LCD_write_char
      B7 940C 037C JMP	pop_xgsetF00C
(0058) }
(0059) /*-------------------------------------------------------------
(0060) 函数: lcd1602使能
(0061) *--------------------------------------------------------------*/
(0062) void LCD_en_write(void) //液晶使能
(0063) { 
(0064)  LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
      B9 9AAB      SBI	0x15,3
(0065)  delay_nus(5);
      BA E005      LDI	R16,5
      BB E010      LDI	R17,0
      BC DFA3      RCALL	_delay_nus
(0066)  LCD_EN_PORT&=~LCD_EN;
      BD 98AB      CBI	0x15,3
      BE 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
      BF 940E 0391 CALL	push_xgsetF03C
      C1 0169      MOVW	R12,R18
      C2 0158      MOVW	R10,R16
(0067) }
(0068) /*------------------------------------------------------------
(0069) 函数: 写命令或数据到lcd1602
(0070) 参数:command: 0---写数据, 1---写命令
(0071)       data: 所要写的命令或数据
(0072) *-------------------------------------------------------------*/
(0073) void LCD_write_char(unsigned command,unsigned data) 
(0074) {
(0075)  unsigned command_temp,data_temp;
(0076)  command_temp=command;
      C3 01A5      MOVW	R20,R10
(0077)  data_temp=data;
      C4 01B6      MOVW	R22,R12
(0078)  delay_nus(25);
      C5 E109      LDI	R16,0x19
      C6 E010      LDI	R17,0
      C7 DF98      RCALL	_delay_nus
(0079)  if(command==0)
      C8 3040      CPI	R20,0
      C9 0745      CPC	R20,R21
      CA F511      BNE	0x00ED
(0080)  {
(0081)   LCD_RS_PORT|=LCD_RS; //RS=1
      CB 9AAA      SBI	0x15,2
(0082)   LCD_DATA_PORT&=0X0f;
      CC B385      IN	R24,0x15
      CD 708F      ANDI	R24,0xF
      CE BB85      OUT	0x15,R24
(0083)   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
      CF 01CB      MOVW	R24,R22
      D0 7F80      ANDI	R24,0xF0
      D1 7090      ANDI	R25,0
      D2 B225      IN	R2,0x15
      D3 2433      CLR	R3
      D4 2A28      OR	R2,R24
      D5 2A39      OR	R3,R25
      D6 BA25      OUT	0x15,R2
(0084)   LCD_en_write();
      D7 DFE1      RCALL	_LCD_en_write
(0085)   data_temp=data_temp<<4; 
      D8 0F66      LSL	R22
      D9 1F77      ROL	R23
      DA 0F66      LSL	R22
      DB 1F77      ROL	R23
      DC 0F66      LSL	R22
      DD 1F77      ROL	R23
      DE 0F66      LSL	R22
      DF 1F77      ROL	R23
(0086)   LCD_DATA_PORT&=0X0f;
      E0 B385      IN	R24,0x15
      E1 708F      ANDI	R24,0xF
      E2 BB85      OUT	0x15,R24
(0087)   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
      E3 01CB      MOVW	R24,R22
      E4 7F80      ANDI	R24,0xF0
      E5 7090      ANDI	R25,0
      E6 B225      IN	R2,0x15
      E7 2433      CLR	R3
      E8 2A28      OR	R2,R24
      E9 2A39      OR	R3,R25
      EA BA25      OUT	0x15,R2
(0088)   LCD_en_write();
      EB DFCD      RCALL	_LCD_en_write
(0089)  }
      EC C021      RJMP	0x010E
(0090)  else
(0091)  {
(0092)   LCD_RS_PORT&=~LCD_RS; //RS=0
      ED 98AA      CBI	0x15,2
(0093)   LCD_DATA_PORT&=0X0f;
      EE B385      IN	R24,0x15
      EF 708F      ANDI	R24,0xF
      F0 BB85      OUT	0x15,R24
(0094)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
      F1 01CA      MOVW	R24,R20
      F2 7F80      ANDI	R24,0xF0
      F3 7090      ANDI	R25,0
      F4 B225      IN	R2,0x15
      F5 2433      CLR	R3
      F6 2A28      OR	R2,R24
      F7 2A39      OR	R3,R25
      F8 BA25      OUT	0x15,R2
(0095)   LCD_en_write();
      F9 DFBF      RCALL	_LCD_en_write
(0096)   command_temp=command_temp<<4;
      FA 0F44      LSL	R20
      FB 1F55      ROL	R21
      FC 0F44      LSL	R20
      FD 1F55      ROL	R21
      FE 0F44      LSL	R20
      FF 1F55      ROL	R21
     100 0F44      LSL	R20
     101 1F55      ROL	R21
(0097)   LCD_DATA_PORT&=0x0f;
     102 B385      IN	R24,0x15
     103 708F      ANDI	R24,0xF
     104 BB85      OUT	0x15,R24
(0098)   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
     105 01CA      MOVW	R24,R20
     106 7F80      ANDI	R24,0xF0
     107 7090      ANDI	R25,0
     108 B225      IN	R2,0x15
     109 2433      CLR	R3
     10A 2A28      OR	R2,R24
     10B 2A39      OR	R3,R25
     10C BA25      OUT	0x15,R2
(0099)   LCD_en_write();
     10D DFAB      RCALL	_LCD_en_write
(0100)  }
     10E 940C 039A JMP	pop_xgsetF03C
_clear:
  i                    --> R20
     110 934A      ST	R20,-Y
(0101) }
(0102) /*-------------------------------------------------------------
(0103) 函数: 清屏lcd1602
(0104) ---------------------------------------------------------------*/
(0105) void clear(void)
(0106) {
(0107)  unsigned char i;
(0108)  LCD_set_xy(0,0);
     111 2722      CLR	R18
     112 2700      CLR	R16
     113 DF93      RCALL	_LCD_set_xy
(0109)  for(i=0;i<16;i++)
     114 2744      CLR	R20
     115 C006      RJMP	0x011C
(0110)  LCD_write_char(0,' ');
     116 E220      LDI	R18,0x20
     117 E030      LDI	R19,0
     118 2700      CLR	R16
     119 2711      CLR	R17
     11A DFA4      RCALL	_LCD_write_char
     11B 9543      INC	R20
     11C 3140      CPI	R20,0x10
     11D F3C0      BCS	0x0116
(0111)  LCD_set_xy(0,1);
     11E E021      LDI	R18,1
     11F 2700      CLR	R16
     120 DF86      RCALL	_LCD_set_xy
(0112)  for(i=0;i<16;i++)
     121 2744      CLR	R20
     122 C006      RJMP	0x0129
(0113)  LCD_write_char(0,' ');
     123 E220      LDI	R18,0x20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -