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

📄 adc.lst

📁 较新的adc+lcd1602代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      46 E5CF      LDI	R28,0x5F
      47 E0D4      LDI	R29,4
      48 BFCD      OUT	0x3D,R28
      49 BFDE      OUT	0x3E,R29
      4A 51CE      SUBI	R28,0x1E
      4B 40D0      SBCI	R29,0
      4C EA0A      LDI	R16,0xAA
      4D 8308      STD	Y+0,R16
      4E 2400      CLR	R0
      4F E9E3      LDI	R30,0x93
      50 E0F0      LDI	R31,0
      51 E010      LDI	R17,0
      52 39E3      CPI	R30,0x93
      53 07F1      CPC	R31,R17
      54 F011      BEQ	0x0057
      55 9201      ST	R0,Z+
      56 CFFB      RJMP	0x0052
      57 8300      STD	Z+0,R16
      58 E5E8      LDI	R30,0x58
      59 E0F0      LDI	R31,0
      5A E6A0      LDI	R26,0x60
      5B E0B0      LDI	R27,0
      5C E010      LDI	R17,0
      5D E000      LDI	R16,0
      5E BF0B      OUT	0x3B,R16
      5F 38EB      CPI	R30,0x8B
      60 07F1      CPC	R31,R17
      61 F021      BEQ	0x0066
      62 95C8      LPM
      63 9631      ADIW	R30,1
      64 920D      ST	R0,X+
      65 CFF9      RJMP	0x005F
      66 940E 023C CALL	_main
_exit:
      68 CFFF      RJMP	_exit
FILE: D:\iccavr\mega16\11\10bit_adc\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_us(void)
(0006) {
(0007)  asm("nop");
_delay_us:
      69 0000      NOP
      6A 9508      RET
_delay_nus:
  t                    --> R20
      6B 934A      ST	R20,-Y
      6C 935A      ST	R21,-Y
      6D 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_nus(unsigned int t)
(0014) {
      6E C001      RJMP	0x0070
(0015)  while(t--)
(0016)   delay_us();
      6F DFF9      RCALL	_delay_us
      70 011A      MOVW	R2,R20
      71 5041      SUBI	R20,1
      72 4050      SBCI	R21,0
      73 2022      TST	R2
      74 F7D1      BNE	0x006F
      75 2033      TST	R3
      76 F7C1      BNE	0x006F
      77 9159      LD	R21,Y+
      78 9149      LD	R20,Y+
      79 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
      7A 2700      CLR	R16
      7B 2711      CLR	R17
      7C C002      RJMP	0x007F
      7D 5F0F      SUBI	R16,0xFF
      7E 4F1F      SBCI	R17,0xFF
      7F 3704      CPI	R16,0x74
      80 E0E4      LDI	R30,4
      81 071E      CPC	R17,R30
      82 F3D0      BCS	0x007D
      83 9508      RET
_delay_nms:
  t                    --> R20
      84 934A      ST	R20,-Y
      85 935A      ST	R21,-Y
      86 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_nms(unsigned int t)
(0031) {
      87 C001      RJMP	0x0089
(0032)  while(t--)
(0033)   delay_ms();
      88 DFF1      RCALL	_delay_ms
      89 011A      MOVW	R2,R20
      8A 5041      SUBI	R20,1
      8B 4050      SBCI	R21,0
      8C 2022      TST	R2
      8D F7D1      BNE	0x0088
      8E 2033      TST	R3
      8F F7C1      BNE	0x0088
      90 9159      LD	R21,Y+
      91 9149      LD	R20,Y+
      92 9508      RET
FILE: D:\iccavr\mega16\11\10bit_adc\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) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0028) void LCD_write_data(unsigned char X,unsigned char Y,int dat);
(0029) 
(0030) /*------------------------------------------------------------
(0031) 函数: lcd1602口线初始化和液晶初始化
(0032) -------------------------------------------------------------*/
(0033) void LCD_init(void) //液晶初始化
(0034) {
(0035)  LCD_DATA_DDR|=LCD_DATA;
_LCD_init:
      93 B384      IN	R24,0x14
      94 6F80      ORI	R24,0xF0
      95 BB84      OUT	0x14,R24
(0036)  LCD_EN_DDR|=LCD_EN;
      96 9AA3      SBI	0x14,3
(0037)  LCD_RS_DDR|=LCD_RS;
      97 9AA2      SBI	0x14,2
(0038)  delay_nms(15);
      98 E00F      LDI	R16,0xF
      99 E010      LDI	R17,0
      9A DFE9      RCALL	_delay_nms
(0039)  LCD_write_char(0x28,0); //4位显示
      9B 2722      CLR	R18
      9C 2733      CLR	R19
      9D E208      LDI	R16,0x28
      9E E010      LDI	R17,0
      9F D02A      RCALL	_LCD_write_char
(0040)  delay_nms(15);
      A0 E00F      LDI	R16,0xF
      A1 E010      LDI	R17,0
      A2 DFE1      RCALL	_delay_nms
(0041)  LCD_write_char(0x0c,0); //显示开
      A3 2722      CLR	R18
      A4 2733      CLR	R19
      A5 E00C      LDI	R16,0xC
      A6 E010      LDI	R17,0
      A7 D022      RCALL	_LCD_write_char
(0042)  delay_nms(15);
      A8 E00F      LDI	R16,0xF
      A9 E010      LDI	R17,0
      AA DFD9      RCALL	_delay_nms
(0043)  LCD_write_char(0x01,0); //清屏
      AB 2722      CLR	R18
      AC 2733      CLR	R19
      AD E001      LDI	R16,1
      AE E010      LDI	R17,0
      AF D01A      RCALL	_LCD_write_char
(0044)  clear();
      B0 D06A      RCALL	_clear
      B1 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
      B2 940E 02B8 CALL	push_xgsetF00C
      B4 2EA2      MOV	R10,R18
      B5 2F60      MOV	R22,R16
(0045) }
(0046) 
(0047) /*------------------------------------------------------------
(0048) 函数: 设置显示地址
(0049) para: x---the display address of a line limit: 0---15
(0050)       y---the display line limit 0 or 1 
(0051) --------------------------------------------------------------*/
(0052) void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
(0053) {
(0054)   unsigned char address;
(0055)   if(y ==0) 
      B6 20AA      TST	R10
      B7 F419      BNE	0x00BB
(0056)    address=0x80+x; //the first line
      B8 2F46      MOV	R20,R22
      B9 5840      SUBI	R20,0x80
      BA C002      RJMP	0x00BD
(0057)   else 
(0058)    address=0xc0+x; //the second line
      BB 2F46      MOV	R20,R22
      BC 5440      SUBI	R20,0x40
(0059)   LCD_write_char(address,0);
      BD 2722      CLR	R18
      BE 2733      CLR	R19
      BF 2F04      MOV	R16,R20
      C0 2711      CLR	R17
      C1 D008      RCALL	_LCD_write_char
      C2 940C 02BF JMP	pop_xgsetF00C
(0060) }
(0061) /*-------------------------------------------------------------
(0062) 函数: lcd1602使能
(0063) *--------------------------------------------------------------*/
(0064) void LCD_en_write(void) //液晶使能
(0065) { 
(0066)  LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
      C4 9AAB      SBI	0x15,3
(0067)  delay_nus(5);
      C5 E005      LDI	R16,5
      C6 E010      LDI	R17,0
      C7 DFA3      RCALL	_delay_nus
(0068)  LCD_EN_PORT&=~LCD_EN;
      C8 98AB      CBI	0x15,3
      C9 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
      CA 940E 02D4 CALL	push_xgsetF03C
      CC 0169      MOVW	R12,R18
      CD 0158      MOVW	R10,R16
(0069) }
(0070) /*------------------------------------------------------------
(0071) 函数: 写命令或数据到lcd1602
(0072) 参数:command: 0---写数据, 1---写命令
(0073)       data: 所要写的命令或数据
(0074) *-------------------------------------------------------------*/
(0075) void LCD_write_char(unsigned command,unsigned data) 
(0076) {
(0077)  unsigned command_temp,data_temp;
(0078)  command_temp=command;
      CE 01A5      MOVW	R20,R10
(0079)  data_temp=data;
      CF 01B6      MOVW	R22,R12
(0080)  delay_nus(25);
      D0 E109      LDI	R16,0x19
      D1 E010      LDI	R17,0
      D2 DF98      RCALL	_delay_nus
(0081)  if(command==0)
      D3 3040      CPI	R20,0
      D4 0745      CPC	R20,R21
      D5 F511      BNE	0x00F8
(0082)  {
(0083)   LCD_RS_PORT|=LCD_RS; //RS=1
      D6 9AAA      SBI	0x15,2
(0084)   LCD_DATA_PORT&=0X0f;
      D7 B385      IN	R24,0x15
      D8 708F      ANDI	R24,0xF
      D9 BB85      OUT	0x15,R24
(0085)   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
      DA 01CB      MOVW	R24,R22
      DB 7F80      ANDI	R24,0xF0
      DC 7090      ANDI	R25,0
      DD B225      IN	R2,0x15
      DE 2433      CLR	R3
      DF 2A28      OR	R2,R24
      E0 2A39      OR	R3,R25
      E1 BA25      OUT	0x15,R2
(0086)   LCD_en_write();
      E2 DFE1      RCALL	_LCD_en_write
(0087)   data_temp=data_temp<<4; 
      E3 0F66      LSL	R22
      E4 1F77      ROL	R23
      E5 0F66      LSL	R22
      E6 1F77      ROL	R23
      E7 0F66      LSL	R22
      E8 1F77      ROL	R23
      E9 0F66      LSL	R22
      EA 1F77      ROL	R23
(0088)   LCD_DATA_PORT&=0X0f;
      EB B385      IN	R24,0x15
      EC 708F      ANDI	R24,0xF
      ED BB85      OUT	0x15,R24
(0089)   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
      EE 01CB      MOVW	R24,R22
      EF 7F80      ANDI	R24,0xF0
      F0 7090      ANDI	R25,0
      F1 B225      IN	R2,0x15
      F2 2433      CLR	R3
      F3 2A28      OR	R2,R24
      F4 2A39      OR	R3,R25
      F5 BA25      OUT	0x15,R2
(0090)   LCD_en_write();
      F6 DFCD      RCALL	_LCD_en_write
(0091)  }
      F7 C021      RJMP	0x0119
(0092)  else
(0093)  {
(0094)   LCD_RS_PORT&=~LCD_RS; //RS=0
      F8 98AA      CBI	0x15,2
(0095)   LCD_DATA_PORT&=0X0f;
      F9 B385      IN	R24,0x15
      FA 708F      ANDI	R24,0xF
      FB BB85      OUT	0x15,R24
(0096)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
      FC 01CA      MOVW	R24,R20
      FD 7F80      ANDI	R24,0xF0
      FE 7090      ANDI	R25,0
      FF B225      IN	R2,0x15
     100 2433      CLR	R3
     101 2A28      OR	R2,R24
     102 2A39      OR	R3,R25
     103 BA25      OUT	0x15,R2
(0097)   LCD_en_write();
     104 DFBF      RCALL	_LCD_en_write
(0098)   command_temp=command_temp<<4;
     105 0F44      LSL	R20
     106 1F55      ROL	R21
     107 0F44      LSL	R20
     108 1F55      ROL	R21
     109 0F44      LSL	R20
     10A 1F55      ROL	R21
     10B 0F44      LSL	R20
     10C 1F55      ROL	R21
(0099)   LCD_DATA_PORT&=0x0f;
     10D B385      IN	R24,0x15
     10E 708F      ANDI	R24,0xF
     10F BB85      OUT	0x15,R24
(0100)   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
     110 01CA      MOVW	R24,R20
     111 7F80      ANDI	R24,0xF0
     112 7090      ANDI	R25,0
     113 B225      IN	R2,0x15
     114 2433      CLR	R3
     115 2A28      OR	R2,R24
     116 2A39      OR	R3,R25
     117 BA25      OUT	0x15,R2
(0101)   LCD_en_write();
     118 DFAB      RCALL	_LCD_en_write
(0102)  }
     119 940C 02DD JMP	pop_xgsetF03C
_clear:
  i                    --> R20
     11B 934A      ST	R20,-Y
(0103) }
(0104) /*-------------------------------------------------------------
(0105) 函数: 清屏lcd1602
(0106) ---------------------------------------------------------------*/
(0107) void clear(void)
(0108) {
(0109)  unsigned char i;
(0110)  LCD_set_xy(0,0);
     11C 2722      CLR	R18
     11D 2700      CLR	R16
     11E DF93      RCALL	_LCD_set_xy
(0111)  for(i=0;i<16;i++)
     11F 2744      CLR	R20
     120 C006      RJMP	0x0127
(0112)  LCD_write_char(0,' ');
     121 E220      LDI	R18,0x20
     122 E030      LDI	R19,0
     123 2700      CLR	R16
     124 2711      CLR	R17
     125 DFA4      RCALL	_LCD_write_char
     126 9543      INC	R20
     127 3140      CPI	R20,0x10
     128 F3C0      BCS	0x0121
(0113)  LCD_set_xy(0,1);
     129 E021      LDI	R18,1
     12A 2700      CLR	R16
     12B DF86      RCALL	_LCD_set_xy
(0114)  for(i=0;i<16;i++)
     12C 2744      CLR	R20
     12D C006      RJMP	0x0134
(0115)  LCD_write_char(0,' ');
     12E E220      LDI	R18,0x20
     12F E030      LDI	R19,0
     130 2700      CLR	R16
     131 2711      CLR	R17
     132 DF97      RCALL	_LCD_write_char
     133 9543      INC	R20
     134 3140      CPI	R20,0x10
     135 F3C0      BCS	0x012E
     136 9149      LD	R20,Y+
     137 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R12
  X                    --> R10
     138 940E 02C6 CALL	push_xgset303C
     13A 2EC2      MOV	R12,R18
     13B 2EA0      MOV	R10,R16
     13C 814E      LDD	R20,Y+6
     13D 815F      LDD	R21,Y+7
(0116) }
(0117) /*-------------------------------------------------------------
(0118) 函数: 写字符串
(0119) 参数:列---X=0~15,行---Y=0~1 写地址
(0120)       s为所要写的字符串
(0121) ---------------------------------------------------------------*/
(0122) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 
(0123) {
(0124)  LCD_set_xy(X,Y);   
     13E 2D2C      MOV	R18,R12
     13F 2D0A      MOV	R16,R10
     140 DF71      RCALL	_LCD_set_xy
     141 C008      RJMP	0x014A
(0125)  while(*s)  
(0126)  {
(0127)   LCD_write_char(0,*s);
     142 01FA      MOVW	R30,R20
     143 8120      LDD	R18,Z+0
     144 2733      CLR	R19
     145 2700      CLR	R16
     146 2711      CLR	R17
     147 DF82      RCALL	_LCD_write_char
(0128)   s++;
     148 5F4F      SUBI	R20,0xFF
     149 4F5F      SBCI	R21,0xFF
     14A 01FA      MOVW	R30,R20
     14B 8020      LDD	R2,Z+0
     14C 2022      TST	R2
     14D F7A1      BNE	0x0142
     14E 940C 02CD JMP	pop_xgset303C

⌨️ 快捷键说明

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