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

📄 display.lst

📁 PC通过串口控制LCD1602显示!MCU为AVR单片机!
💻 LST
📖 第 1 页 / 共 3 页
字号:
    021B 9508      RET
_writeByteDS18B20:
  temp                 --> R20
  i                    --> R22
  wb                   --> R10
    021C 940E0301  CALL	push_gset3
    021E 2EA0      MOV	R10,R16
(0088) }
(0089) 
(0090) 
(0091) /**********************************************************************
(0092) functionName: BYTE readByteDS18B20(void)
(0093) description :写DS18B20一个字节
(0094) **********************************************************************/
(0095) void writeByteDS18B20(BYTE wb)
(0096) {
(0097) 	unsigned char i;
(0098) 	unsigned char temp;
(0099) 	RLS_DS18B20;		//释放总线
    021F 988E      CBI	0x11,6
(0100) 	for(i=0;i<8;i++)
    0220 2766      CLR	R22
    0221 C01A      RJMP	0x023C
(0101) 	{
(0102) 		HLD_DS18B20;		//Maga16控制总线
    0222 9A8E      SBI	0x11,6
(0103) 		CLR_DS18B20;		//强制拉低
    0223 9896      CBI	0x12,6
(0104) 		delayUs(16);	 	//14.92us
    0224 E100      LDI	R16,0x10
    0225 940E0190  CALL	_delayUs
(0105) 		temp=wb>>i;
    0227 2D0A      MOV	R16,R10
    0228 2F16      MOV	R17,R22
    0229 940E031C  CALL	lsr8
    022B 2F40      MOV	R20,R16
(0106) 		temp&=0x01;
    022C 7041      ANDI	R20,1
(0107) 		if(temp)
    022D F011      BEQ	0x0230
(0108) 		RLS_DS18B20;		//释放总线
    022E 988E      CBI	0x11,6
    022F C001      RJMP	0x0231
(0109) 		else
(0110) 		CLR_DS18B20;		//强制拉低
    0230 9896      CBI	0x12,6
(0111) 		delayUs(16);	 	//14.92us
    0231 E100      LDI	R16,0x10
    0232 940E0190  CALL	_delayUs
(0112) 		delayUs(35);	 	//30.38us
    0234 E203      LDI	R16,0x23
    0235 940E0190  CALL	_delayUs
(0113) 		RLS_DS18B20;		//释放总线
    0237 988E      CBI	0x11,6
(0114) 		delayUs(1);	 		//2.71us(大于1us就行了)
    0238 E001      LDI	R16,1
    0239 940E0190  CALL	_delayUs
    023B 9563      INC	R22
    023C 3068      CPI	R22,0x8
    023D F320      BCS	0x0222
    023E 940E02F7  CALL	pop_gset3
    0240 9508      RET
_readTempDS18B20:
  x                    --> R20
  tempH                --> R20
  tempL                --> R22
    0241 940E0303  CALL	push_gset2
(0115) 	}
(0116) }
(0117) 
(0118) 
(0119) 
(0120) 
(0121) 
(0122) 
(0123) /**********************************************************************
(0124) functionName: unsigned int readTempDS18B20(void)
(0125) description :读DS18B20温度
(0126) **********************************************************************/
(0127) unsigned int readTempDS18B20(void)
(0128) {
(0129) 	unsigned char tempL,tempH;
(0130) 	unsigned int x;
(0131) 	resetDS18B20();
    0243 DF7C      RCALL	_resetDS18B20
(0132) 	writeByteDS18B20(0xcc); 	//跳过ROM
    0244 EC0C      LDI	R16,0xCC
    0245 DFD6      RCALL	_writeByteDS18B20
(0133) 	writeByteDS18B20(0x44);		//启动温度转换
    0246 E404      LDI	R16,0x44
    0247 DFD4      RCALL	_writeByteDS18B20
(0134) 	delayUs(2);
    0248 E002      LDI	R16,2
    0249 940E0190  CALL	_delayUs
(0135) 	resetDS18B20();
    024B DF74      RCALL	_resetDS18B20
(0136) 	writeByteDS18B20(0xcc);		//跳过ROM
    024C EC0C      LDI	R16,0xCC
    024D DFCE      RCALL	_writeByteDS18B20
(0137) 	writeByteDS18B20(0xbe);		//读数据
    024E EB0E      LDI	R16,0xBE
    024F DFCC      RCALL	_writeByteDS18B20
(0138) 	tempL=readByteDS18B20();
    0250 DF9E      RCALL	_readByteDS18B20
    0251 2F60      MOV	R22,R16
(0139) 	tempH=readByteDS18B20();
    0252 DF9C      RCALL	_readByteDS18B20
    0253 2F40      MOV	R20,R16
(0140) 	x=(tempH<<8)|tempL;
    0254 2F54      MOV	R21,R20
    0255 2F46      MOV	R20,R22
(0141) 	return(x);
    0256 018A      MOVW	R16,R20
    0257 940E02F4  CALL	pop_gset2
    0259 9508      RET
FILE: F:\我的设计\delphi\uartdispy\mcu\lcd.c
(0001) /*********************************Copyright (c)*********************************
(0002) **                              
(0003) ** 文   件   名: LCD.c
(0004) ** 最后修改日期: 2005年06月8日
(0005) ** 描        述: 1602液晶驱动函数
(0006) ** 版	     本: V1.0
(0007) ** 主  控  芯 片:M16  晶振频率:8 MHZ
(0008) *******************************************************************************/
(0009) #include <iom16v.h>
(0010) #include <macros.h>
(0011) #include "function.h"
(0012) #include "define.h"
(0013) #include "defineLCD.h"
(0014) /******************************************************************************
(0015) 
(0016) 
(0017)                                函数定义
(0018) 
(0019) ******************************************************************************/
(0020) 
(0021) void LCD_init(void)       //液晶初始化
(0022) {
(0023)  delay_nms(15);
_LCD_init:
    025A E00F      LDI	R16,0xF
    025B E010      LDI	R17,0
    025C 940E01B1  CALL	_delay_nms
(0024)  LCD_write_char(0x28,0);  //4位显示
    025E 2722      CLR	R18
    025F 2733      CLR	R19
    0260 E208      LDI	R16,0x28
    0261 E010      LDI	R17,0
    0262 D03E      RCALL	_LCD_write_char
(0025)  LCD_write_char(0x0c,0);  //显示开
    0263 2722      CLR	R18
    0264 2733      CLR	R19
    0265 E00C      LDI	R16,0xC
    0266 E010      LDI	R17,0
    0267 D039      RCALL	_LCD_write_char
(0026)  LCD_write_char(0x01,0);  //清屏
    0268 2722      CLR	R18
    0269 2733      CLR	R19
    026A E001      LDI	R16,1
    026B E010      LDI	R17,0
    026C D034      RCALL	_LCD_write_char
    026D 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    026E 940E0301  CALL	push_gset3
    0270 2EA2      MOV	R10,R18
    0271 2F60      MOV	R22,R16
    0272 814E      LDD	R20,Y+6
    0273 815F      LDD	R21,Y+7
(0027) }
(0028) 
(0029) 
(0030) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0031)   {
(0032)     LCD_set_xy( X, Y ); //写地址
    0274 2D2A      MOV	R18,R10
    0275 2F06      MOV	R16,R22
    0276 D010      RCALL	_LCD_set_xy
    0277 C008      RJMP	0x0280
(0033)     
(0034)     while (*s)  // 写显示字符
(0035)       {
(0036)         LCD_write_char( 0, *s );
    0278 01FA      MOVW	R30,R20
    0279 8120      LDD	R18,Z+0
    027A 2733      CLR	R19
    027B 2700      CLR	R16
    027C 2711      CLR	R17
    027D D023      RCALL	_LCD_write_char
(0037) 	s ++;
    027E 5F4F      SUBI	R20,0xFF
    027F 4F5F      SBCI	R21,0xFF
    0280 01FA      MOVW	R30,R20
    0281 8020      LDD	R2,Z+0
    0282 2022      TST	R2
    0283 F7A1      BNE	0x0278
    0284 940E02F7  CALL	pop_gset3
    0286 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R20
  x                    --> R22
    0287 940E0303  CALL	push_gset2
    0289 2F42      MOV	R20,R18
    028A 2F60      MOV	R22,R16
(0038)       }
(0039)   }
(0040)  
(0041) 
(0042) void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0043)   {
(0044)     unsigned char address;
(0045)     if (y == 0) address = 0x80 + x;
    028B 2344      TST	R20
    028C F419      BNE	0x0290
    028D 2F46      MOV	R20,R22
    028E 5840      SUBI	R20,0x80
    028F C002      RJMP	0x0292
(0046)     else 
(0047)        address = 0xc0 + x;
    0290 2F46      MOV	R20,R22
    0291 5440      SUBI	R20,0x40
(0048)     LCD_write_char( address, 0 );
    0292 2722      CLR	R18
    0293 2733      CLR	R19
    0294 2F04      MOV	R16,R20
    0295 2711      CLR	R17
    0296 D00A      RCALL	_LCD_write_char
    0297 940E02F4  CALL	pop_gset2
    0299 9508      RET
(0049)   }
(0050)   
(0051) void LCD_en_write(void)  //液晶使能
(0052)  {
(0053)   LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
    029A 9AAF      SBI	0x15,7
(0054)   delay_nus(1);
    029B E001      LDI	R16,1
    029C E010      LDI	R17,0
    029D 940E0198  CALL	_delay_nus
(0055)   LCD_EN_PORT&=~LCD_EN;
    029F 98AF      CBI	0x15,7
    02A0 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
    02A1 940E02FF  CALL	push_gset4
    02A3 0169      MOVW	R12,R18
    02A4 0158      MOVW	R10,R16
(0056)  }
(0057)  
(0058) void LCD_write_char(unsigned command,unsigned data) // 写数据
(0059) {
(0060)  unsigned command_temp,data_temp;
(0061)  command_temp=command;
    02A5 01A5      MOVW	R20,R10
(0062)  data_temp=data;
    02A6 01B6      MOVW	R22,R12
(0063)  delay_nus(16);
    02A7 E100      LDI	R16,0x10
    02A8 E010      LDI	R17,0
    02A9 940E0198  CALL	_delay_nus
(0064)  if(command==0)
    02AB 3040      CPI	R20,0
    02AC 0745      CPC	R20,R21
    02AD F511      BNE	0x02D0
(0065)  {
(0066)   LCD_RS_PORT|=LCD_RS;  //RS=1
    02AE 9AAE      SBI	0x15,6
(0067)   LCD_DATA_PORT&=0X0f;
    02AF B38B      IN	R24,0x1B
    02B0 708F      ANDI	R24,0xF
    02B1 BB8B      OUT	0x1B,R24
(0068)   LCD_DATA_PORT|=data_temp&0xf0;  //写高四位
    02B2 01CB      MOVW	R24,R22
    02B3 7F80      ANDI	R24,0xF0
    02B4 7090      ANDI	R25,0
    02B5 B22B      IN	R2,0x1B
    02B6 2433      CLR	R3
    02B7 2A28      OR	R2,R24
    02B8 2A39      OR	R3,R25
    02B9 BA2B      OUT	0x1B,R2
(0069)   LCD_en_write();
    02BA DFDF      RCALL	_LCD_en_write
(0070)   data_temp=data_temp<<4;  
    02BB 0F66      LSL	R22
    02BC 1F77      ROL	R23
    02BD 0F66      LSL	R22
    02BE 1F77      ROL	R23
    02BF 0F66      LSL	R22
    02C0 1F77      ROL	R23
    02C1 0F66      LSL	R22
    02C2 1F77      ROL	R23
(0071)   LCD_DATA_PORT&=0X0f;
    02C3 B38B      IN	R24,0x1B
    02C4 708F      ANDI	R24,0xF
    02C5 BB8B      OUT	0x1B,R24
(0072)   LCD_DATA_PORT|=data_temp&0xf0;   //写低四位
    02C6 01CB      MOVW	R24,R22
    02C7 7F80      ANDI	R24,0xF0
    02C8 7090      ANDI	R25,0
    02C9 B22B      IN	R2,0x1B
    02CA 2433      CLR	R3
    02CB 2A28      OR	R2,R24
    02CC 2A39      OR	R3,R25
    02CD BA2B      OUT	0x1B,R2
(0073)   LCD_en_write();
    02CE DFCB      RCALL	_LCD_en_write
(0074)  }
    02CF C021      RJMP	0x02F1
(0075)  else
(0076)  {
(0077)   LCD_RS_PORT&=~LCD_RS;   //RS=0
    02D0 98AE      CBI	0x15,6
(0078)   LCD_DATA_PORT&=0X0f;
    02D1 B38B      IN	R24,0x1B
    02D2 708F      ANDI	R24,0xF
    02D3 BB8B      OUT	0x1B,R24
(0079)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
    02D4 01CA      MOVW	R24,R20
    02D5 7F80      ANDI	R24,0xF0
    02D6 7090      ANDI	R25,0
    02D7 B22B      IN	R2,0x1B
    02D8 2433      CLR	R3
    02D9 2A28      OR	R2,R24
    02DA 2A39      OR	R3,R25
    02DB BA2B      OUT	0x1B,R2
(0080)   LCD_en_write();
    02DC DFBD      RCALL	_LCD_en_write
(0081)   command_temp=command_temp<<4;
    02DD 0F44      LSL	R20
    02DE 1F55      ROL	R21
    02DF 0F44      LSL	R20
    02E0 1F55      ROL	R21
    02E1 0F44      LSL	R20
    02E2 1F55      ROL	R21
    02E3 0F44      LSL	R20
    02E4 1F55      ROL	R21
(0082)   LCD_DATA_PORT&=0x0f;
    02E5 B38B      IN	R24,0x1B
    02E6 708F      ANDI	R24,0xF
    02E7 BB8B      OUT	0x1B,R24
(0083)   LCD_DATA_PORT|=command_temp&0xf0;  //写低四位
    02E8 01CA      MOVW	R24,R20
    02E9 7F80      ANDI	R24,0xF0
    02EA 7090      ANDI	R25,0
    02EB B22B      IN	R2,0x1B
    02EC 2433      CLR	R3
    02ED 2A28      OR	R2,R24
    02EE 2A39      OR	R3,R25
    02EF BA2B      OUT	0x1B,R2
(0084)   LCD_en_write();
    02F0 DFA9      RCALL	_LCD_en_write
(0085)   }
FILE: <library>
    02F1 940E02FA  CALL	pop_gset4
    02F3 9508      RET
pop_gset2:
    02F4 E0E2      LDI	R30,2
    02F5 940C0309  JMP	pop
pop_gset3:
    02F7 E0E4      LDI	R30,4
    02F8 940C0309  JMP	pop
pop_gset4:
    02FA E0E8      LDI	R30,0x8
    02FB 940C0309  JMP	pop
push_gset5:
    02FD 92FA      ST	R15,-Y
    02FE 92EA      ST	R14,-Y
push_gset4:
    02FF 92DA      ST	R13,-Y
    0300 92CA      ST	R12,-Y
push_gset3:
    0301 92BA      ST	R11,-Y
    0302 92AA      ST	R10,-Y
push_gset2:
    0303 937A      ST	R23,-Y
    0304 936A      ST	R22,-Y
push_gset1:
    0305 935A      ST	R21,-Y
    0306 934A      ST	R20,-Y
    0307 9508      RET
pop_gset1:
    0308 E0E1      LDI	R30,1
pop:
    0309 9149      LD	R20,Y+
    030A 9159      LD	R21,Y+
    030B FDE0      SBRC	R30,0
    030C 9508      RET
    030D 9169      LD	R22,Y+
    030E 9179      LD	R23,Y+
    030F FDE1      SBRC	R30,1
    0310 9508      RET
    0311 90A9      LD	R10,Y+
    0312 90B9      LD	R11,Y+
    0313 FDE2      SBRC	R30,2
    0314 9508      RET
    0315 90C9      LD	R12,Y+
    0316 90D9      LD	R13,Y+
    0317 FDE3      SBRC	R30,3
    0318 9508      RET
    0319 90E9      LD	R14,Y+
    031A 90F9      LD	R15,Y+
    031B 9508      RET
lsr8:
    031C 2311      TST	R17
    031D F019      BEQ	0x0321
    031E 9506      LSR	R16
    031F 951A      DEC	R17
    0320 CFFB      RJMP	lsr8
    0321 9508      RET

⌨️ 快捷键说明

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