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

📄 main.lss

📁 8个数码管显示时钟程序,LED数字钟,流水灯程序,红外遥控,键控看门狗程序
💻 LSS
📖 第 1 页 / 共 3 页
字号:
 29e:	ec 2f       	mov	r30, r28
 2a0:	ff 27       	eor	r31, r31
 2a2:	ed 56       	subi	r30, 0x6D	; 109
 2a4:	ff 4f       	sbci	r31, 0xFF	; 255
 2a6:	80 81       	ld	r24, Z
 2a8:	f1 cf       	rjmp	.-30     	; 0x28c
     }
	 
	writetab();               //自定义字符写入CGRAM
 2aa:	d5 df       	rcall	.-86     	; 0x256
    delay_nms(5);
 2ac:	85 e0       	ldi	r24, 0x05	; 5
 2ae:	90 e0       	ldi	r25, 0x00	; 0
 2b0:	d3 de       	rcall	.-602    	; 0x58
    lcd_pos(0x0d);
 2b2:	8d e0       	ldi	r24, 0x0D	; 13
 2b4:	cc df       	rcall	.-104    	; 0x24e
    lcd_wdat(0x00);           //显示自定义字符 
 2b6:	80 e0       	ldi	r24, 0x00	; 0
 2b8:	bd df       	rcall	.-134    	; 0x234

    lcd_pos(0x40);            //设置显示位置为第二行第1个字符
 2ba:	80 e4       	ldi	r24, 0x40	; 64
 2bc:	c8 df       	rcall	.-112    	; 0x24e
     m = 0;
 2be:	c0 e0       	ldi	r28, 0x00	; 0
    while(cdis2[m] != '\0')
     {
       lcd_wdat(cdis2[m]);    //显示字符
       m++;
 2c0:	80 91 82 00 	lds	r24, 0x0082
 2c4:	88 23       	and	r24, r24
 2c6:	69 f0       	breq	.+26     	; 0x2e2
 2c8:	ec 2f       	mov	r30, r28
 2ca:	ff 27       	eor	r31, r31
 2cc:	ee 57       	subi	r30, 0x7E	; 126
 2ce:	ff 4f       	sbci	r31, 0xFF	; 255
 2d0:	80 81       	ld	r24, Z
 2d2:	b0 df       	rcall	.-160    	; 0x234
 2d4:	cf 5f       	subi	r28, 0xFF	; 255
 2d6:	ec 2f       	mov	r30, r28
 2d8:	ff 27       	eor	r31, r31
 2da:	ee 57       	subi	r30, 0x7E	; 126
 2dc:	ff 4f       	sbci	r31, 0xFF	; 255
 2de:	80 81       	ld	r24, Z
 2e0:	f1 cf       	rjmp	.-30     	; 0x2c4
     }

    lcd_pos(0x4d);
 2e2:	8d e4       	ldi	r24, 0x4D	; 77
 2e4:	b4 df       	rcall	.-152    	; 0x24e
    lcd_wdat(0x00);           //显示自定义字符
 2e6:	80 e0       	ldi	r24, 0x00	; 0
 2e8:	a5 df       	rcall	.-182    	; 0x234
 2ea:	cf 91       	pop	r28
 2ec:	08 95       	ret

000002ee <Error_Menu>:
}

/*******************************************************************/
/*                                                                 */
/* DS18B20 ERROR 显示菜单                                          */
/*                                                                 */
/*******************************************************************/
void  Error_Menu (void)
{
 2ee:	cf 93       	push	r28
     uchar  m;
     lcd_init();                //初始化LCD 
 2f0:	74 df       	rcall	.-280    	; 0x1da
	
  	 lcd_pos(0);                //设置显示位置为第一行的第1个字符
 2f2:	80 e0       	ldi	r24, 0x00	; 0
 2f4:	ac df       	rcall	.-168    	; 0x24e
     m = 0;
 2f6:	c0 e0       	ldi	r28, 0x00	; 0
     while(cdis3[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis3[m]);
       m++;
 2f8:	80 91 71 00 	lds	r24, 0x0071
 2fc:	88 23       	and	r24, r24
 2fe:	69 f0       	breq	.+26     	; 0x31a
 300:	ec 2f       	mov	r30, r28
 302:	ff 27       	eor	r31, r31
 304:	ef 58       	subi	r30, 0x8F	; 143
 306:	ff 4f       	sbci	r31, 0xFF	; 255
 308:	80 81       	ld	r24, Z
 30a:	94 df       	rcall	.-216    	; 0x234
 30c:	cf 5f       	subi	r28, 0xFF	; 255
 30e:	ec 2f       	mov	r30, r28
 310:	ff 27       	eor	r31, r31
 312:	ef 58       	subi	r30, 0x8F	; 143
 314:	ff 4f       	sbci	r31, 0xFF	; 255
 316:	80 81       	ld	r24, Z
 318:	f1 cf       	rjmp	.-30     	; 0x2fc
     }

     lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 31a:	80 e4       	ldi	r24, 0x40	; 64
 31c:	98 df       	rcall	.-208    	; 0x24e
     m = 0;
 31e:	c0 e0       	ldi	r28, 0x00	; 0
     while(cdis4[m] != '\0')
     {
       lcd_wdat(cdis4[m]);      //显示字符
       m++;
 320:	80 91 60 00 	lds	r24, 0x0060
 324:	88 23       	and	r24, r24
 326:	71 f0       	breq	.+28     	; 0x344
 328:	ec 2f       	mov	r30, r28
 32a:	ff 27       	eor	r31, r31
 32c:	e0 5a       	subi	r30, 0xA0	; 160
 32e:	ff 4f       	sbci	r31, 0xFF	; 255
 330:	80 81       	ld	r24, Z
 332:	80 df       	rcall	.-256    	; 0x234
 334:	cf 5f       	subi	r28, 0xFF	; 255
 336:	ec 2f       	mov	r30, r28
 338:	ff 27       	eor	r31, r31
 33a:	e0 5a       	subi	r30, 0xA0	; 160
 33c:	ff 4f       	sbci	r31, 0xFF	; 255
 33e:	80 81       	ld	r24, Z
 340:	88 23       	and	r24, r24
 342:	91 f7       	brne	.-28     	; 0x328
 344:	cf 91       	pop	r28
 346:	08 95       	ret

00000348 <Disp_Temperature>:
     }
}

/*******************************************************************/
/*                                                                 */
/* 数据转换与温度显示                                              */
/*                                                                 */
/*******************************************************************/
void Disp_Temperature(uchar x)
{
 348:	58 2f       	mov	r21, r24
  display[4]=temp_data[0]&0x0f;
 34a:	90 91 d1 00 	lds	r25, 0x00D1
 34e:	89 2f       	mov	r24, r25
 350:	8f 70       	andi	r24, 0x0F	; 15
  display[0]=ditab[display[4]]+0x30;     //查表得小数位的值
 352:	e8 2f       	mov	r30, r24
 354:	ff 27       	eor	r31, r31
 356:	e4 54       	subi	r30, 0x44	; 68
 358:	ff 4f       	sbci	r31, 0xFF	; 255
 35a:	80 81       	ld	r24, Z
 35c:	80 5d       	subi	r24, 0xD0	; 208
 35e:	80 93 cc 00 	sts	0x00CC, r24
  
  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 362:	29 2f       	mov	r18, r25
 364:	33 27       	eor	r19, r19
 366:	64 e0       	ldi	r22, 0x04	; 4
 368:	36 95       	lsr	r19
 36a:	27 95       	ror	r18
 36c:	6a 95       	dec	r22
 36e:	e1 f7       	brne	.-8      	; 0x368
 370:	80 91 d2 00 	lds	r24, 0x00D2
 374:	99 27       	eor	r25, r25
 376:	8f 70       	andi	r24, 0x0F	; 15
 378:	90 70       	andi	r25, 0x00	; 0
 37a:	44 e0       	ldi	r20, 0x04	; 4
 37c:	88 0f       	add	r24, r24
 37e:	99 1f       	adc	r25, r25
 380:	4a 95       	dec	r20
 382:	e1 f7       	brne	.-8      	; 0x37c
 384:	28 2b       	or	r18, r24
 386:	20 93 d0 00 	sts	0x00D0, r18
  display[3]=display[4]/100+0x30;
 38a:	82 2f       	mov	r24, r18
 38c:	64 e6       	ldi	r22, 0x64	; 100
 38e:	66 d0       	rcall	.+204    	; 0x45c
 390:	38 2f       	mov	r19, r24
 392:	30 5d       	subi	r19, 0xD0	; 208
 394:	30 93 cf 00 	sts	0x00CF, r19
  display[1]=display[4]%100;
 398:	82 2f       	mov	r24, r18
 39a:	60 d0       	rcall	.+192    	; 0x45c
 39c:	29 2f       	mov	r18, r25
  display[2]=display[1]/10+0x30;
 39e:	89 2f       	mov	r24, r25
 3a0:	6a e0       	ldi	r22, 0x0A	; 10
 3a2:	5c d0       	rcall	.+184    	; 0x45c
 3a4:	48 2f       	mov	r20, r24
 3a6:	40 5d       	subi	r20, 0xD0	; 208
 3a8:	40 93 ce 00 	sts	0x00CE, r20
  display[1]=display[1]%10+0x30;
 3ac:	82 2f       	mov	r24, r18
 3ae:	56 d0       	rcall	.+172    	; 0x45c
 3b0:	89 2f       	mov	r24, r25
 3b2:	80 5d       	subi	r24, 0xD0	; 208
 3b4:	80 93 cd 00 	sts	0x00CD, r24

    if(display[3]==0x30)        //高位为0,不显示
 3b8:	30 33       	cpi	r19, 0x30	; 48
 3ba:	39 f4       	brne	.+14     	; 0x3ca
   { 
     display[3]=0x20;              
 3bc:	80 e2       	ldi	r24, 0x20	; 32
 3be:	80 93 cf 00 	sts	0x00CF, r24
     if(display[2]==0x30)      //次高位为0,不显示
 3c2:	40 33       	cpi	r20, 0x30	; 48
 3c4:	11 f4       	brne	.+4      	; 0x3ca
     display[2]=0x20;
 3c6:	80 93 ce 00 	sts	0x00CE, r24
   }
    if(x==1)
 3ca:	51 30       	cpi	r21, 0x01	; 1
 3cc:	89 f4       	brne	.+34     	; 0x3f0
    {
     lcd_pos(0x48);               //在LCD第二行显示
 3ce:	88 e4       	ldi	r24, 0x48	; 72
 3d0:	3e df       	rcall	.-388    	; 0x24e
     lcd_wdat(display[3]);        //百位数显示 
 3d2:	80 91 cf 00 	lds	r24, 0x00CF
 3d6:	2e df       	rcall	.-420    	; 0x234
     lcd_pos(0x49);             
 3d8:	89 e4       	ldi	r24, 0x49	; 73
 3da:	39 df       	rcall	.-398    	; 0x24e
     lcd_wdat(display[2]);        //十位数显示 
 3dc:	80 91 ce 00 	lds	r24, 0x00CE
 3e0:	29 df       	rcall	.-430    	; 0x234
	 lcd_pos(0x4a);             
 3e2:	8a e4       	ldi	r24, 0x4A	; 74
 3e4:	34 df       	rcall	.-408    	; 0x24e
     lcd_wdat(display[1]);        //个位数显示 
 3e6:	80 91 cd 00 	lds	r24, 0x00CD
 3ea:	24 df       	rcall	.-440    	; 0x234
	 lcd_pos(0x4c);             
 3ec:	8c e4       	ldi	r24, 0x4C	; 76
 3ee:	10 c0       	rjmp	.+32     	; 0x410
     lcd_wdat(display[0]);        //小数位数显示
    }
   else
     {
     lcd_pos(0x08);               //在LCD第一行显示
 3f0:	88 e0       	ldi	r24, 0x08	; 8
 3f2:	2d df       	rcall	.-422    	; 0x24e
     lcd_wdat(display[3]);        //百位数显示 
 3f4:	80 91 cf 00 	lds	r24, 0x00CF
 3f8:	1d df       	rcall	.-454    	; 0x234
     lcd_pos(0x09);             
 3fa:	89 e0       	ldi	r24, 0x09	; 9
 3fc:	28 df       	rcall	.-432    	; 0x24e
     lcd_wdat(display[2]);        //十位数显示 
 3fe:	80 91 ce 00 	lds	r24, 0x00CE
 402:	18 df       	rcall	.-464    	; 0x234
	 lcd_pos(0x0a);             
 404:	8a e0       	ldi	r24, 0x0A	; 10
 406:	23 df       	rcall	.-442    	; 0x24e
     lcd_wdat(display[1]);        //个位数显示 
 408:	80 91 cd 00 	lds	r24, 0x00CD
 40c:	13 df       	rcall	.-474    	; 0x234
	 lcd_pos(0x0c);             
 40e:	8c e0       	ldi	r24, 0x0C	; 12
 410:	1e df       	rcall	.-452    	; 0x24e
     lcd_wdat(display[0]);        //小数位数显示
 412:	80 91 cc 00 	lds	r24, 0x00CC
 416:	0e df       	rcall	.-484    	; 0x234
 418:	08 95       	ret
 41a:	08 95       	ret

0000041c <main>:
    }
}	 

/********************************************************/
/*                                                      */
/* 主函数                                               */
/*                                                      */
/********************************************************/
int  main(void)
 {     
 41c:	cf e5       	ldi	r28, 0x5F	; 95
 41e:	d2 e0       	ldi	r29, 0x02	; 2
 420:	de bf       	out	0x3e, r29	; 62
 422:	cd bf       	out	0x3d, r28	; 61
	init_io();
 424:	3d de       	rcall	.-902    	; 0xa0
	
	while(1)
     {
	   Ok_Menu ();
 426:	2b df       	rcall	.-426    	; 0x27e

	   do
	    {
          Read_Temperature(0);  //第一个DS18B20
 428:	80 e0       	ldi	r24, 0x00	; 0
 42a:	8c de       	rcall	.-744    	; 0x144
	      Disp_Temperature(0);
 42c:	80 e0       	ldi	r24, 0x00	; 0
 42e:	8c df       	rcall	.-232    	; 0x348
          delay_nms(50);
 430:	82 e3       	ldi	r24, 0x32	; 50
 432:	90 e0       	ldi	r25, 0x00	; 0
 434:	11 de       	rcall	.-990    	; 0x58
          Read_Temperature(1);  //第二个DS18B20
 436:	81 e0       	ldi	r24, 0x01	; 1
 438:	85 de       	rcall	.-758    	; 0x144
	      Disp_Temperature(1);
 43a:	81 e0       	ldi	r24, 0x01	; 1
 43c:	85 df       	rcall	.-246    	; 0x348
          delay_nms(50);
 43e:	82 e3       	ldi	r24, 0x32	; 50
 440:	90 e0       	ldi	r25, 0x00	; 0
 442:	0a de       	rcall	.-1004   	; 0x58
        }
 444:	80 91 d4 00 	lds	r24, 0x00D4
 448:	88 23       	and	r24, r24
 44a:	71 f3       	breq	.-36     	; 0x428
       while(!presence) ;

       Error_Menu ();
 44c:	50 df       	rcall	.-352    	; 0x2ee

	   do
	   {  
	     Init_DS18B20();
 44e:	32 de       	rcall	.-924    	; 0xb4
	     beep();
 450:	13 de       	rcall	.-986    	; 0x78
       }
 452:	80 91 d4 00 	lds	r24, 0x00D4
 456:	88 23       	and	r24, r24
 458:	d1 f7       	brne	.-12     	; 0x44e
 45a:	e5 cf       	rjmp	.-54     	; 0x426

0000045c <__udivmodqi4>:
 45c:	99 1b       	sub	r25, r25
 45e:	79 e0       	ldi	r23, 0x09	; 9
 460:	04 c0       	rjmp	.+8      	; 0x46a

00000462 <__udivmodqi4_loop>:
 462:	99 1f       	adc	r25, r25
 464:	96 17       	cp	r25, r22
 466:	08 f0       	brcs	.+2      	; 0x46a
 468:	96 1b       	sub	r25, r22

0000046a <__udivmodqi4_ep>:
 46a:	88 1f       	adc	r24, r24
 46c:	7a 95       	dec	r23
 46e:	c9 f7       	brne	.-14     	; 0x462
 470:	80 95       	com	r24
 472:	08 95       	ret

⌨️ 快捷键说明

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