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

📄 adclcd.lst

📁 AVR M16单片机AD转换测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0041)   }
(0042)   void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0043)   {
(0044)     unsigned char address;
(0045)     if (y == 0) address = 0x80 + x;
    00D4 2344      TST	R20
    00D5 F419      BNE	0x00D9
    00D6 2F46      MOV	R20,R22
    00D7 5840      SUBI	R20,0x80
    00D8 C002      RJMP	0x00DB
(0046)     else 
(0047)        address = 0xc0 + x;
    00D9 2F46      MOV	R20,R22
    00DA 5440      SUBI	R20,0x40
(0048)     LCD_write_char( address, 0 );
    00DB 2722      CLR	R18
    00DC 2733      CLR	R19
    00DD 2F04      MOV	R16,R20
    00DE 2711      CLR	R17
    00DF D009      RCALL	_LCD_write_char
    00E0 940E0333  CALL	pop_gset2
    00E2 9508      RET
(0049)   }
(0050) void LCD_en_write(void)  //液晶使能
(0051) {
(0052)   LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
    00E3 9AAF      SBI	0x15,7
(0053)   delay_nus(1);
    00E4 E001      LDI	R16,1
    00E5 E010      LDI	R17,0
    00E6 D056      RCALL	_delay_nus
(0054)   LCD_EN_PORT&=~LCD_EN;
    00E7 98AF      CBI	0x15,7
    00E8 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
    00E9 940E033E  CALL	push_gset4
    00EB 0169      MOVW	R12,R18
    00EC 0158      MOVW	R10,R16
(0055) }
(0056) void LCD_write_char(unsigned command,unsigned data) // 写数据
(0057) {
(0058)  unsigned command_temp,data_temp;
(0059)  command_temp=command;
    00ED 01A5      MOVW	R20,R10
(0060)  data_temp=data;
    00EE 01B6      MOVW	R22,R12
(0061)  delay_nus(16);
    00EF E100      LDI	R16,0x10
    00F0 E010      LDI	R17,0
    00F1 D04B      RCALL	_delay_nus
(0062)  if(command==0)
    00F2 3040      CPI	R20,0
    00F3 0745      CPC	R20,R21
    00F4 F511      BNE	0x0117
(0063)  {
(0064)   LCD_RS_PORT|=LCD_RS;  //RS=1
    00F5 9AAE      SBI	0x15,6
(0065)   LCD_DATA_PORT&=0X0f;
    00F6 B388      IN	R24,0x18
    00F7 708F      ANDI	R24,0xF
    00F8 BB88      OUT	0x18,R24
(0066)   LCD_DATA_PORT|=data_temp&0xf0;  //写高四位
    00F9 01CB      MOVW	R24,R22
    00FA 7F80      ANDI	R24,0xF0
    00FB 7090      ANDI	R25,0
    00FC B228      IN	R2,0x18
    00FD 2433      CLR	R3
    00FE 2A28      OR	R2,R24
    00FF 2A39      OR	R3,R25
    0100 BA28      OUT	0x18,R2
(0067)   LCD_en_write();
    0101 DFE1      RCALL	_LCD_en_write
(0068)   data_temp=data_temp<<4;  
    0102 0F66      LSL	R22
    0103 1F77      ROL	R23
    0104 0F66      LSL	R22
    0105 1F77      ROL	R23
    0106 0F66      LSL	R22
    0107 1F77      ROL	R23
    0108 0F66      LSL	R22
    0109 1F77      ROL	R23
(0069)   LCD_DATA_PORT&=0X0f;
    010A B388      IN	R24,0x18
    010B 708F      ANDI	R24,0xF
    010C BB88      OUT	0x18,R24
(0070)   LCD_DATA_PORT|=data_temp&0xf0;   //写低四位
    010D 01CB      MOVW	R24,R22
    010E 7F80      ANDI	R24,0xF0
    010F 7090      ANDI	R25,0
    0110 B228      IN	R2,0x18
    0111 2433      CLR	R3
    0112 2A28      OR	R2,R24
    0113 2A39      OR	R3,R25
    0114 BA28      OUT	0x18,R2
(0071)   LCD_en_write();
    0115 DFCD      RCALL	_LCD_en_write
(0072)  }
    0116 C021      RJMP	0x0138
(0073)  else
(0074)  {
(0075)   LCD_RS_PORT&=~LCD_RS;   //RS=0
    0117 98AE      CBI	0x15,6
(0076)   LCD_DATA_PORT&=0X0f;
    0118 B388      IN	R24,0x18
    0119 708F      ANDI	R24,0xF
    011A BB88      OUT	0x18,R24
(0077)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
    011B 01CA      MOVW	R24,R20
    011C 7F80      ANDI	R24,0xF0
    011D 7090      ANDI	R25,0
    011E B228      IN	R2,0x18
    011F 2433      CLR	R3
    0120 2A28      OR	R2,R24
    0121 2A39      OR	R3,R25
    0122 BA28      OUT	0x18,R2
(0078)   LCD_en_write();
    0123 DFBF      RCALL	_LCD_en_write
(0079)   command_temp=command_temp<<4;
    0124 0F44      LSL	R20
    0125 1F55      ROL	R21
    0126 0F44      LSL	R20
    0127 1F55      ROL	R21
    0128 0F44      LSL	R20
    0129 1F55      ROL	R21
    012A 0F44      LSL	R20
    012B 1F55      ROL	R21
(0080)   LCD_DATA_PORT&=0x0f;
    012C B388      IN	R24,0x18
    012D 708F      ANDI	R24,0xF
    012E BB88      OUT	0x18,R24
(0081)   LCD_DATA_PORT|=command_temp&0xf0;  //写低四位
    012F 01CA      MOVW	R24,R20
    0130 7F80      ANDI	R24,0xF0
    0131 7090      ANDI	R25,0
    0132 B228      IN	R2,0x18
    0133 2433      CLR	R3
    0134 2A28      OR	R2,R24
    0135 2A39      OR	R3,R25
    0136 BA28      OUT	0x18,R2
(0082)   LCD_en_write();
    0137 DFAB      RCALL	_LCD_en_write
(0083)   }
    0138 940E0339  CALL	pop_gset4
    013A 9508      RET
(0084) }
(0085) /*void main(void)
(0086) {
(0087)      DDRA|=LCD_DATA;   // 数据为输出
(0088) 	 DDRC|=LCD_RS|LCD_EN;  //置位RS.EN
(0089)      LCD_init();
(0090)      for(;;)    //for循环
(0091)        {
(0092) 	     LCD_write_char(0x01,0);
(0093) 		 delay_nms(2);
(0094)          LCD_write_string(0,0,"Wellcome");
(0095)          LCD_write_string(0,1,"www.OURAVR.com!");
(0096)          delay_nms(5000);
(0097)          LCD_write_string(0,0,"happy new year!");
(0098)          LCD_write_string(0,1,"amork:everfriend");
(0099)          delay_nms(5000);
(0100)        }
(0101) }*/
(0102)    /*-----------------------------------------------------------------------
(0103) 延时函数
(0104) 系统时钟:8M
(0105) -----------------------------------------------------------------------*/
(0106) void delay_1us(void)                 //1us延时函数
(0107)   {
(0108)    asm("nop");
_delay_1us:
    013B 0000      NOP
    013C 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    013D 940E0342  CALL	push_gset2
    013F 01B8      MOVW	R22,R16
(0109)   }
(0110) 
(0111) void delay_nus(unsigned int n)       //N us延时函数
(0112)   {
(0113)    unsigned int i=0;
    0140 2744      CLR	R20
    0141 2755      CLR	R21
(0114)    for (i=0;i<n;i++)
    0142 C003      RJMP	0x0146
(0115)    delay_1us();
    0143 DFF7      RCALL	_delay_1us
    0144 5F4F      SUBI	R20,0xFF
    0145 4F5F      SBCI	R21,0xFF
    0146 1746      CP	R20,R22
    0147 0757      CPC	R21,R23
    0148 F3D0      BCS	0x0143
    0149 940E0333  CALL	pop_gset2
    014B 9508      RET
(0116)   }
(0117)   
(0118) void delay_1ms(void)                 //1ms延时函数
(0119)   {
(0120)    unsigned int i;
(0121)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    014C 2700      CLR	R16
    014D 2711      CLR	R17
    014E C002      RJMP	0x0151
    014F 5F0F      SUBI	R16,0xFF
    0150 4F1F      SBCI	R17,0xFF
    0151 3704      CPI	R16,0x74
    0152 E0E4      LDI	R30,4
    0153 071E      CPC	R17,R30
    0154 F3D0      BCS	0x014F
    0155 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0156 940E0342  CALL	push_gset2
    0158 01B8      MOVW	R22,R16
(0122)   }
(0123)   
(0124) void delay_nms(unsigned int n)       //N ms延时函数
(0125)   {
(0126)    unsigned int i=0;
    0159 2744      CLR	R20
    015A 2755      CLR	R21
(0127)    for (i=0;i<n;i++)
    015B C003      RJMP	0x015F
(0128)    delay_1ms();
    015C DFEF      RCALL	_delay_1ms
    015D 5F4F      SUBI	R20,0xFF
    015E 4F5F      SBCI	R21,0xFF
    015F 1746      CP	R20,R22
    0160 0757      CPC	R21,R23
    0161 F3D0      BCS	0x015C
    0162 940E0333  CALL	pop_gset2
    0164 9508      RET
FILE: G:\AVRsource\adc\ADC.c
(0001) /*******************************************/
(0002) /*            广州天河双龙电子公司         */
(0003) /*            http://www.sl.com.cn         */
(0004) /*            多通道AD转换演示程序         */
(0005) /*            作者:ntzwq@wx88.net 

⌨️ 快捷键说明

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