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

📄 1302-162.lst

📁 有遥控的温度计,用dS1302做时钟芯片
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0394 D0D8      RCALL	_LCD_write_string
    0395 C027      RJMP	0x03BD
(0217) 			case 3:LCD_write_string(0,1,"wednesday");break;
    0396 E885      LDI	R24,0x85
    0397 E090      LDI	R25,0
    0398 8399      STD	Y+1,R25
    0399 8388      STD	Y+0,R24
    039A E021      LDI	R18,1
    039B 2700      CLR	R16
    039C D0D0      RCALL	_LCD_write_string
    039D C01F      RJMP	0x03BD
(0218) 			case 4:LCD_write_string(0,1,"thursday");break;
    039E E78C      LDI	R24,0x7C
    039F E090      LDI	R25,0
    03A0 8399      STD	Y+1,R25
    03A1 8388      STD	Y+0,R24
    03A2 E021      LDI	R18,1
    03A3 2700      CLR	R16
    03A4 D0C8      RCALL	_LCD_write_string
    03A5 C017      RJMP	0x03BD
(0219) 			case 5:LCD_write_string(0,1,"friday");break;
    03A6 E785      LDI	R24,0x75
    03A7 E090      LDI	R25,0
    03A8 8399      STD	Y+1,R25
    03A9 8388      STD	Y+0,R24
    03AA E021      LDI	R18,1
    03AB 2700      CLR	R16
    03AC D0C0      RCALL	_LCD_write_string
    03AD C00F      RJMP	0x03BD
(0220) 			case 6:LCD_write_string(0,1,"saturday");break;
    03AE E68C      LDI	R24,0x6C
    03AF E090      LDI	R25,0
    03B0 8399      STD	Y+1,R25
    03B1 8388      STD	Y+0,R24
    03B2 E021      LDI	R18,1
    03B3 2700      CLR	R16
    03B4 D0B8      RCALL	_LCD_write_string
    03B5 C007      RJMP	0x03BD
(0221) 			case 7:LCD_write_string(0,1,"sunday");break;
    03B6 E685      LDI	R24,0x65
    03B7 E090      LDI	R25,0
    03B8 8399      STD	Y+1,R25
    03B9 8388      STD	Y+0,R24
    03BA E021      LDI	R18,1
    03BB 2700      CLR	R16
    03BC D0B0      RCALL	_LCD_write_string
(0222) 			}
(0223)     //18b20 
(0224)      a=init_1820();               //复位18b20   
    03BD D0E5      RCALL	_init_1820
    03BE 870A      STD	Y+10,R16
(0225)       write_1820(0xCC);              // SKIP THE ROM
    03BF EC0C      LDI	R16,0xCC
    03C0 D0F6      RCALL	_write_1820
(0226)       write_1820(0x44);              //启动温度转换
    03C1 E404      LDI	R16,0x44
    03C2 D0F4      RCALL	_write_1820
(0227) 	  for(i=0;i<200;i++)           //每次转换需要延时200ms以上 
    03C3 2766      CLR	R22
    03C4 C003      RJMP	0x03C8
(0228)         delay(200);   
    03C5 EC08      LDI	R16,0xC8
    03C6 DC86      RCALL	_delay
    03C7 9563      INC	R22
    03C8 3C68      CPI	R22,0xC8
    03C9 F3D8      BCS	0x03C5
(0229)       a=init_1820();               //复位18b20 
    03CA D0D8      RCALL	_init_1820
    03CB 870A      STD	Y+10,R16
(0230)       write_1820(0xCC);               //SKIP THE ROM
    03CC EC0C      LDI	R16,0xCC
    03CD D0E9      RCALL	_write_1820
(0231)       write_1820(0xBE);               //读寄存器命令
    03CE EB0E      LDI	R16,0xBE
    03CF D0E7      RCALL	_write_1820
(0232)       teml=read_1820();              //读低字节数据 
    03D0 D109      RCALL	_read_1820
    03D1 2F40      MOV	R20,R16
(0233)       temh=read_1820();              //读高字节数据 
    03D2 D107      RCALL	_read_1820
    03D3 2EE0      MOV	R14,R16
(0234) 	  temm=teml;
    03D4 2EA4      MOV	R10,R20
(0235) 	  temm&=0x0F;
    03D5 2D8A      MOV	R24,R10
    03D6 708F      ANDI	R24,0xF
    03D7 2EA8      MOV	R10,R24
(0236) 	  teml>>=4;
    03D8 2F84      MOV	R24,R20
    03D9 9582      SWAP	R24
    03DA 708F      ANDI	R24,0xF
    03DB 2F48      MOV	R20,R24
(0237) 	  temh<<=4;
    03DC 2D8E      MOV	R24,R14
    03DD 708F      ANDI	R24,0xF
    03DE 9582      SWAP	R24
    03DF 2EE8      MOV	R14,R24
(0238) 	  count=teml|temh;
    03E0 2EC4      MOV	R12,R20
    03E1 2AC8      OR	R12,R24
(0239) 	  temh_d=count/10;
    03E2 E01A      LDI	R17,0xA
    03E3 2D0C      MOV	R16,R12
    03E4 D158      RCALL	div8u
    03E5 930000A2  STS	temh_d,R16
(0240) 	  temm_d=(temm*6)/10;
    03E7 2D2A      MOV	R18,R10
    03E8 2733      CLR	R19
    03E9 E006      LDI	R16,6
    03EA E010      LDI	R17,0
    03EB D1C7      RCALL	mpy16s
    03EC E02A      LDI	R18,0xA
    03ED E030      LDI	R19,0
    03EE D117      RCALL	div16s
    03EF 930000A0  STS	temm_d,R16
(0241) 	  teml_d=count%10;
    03F1 E01A      LDI	R17,0xA
    03F2 2D0C      MOV	R16,R12
    03F3 D147      RCALL	mod8u
    03F4 930000A1  STS	teml_d,R16
(0242)       delay(200);  
    03F6 EC08      LDI	R16,0xC8
    03F7 DC55      RCALL	_delay
(0243) 	  LCD_set_xy(10,1);
    03F8 E021      LDI	R18,1
    03F9 E00A      LDI	R16,0xA
    03FA D05A      RCALL	_LCD_set_xy
(0244) 	  LCD_write_char(temh_d+48);       
    03FB 910000A2  LDS	R16,temh_d
    03FD 5D00      SUBI	R16,0xD0
    03FE D066      RCALL	_LCD_write_char
(0245) 	  LCD_set_xy(11,1);
    03FF E021      LDI	R18,1
    0400 E00B      LDI	R16,0xB
    0401 D053      RCALL	_LCD_set_xy
(0246) 	  LCD_write_char(teml_d+48);  
    0402 910000A1  LDS	R16,teml_d
    0404 5D00      SUBI	R16,0xD0
    0405 D05F      RCALL	_LCD_write_char
(0247) 	  LCD_set_xy(12,1);
    0406 E021      LDI	R18,1
    0407 E00C      LDI	R16,0xC
    0408 D04C      RCALL	_LCD_set_xy
(0248) 	  LCD_write_char('.');     
    0409 E20E      LDI	R16,0x2E
    040A D05A      RCALL	_LCD_write_char
(0249) 	  LCD_set_xy(13,1);
    040B E021      LDI	R18,1
    040C E00D      LDI	R16,0xD
    040D D047      RCALL	_LCD_set_xy
(0250) 	  LCD_write_char(temm_d+48); 
    040E 910000A0  LDS	R16,temm_d
    0410 5D00      SUBI	R16,0xD0
    0411 D053      RCALL	_LCD_write_char
(0251) 	  LCD_write_string(14,1,"`C");     
    0412 E682      LDI	R24,0x62
    0413 E090      LDI	R25,0
    0414 8399      STD	Y+1,R25
    0415 8388      STD	Y+0,R24
    0416 E021      LDI	R18,1
    0417 E00E      LDI	R16,0xE
    0418 D054      RCALL	_LCD_write_string
    0419 CEE6      RJMP	0x0300
    041A 962D      ADIW	R28,0xD
    041B 9508      RET
_delay_ms:
  a                    --> R20
  b                    --> R22
  n                    --> R16
    041C D142      RCALL	push_gset2
FILE: D:\时钟芯片\1302\1302-162\162.c
(0001) #include <io8515v.h>
(0002) #include <macros.h>
(0003) #include <162-1302.h>
(0004) void delay_ms(unsigned char n)
(0005) 	{
(0006) 	unsigned char a, b;
(0007) 	for (a = 1; a<n; a++)
    041D E041      LDI	R20,1
    041E C006      RJMP	0x0425
(0008) 		for (b = 1; b; b++)
    041F E061      LDI	R22,1
    0420 C001      RJMP	0x0422
    0421 9563      INC	R22
    0422 2366      TST	R22
    0423 F7E9      BNE	0x0421
    0424 9543      INC	R20
    0425 1740      CP	R20,R16
    0426 F3C0      BCS	0x041F
    0427 D12B      RCALL	pop_gset2
    0428 9508      RET
_delay_us:
  b                    --> R20
  n                    --> R16
    0429 D137      RCALL	push_gset1
(0009) 			;
(0010) 	}
(0011) void delay_us(unsigned int n)
(0012) 	{
(0013) 	unsigned char  b;
(0014) 		for (b = 1; b<n; b++)
    042A E041      LDI	R20,1
    042B C001      RJMP	0x042D
    042C 9543      INC	R20
    042D 2E24      MOV	R2,R20
    042E 2433      CLR	R3
    042F 1620      CP	R2,R16
    0430 0631      CPC	R3,R17
    0431 F3D0      BCS	0x042C
    0432 D131      RCALL	pop_gset1
    0433 9508      RET
(0015) 			;
(0016) 	}
(0017) 	
(0018) void LCD_wait(void)   	 	    //等待LCD空闲
(0019) {
(0020) LCD_DATA_PORT&=~BIT(7);
_LCD_wait:
    0434 98DF      CBI	0x1B,7
(0021) PORTB&=~BIT(0);
    0435 98C0      CBI	0x18,0
(0022) PORTB|=BIT(1);
    0436 9AC1      SBI	0x18,1
(0023) PORTB|=BIT(2);
    0437 9AC2      SBI	0x18,2
(0024) while(!(LCD_DATA_PIN &0x80)==0);
    0438 B389      IN	R24,0x19
    0439 7880      ANDI	R24,0x80
    043A F419      BNE	0x043E
    043B E001      LDI	R16,1
    043C E010      LDI	R17,0
    043D C002      RJMP	0x0440
    043E 2700      CLR	R16
    043F 2711      CLR	R17
    0440 3000      CPI	R16,0
    0441 0701      CPC	R16,R17
    0442 F3A9      BEQ	0x0438
(0025) LCD_DATA_DDR|=0xFF;
    0443 B38A      IN	R24,0x1A
    0444 6F8F      ORI	R24,0xFF
    0445 BB8A      OUT	0x1A,R24
(0026) PORTB&=~BIT(2);
    0446 98C2      CBI	0x18,2
    0447 9508      RET
(0027) }
(0028) 
(0029) void command_enable()  		   	//写指令使能
(0030) { 
(0031) PORTB&=~(BIT(0)|BIT(1));
_command_enable:
    0448 B388      IN	R24,0x18
    0449 7F8C      ANDI	R24,0xFC
    044A BB88      OUT	0x18,R24
(0032) PORTB|=BIT(2);
    044B 9AC2      SBI	0x18,2
(0033) asm("nop");
    044C 0000      NOP
(0034) PORTB&=~BIT(2);
    044D 98C2      CBI	0x18,2
    044E 9508      RET
(0035) }
(0036) void data_enable()				//写数据使能
(0037) {
(0038) PORTB|=BIT(0);
_data_enable:
    044F 9AC0      SBI	0x18,0
(0039) PORTB&=~BIT(1);
    0450 98C1      CBI	0x18,1
(0040) PORTB|=BIT(2);
    0451 9AC2      SBI	0x18,2
(0041) asm("nop");
    0452 0000      NOP
(0042) PORTB&=~BIT(2);
    0453 98C2      CBI	0x18,2
    0454 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R20
  x                    --> R22
    0455 D109      RCALL	push_gset2
    0456 2F42      MOV	R20,R18
    0457 2F60      MOV	R22,R16
(0043) }
(0044) 
(0045) /*设置LCD显示的起始位置输入参数:x、y
(0046) 显示字符串的位置,X:0-15,Y:0-1
(0047) LCD第一行显示寄存器地址:0X80-0X8F
(0048) LCD第一行显示寄存器地址:0XC0-0XCF*/
(0049) void LCD_set_xy( unsigned char x, unsigned char y )
(0050) {
(0051) unsigned char address;
(0052) if (y==0)
    0458 2344      TST	R20
    0459 F419      BNE	0x045D
(0053)   address=0x80+x;
    045A 2F46      MOV	R20,R22
    045B 5840      SUBI	R20,0x80
    045C C002      RJMP	0x045F
(0054)  else
(0055)  address=0xC0+x;
    045D 2F46      MOV	R20,R22
    045E 5440      SUBI	R20,0x40
(0056) LCD_DATA_PORT=address;     	   //输入开始显示地址
    045F BB4B      OUT	0x1B,R20
(0057) command_enable();
    0460 DFE7      RCALL	_command_enable
(0058) delay_ms(10);
    0461 E00A      LDI	R16,0xA
    0462 DFB9      RCALL	_delay_ms
    0463 D0EF      RCALL	pop_gset2
    0464 9508      RET
_LCD_write_char:
  data                 --> R20
    0465 D0FB      RCALL	push_gset1
    0466 2F40      MOV	R20,R16
(0059) }
(0060) //写一个字符
(0061) void LCD_write_char(unsigned char data)
(0062) {
(0063) LCD_DATA_PORT=data;     		
    0467 BB4B      OUT	0x1B,R20
(0064) data_enable();
    0468 DFE6      RCALL	_data_enable
(0065) delay_ms(10);
    0469 E00A      LDI	R16,0xA
    046A DFB1      RCALL	_delay_ms
    046B D0F8      RCALL	pop_gset1
    046C 9508      RET
_LCD_write_string:
  s                    --> R20
  y                    --> R10
  x                    --> R22
    046D D0EF      RCALL	push_gset3
    046E 2EA2      MOV	R10,R18
    046F 2F60      MOV	R22,R16
    0470 814E      LDD	R20,Y+6
    0471 815F      LDD	R21,Y+7
(0066) }
(0067) //写一字符串
(0068) void LCD_write_string(unsigned char x, unsigned char y,unsigned char *s)
(0069) {
(0070) LCD_set_xy(x,y);
    0472 2D2A      MOV	R18,R10
    0473 2F06      MOV	R16,R22
    0474 DFE0      RCALL	_LCD_set_xy
    0475 C006      RJMP	0x047C
(0071) while(*s)
(0072) 	{
(0073) 	LCD_write_char(*s);
    0476 2FE4      MOV	R30,R20
    0477 2FF5      MOV	R31,R21
    0478 8100      LDD	R16,Z+0
    0479 DFEB      RCALL	_LCD_write_char
(0074) 	s++;
    047A 5F4F      SUBI	R20,0xFF
    047B 4F5F      SBCI	R21,0xFF
    047C 2FE4      MOV	R30,R20
    047D 2FF5      MOV	R31,R21
    047E 8020      LDD	R2,Z+0
    047F 2022      TST	R2
    0480 F7A9      BNE	0x0476
    0481 D0D3      RCALL	pop_gset3
    0482 9508      RET
(0075) 	}
(0076) 
(0077) }
(0078) 
(0079) void init_lcd()     			//初始化
(0080) {
(0081) delay_ms(180);						//等待30ms以上
_init_lcd:
    0483 EB04      LDI	R16,0xB4
    0484 DF97      RCALL	_delay_ms
(0082) LCD_DATA_PORT=0x38;     		//8位2行5×7点阵
    0485 E388      LDI	R24,0x38
    0486 BB8B      OUT	0x1B,R24
(0083) command_enable();
    0487 DFC0      RCALL	_command_enable
(0084) delay_us(100);					//等待39us以上
    0488 E604      LDI	R16,0x64
    0489 E010      LDI	R17,0
    048A DF9E      RCALL	_delay_us
(0085) LCD_DATA_PORT=0x0C;     		//显示器开、光标开、闪烁关
    048B E08C      LDI	R24,0xC
    048C BB8B      OUT	0x1B,R24
(0086) command_enable();
    048D DFBA      RCALL	_command_enable
(0087) delay_us(100);					//等待39us以上
    048E E604      LDI	R16,0x64
    048F E010      LDI	R17,0
    0490 DF98      RCALL	_delay_us
(0088) LCD_DATA_PORT=0x01;     		//清屏
    0491 E081      LDI	R24,1
    0492 BB8B      OUT	0x1B,R24
(0089) command_enable();
    0493 DFB4      RCALL	_command_enable
(0090) delay_ms(10);						//等待1.53ms以上
    0494 E00A      LDI	R16,0xA
    0495 DF86      RCALL	_delay_ms
(0091) LCD_DATA_PORT=0x06;     		//输入方式
    0496 E086      LDI	R24,6
    0497 BB8B      OUT	0x1B,R24
(0092) command_enable();
    0498 DFAF      RCALL	_command_enable
(0093) delay_ms(180); 					//初始化完毕
    0499 EB04      LDI	R16,0xB4
    049A DF81      RCALL	_delay_ms
    049B 9508      RET
FILE: D:\时钟芯片\1302\1302-162\18b20.c
(0001) #include <io8515v.h>
(0002) #include <macros.h>
(0003) #include <162-1302.h>
(0004) //时间延迟

⌨️ 快捷键说明

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