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

📄 main.lss

📁 8个数码管显示时钟程序,LED数字钟,流水灯程序,红外遥控,键控看门狗程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:
}

/*********************************************************/
/*                                                       */
/* 读取温度                                              */
/*                                                       */
/*********************************************************/
void Read_Temperature(uchar x)
{
 144:	0f 93       	push	r16
 146:	1f 93       	push	r17
 148:	cf 93       	push	r28
 14a:	df 93       	push	r29
 14c:	08 2f       	mov	r16, r24
   uchar  i;
   Init_DS18B20();
 14e:	b2 df       	rcall	.-156    	; 0xb4
   if(presence)
 150:	80 91 94 00 	lds	r24, 0x0094
 154:	88 23       	and	r24, r24
 156:	11 f0       	breq	.+4      	; 0x15c
   { beep();}
 158:	8f df       	rcall	.-226    	; 0x78
 15a:	23 c0       	rjmp	.+70     	; 0x1a2
   else        
   {
     WriteOneChar(0xCC);       //跳过读序号列号的操作
 15c:	8c ec       	ldi	r24, 0xCC	; 204
 15e:	de df       	rcall	.-68     	; 0x11c
     WriteOneChar(0x44);       //启动温度转换
 160:	84 e4       	ldi	r24, 0x44	; 68
 162:	dc df       	rcall	.-72     	; 0x11c

     Init_DS18B20();
 164:	a7 df       	rcall	.-178    	; 0xb4
//   WriteOneChar(0xCC);        //跳过读序号列号的操作
     WriteOneChar(0x55);        //匹配ROM命令
 166:	85 e5       	ldi	r24, 0x55	; 85
 168:	d9 df       	rcall	.-78     	; 0x11c
 16a:	c0 e0       	ldi	r28, 0x00	; 0
 16c:	d0 e0       	ldi	r29, 0x00	; 0
 16e:	17 e0       	ldi	r17, 0x07	; 7
     for(i=0;i<8;i++)
     {
       WriteOneChar(RomCode[x][i]);
 170:	e0 2f       	mov	r30, r16
 172:	ff 27       	eor	r31, r31
 174:	33 e0       	ldi	r19, 0x03	; 3
 176:	ee 0f       	add	r30, r30
 178:	ff 1f       	adc	r31, r31
 17a:	3a 95       	dec	r19
 17c:	e1 f7       	brne	.-8      	; 0x176
 17e:	ec 0f       	add	r30, r28
 180:	fd 1f       	adc	r31, r29
 182:	e0 5a       	subi	r30, 0xA0	; 160
 184:	ff 4f       	sbci	r31, 0xFF	; 255
 186:	80 81       	ld	r24, Z
 188:	c9 df       	rcall	.-110    	; 0x11c
 18a:	11 50       	subi	r17, 0x01	; 1
 18c:	21 96       	adiw	r28, 0x01	; 1
 18e:	17 ff       	sbrs	r17, 7
 190:	ef cf       	rjmp	.-34     	; 0x170
	 }
     WriteOneChar(0xBE);        //读取温度寄存器
 192:	8e eb       	ldi	r24, 0xBE	; 190
 194:	c3 df       	rcall	.-122    	; 0x11c
     
     temp_data[0] = ReadOneChar();   //温度低8位
 196:	ac df       	rcall	.-168    	; 0xf0
 198:	80 93 91 00 	sts	0x0091, r24
     temp_data[1] = ReadOneChar();   //温度高8位
 19c:	a9 df       	rcall	.-174    	; 0xf0
 19e:	80 93 92 00 	sts	0x0092, r24
 1a2:	df 91       	pop	r29
 1a4:	cf 91       	pop	r28
 1a6:	1f 91       	pop	r17
 1a8:	0f 91       	pop	r16
 1aa:	08 95       	ret

000001ac <Disp_Temperature>:
    }
}

/*********************************************************/
/*                                                       */
/* 数据处理与温度显示                                    */
/*                                                       */
/*********************************************************/
void Disp_Temperature(uchar ch)
{
 1ac:	cf 93       	push	r28
 1ae:	c8 2f       	mov	r28, r24
  display[4]=temp_data[0]&0x0f;
 1b0:	90 91 91 00 	lds	r25, 0x0091
 1b4:	89 2f       	mov	r24, r25
 1b6:	8f 70       	andi	r24, 0x0F	; 15
  display[0]=ditab[display[4]]; //查表得小数位的值
 1b8:	e8 2f       	mov	r30, r24
 1ba:	ff 27       	eor	r31, r31
 1bc:	e0 59       	subi	r30, 0x90	; 144
 1be:	ff 4f       	sbci	r31, 0xFF	; 255
 1c0:	80 81       	ld	r24, Z
 1c2:	80 93 8c 00 	sts	0x008C, r24
  
  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 1c6:	29 2f       	mov	r18, r25
 1c8:	33 27       	eor	r19, r19
 1ca:	54 e0       	ldi	r21, 0x04	; 4
 1cc:	36 95       	lsr	r19
 1ce:	27 95       	ror	r18
 1d0:	5a 95       	dec	r21
 1d2:	e1 f7       	brne	.-8      	; 0x1cc
 1d4:	80 91 92 00 	lds	r24, 0x0092
 1d8:	99 27       	eor	r25, r25
 1da:	8f 70       	andi	r24, 0x0F	; 15
 1dc:	90 70       	andi	r25, 0x00	; 0
 1de:	44 e0       	ldi	r20, 0x04	; 4
 1e0:	88 0f       	add	r24, r24
 1e2:	99 1f       	adc	r25, r25
 1e4:	4a 95       	dec	r20
 1e6:	e1 f7       	brne	.-8      	; 0x1e0
 1e8:	28 2b       	or	r18, r24
 1ea:	20 93 90 00 	sts	0x0090, r18
  display[3]=display[4]/100;
 1ee:	82 2f       	mov	r24, r18
 1f0:	64 e6       	ldi	r22, 0x64	; 100
 1f2:	98 d0       	rcall	.+304    	; 0x324
 1f4:	38 2f       	mov	r19, r24
 1f6:	80 93 8f 00 	sts	0x008F, r24
  display[1]=display[4]%100;
 1fa:	82 2f       	mov	r24, r18
 1fc:	93 d0       	rcall	.+294    	; 0x324
 1fe:	29 2f       	mov	r18, r25
  display[2]=display[1]/10;
 200:	4a e0       	ldi	r20, 0x0A	; 10
 202:	89 2f       	mov	r24, r25
 204:	64 2f       	mov	r22, r20
 206:	8e d0       	rcall	.+284    	; 0x324
 208:	58 2f       	mov	r21, r24
 20a:	80 93 8e 00 	sts	0x008E, r24
  display[1]=display[1]%10;
 20e:	82 2f       	mov	r24, r18
 210:	89 d0       	rcall	.+274    	; 0x324
 212:	90 93 8d 00 	sts	0x008D, r25

  if(!display[3])               //高位为0,不显示
 216:	33 23       	and	r19, r19
 218:	31 f4       	brne	.+12     	; 0x226
  { 
    display[3]=0x0a;              
 21a:	40 93 8f 00 	sts	0x008F, r20
    if(!display[2])             //次高位为0,不显示
 21e:	55 23       	and	r21, r21
 220:	11 f4       	brne	.+4      	; 0x226
     display[2]=0x0a;
 222:	40 93 8e 00 	sts	0x008E, r20
  }

   PORTA = 0xc6;                 //显示 C
 226:	86 ec       	ldi	r24, 0xC6	; 198
 228:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0x7f;
 22a:	8f e7       	ldi	r24, 0x7F	; 127
 22c:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 22e:	81 e0       	ldi	r24, 0x01	; 1
 230:	90 e0       	ldi	r25, 0x00	; 0
 232:	12 df       	rcall	.-476    	; 0x58

   PORTA = 0x9c;                 //显示 °  
 234:	8c e9       	ldi	r24, 0x9C	; 156
 236:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xbf;
 238:	8f eb       	ldi	r24, 0xBF	; 191
 23a:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 23c:	81 e0       	ldi	r24, 0x01	; 1
 23e:	90 e0       	ldi	r25, 0x00	; 0
 240:	0b df       	rcall	.-490    	; 0x58

   PORTA =LEDData[display[0]];  //显示小数位
 242:	80 91 8c 00 	lds	r24, 0x008C
 246:	e8 2f       	mov	r30, r24
 248:	ff 27       	eor	r31, r31
 24a:	e0 58       	subi	r30, 0x80	; 128
 24c:	ff 4f       	sbci	r31, 0xFF	; 255
 24e:	80 81       	ld	r24, Z
 250:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xdf;
 252:	8f ed       	ldi	r24, 0xDF	; 223
 254:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 256:	81 e0       	ldi	r24, 0x01	; 1
 258:	90 e0       	ldi	r25, 0x00	; 0
 25a:	fe de       	rcall	.-516    	; 0x58

   PORTA =LEDData[display[1]];  //显示个位
 25c:	80 91 8d 00 	lds	r24, 0x008D
 260:	e8 2f       	mov	r30, r24
 262:	ff 27       	eor	r31, r31
 264:	e0 58       	subi	r30, 0x80	; 128
 266:	ff 4f       	sbci	r31, 0xFF	; 255
 268:	80 81       	ld	r24, Z
 26a:	8b bb       	out	0x1b, r24	; 27
   PORTA &=~_BV(PA7);           //显示小数点
 26c:	df 98       	cbi	0x1b, 7	; 27
   PORTC = 0xef;
 26e:	8f ee       	ldi	r24, 0xEF	; 239
 270:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 272:	81 e0       	ldi	r24, 0x01	; 1
 274:	90 e0       	ldi	r25, 0x00	; 0
 276:	f0 de       	rcall	.-544    	; 0x58

   PORTA =LEDData[display[2]];  //显示十位
 278:	80 91 8e 00 	lds	r24, 0x008E
 27c:	e8 2f       	mov	r30, r24
 27e:	ff 27       	eor	r31, r31
 280:	e0 58       	subi	r30, 0x80	; 128
 282:	ff 4f       	sbci	r31, 0xFF	; 255
 284:	80 81       	ld	r24, Z
 286:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xf7;
 288:	87 ef       	ldi	r24, 0xF7	; 247
 28a:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 28c:	81 e0       	ldi	r24, 0x01	; 1
 28e:	90 e0       	ldi	r25, 0x00	; 0
 290:	e3 de       	rcall	.-570    	; 0x58

   PORTA =LEDData[display[3]];  //显示十位
 292:	80 91 8f 00 	lds	r24, 0x008F
 296:	e8 2f       	mov	r30, r24
 298:	ff 27       	eor	r31, r31
 29a:	e0 58       	subi	r30, 0x80	; 128
 29c:	ff 4f       	sbci	r31, 0xFF	; 255
 29e:	80 81       	ld	r24, Z
 2a0:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xfb;
 2a2:	8b ef       	ldi	r24, 0xFB	; 251
 2a4:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 2a6:	81 e0       	ldi	r24, 0x01	; 1
 2a8:	90 e0       	ldi	r25, 0x00	; 0
 2aa:	d6 de       	rcall	.-596    	; 0x58
   
   PORTA =LEDData[0x0b];        //显示 "-"
 2ac:	80 91 8b 00 	lds	r24, 0x008B
 2b0:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xfd; 
 2b2:	8d ef       	ldi	r24, 0xFD	; 253
 2b4:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 2b6:	81 e0       	ldi	r24, 0x01	; 1
 2b8:	90 e0       	ldi	r25, 0x00	; 0
 2ba:	ce de       	rcall	.-612    	; 0x58
   
   PORTA =LEDData[ch+1];        //显示通道号
 2bc:	ec 2f       	mov	r30, r28
 2be:	ff 27       	eor	r31, r31
 2c0:	e0 58       	subi	r30, 0x80	; 128
 2c2:	ff 4f       	sbci	r31, 0xFF	; 255
 2c4:	81 81       	ldd	r24, Z+1	; 0x01
 2c6:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xfe; 
 2c8:	8e ef       	ldi	r24, 0xFE	; 254
 2ca:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 2cc:	81 e0       	ldi	r24, 0x01	; 1
 2ce:	90 e0       	ldi	r25, 0x00	; 0
 2d0:	c3 de       	rcall	.-634    	; 0x58
   
   PORTC = 0xff;                //关闭显示
 2d2:	8f ef       	ldi	r24, 0xFF	; 255
 2d4:	85 bb       	out	0x15, r24	; 21
 2d6:	cf 91       	pop	r28
 2d8:	08 95       	ret

000002da <main>:
}

/********************************************************/
/*                                                      */
/* 主函数                                               */
/*                                                      */
/********************************************************/

int main(void)
{      
 2da:	cf e5       	ldi	r28, 0x5F	; 95
 2dc:	d2 e0       	ldi	r29, 0x02	; 2
 2de:	de bf       	out	0x3e, r29	; 62
 2e0:	cd bf       	out	0x3d, r28	; 61
   init_io();                        //芯片初始化端口
 2e2:	de de       	rcall	.-580    	; 0xa0
 2e4:	c7 ec       	ldi	r28, 0xC7	; 199
 2e6:	d0 e0       	ldi	r29, 0x00	; 0
   uint  time;  
   while(1)
    {
                                     //第一个DS18B20
	  for(time=0;time<200;time++)
	  {
        Read_Temperature(0);	     //读温度值          
 2e8:	80 e0       	ldi	r24, 0x00	; 0
 2ea:	2c df       	rcall	.-424    	; 0x144
        if(presence)
 2ec:	80 91 94 00 	lds	r24, 0x0094
 2f0:	88 23       	and	r24, r24
 2f2:	19 f0       	breq	.+6      	; 0x2fa
	     {PORTC = 0xff;}             //DS18B20不正常,关闭显示
 2f4:	8f ef       	ldi	r24, 0xFF	; 255
 2f6:	85 bb       	out	0x15, r24	; 21
 2f8:	01 c0       	rjmp	.+2      	; 0x2fc
	    else  Disp_Temperature(0);  //显示温度
 2fa:	58 df       	rcall	.-336    	; 0x1ac
 2fc:	21 97       	sbiw	r28, 0x01	; 1
 2fe:	d7 ff       	sbrs	r29, 7
 300:	f3 cf       	rjmp	.-26     	; 0x2e8
 302:	c7 ec       	ldi	r28, 0xC7	; 199
 304:	d0 e0       	ldi	r29, 0x00	; 0
      }
    
	                                 //第二个DS18B20
      for(time=0;time<200;time++)
	  {     
        Read_Temperature(1);        //读温度值
 306:	81 e0       	ldi	r24, 0x01	; 1
 308:	1d df       	rcall	.-454    	; 0x144
	    if(presence)             
 30a:	80 91 94 00 	lds	r24, 0x0094
 30e:	88 23       	and	r24, r24
 310:	19 f0       	breq	.+6      	; 0x318
	     {PORTC = 0xff ;}           //DS18B20不正常,关闭显示 
 312:	8f ef       	ldi	r24, 0xFF	; 255
 314:	85 bb       	out	0x15, r24	; 21
 316:	02 c0       	rjmp	.+4      	; 0x31c
	    else  Disp_Temperature(1);  //显示温度
 318:	81 e0       	ldi	r24, 0x01	; 1
 31a:	48 df       	rcall	.-368    	; 0x1ac
 31c:	21 97       	sbiw	r28, 0x01	; 1
 31e:	d7 ff       	sbrs	r29, 7
 320:	f2 cf       	rjmp	.-28     	; 0x306
 322:	e0 cf       	rjmp	.-64     	; 0x2e4

00000324 <__udivmodqi4>:
 324:	99 1b       	sub	r25, r25
 326:	79 e0       	ldi	r23, 0x09	; 9
 328:	04 c0       	rjmp	.+8      	; 0x332

0000032a <__udivmodqi4_loop>:
 32a:	99 1f       	adc	r25, r25
 32c:	96 17       	cp	r25, r22
 32e:	08 f0       	brcs	.+2      	; 0x332
 330:	96 1b       	sub	r25, r22

00000332 <__udivmodqi4_ep>:
 332:	88 1f       	adc	r24, r24
 334:	7a 95       	dec	r23
 336:	c9 f7       	brne	.-14     	; 0x32a
 338:	80 95       	com	r24
 33a:	08 95       	ret

⌨️ 快捷键说明

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