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

📄 main.lss

📁 8个数码管显示时钟程序,LED数字钟,流水灯程序,红外遥控,键控看门狗程序
💻 LSS
📖 第 1 页 / 共 3 页
字号:
    PORTD|=_BV(DQ);        
 136:	93 9a       	sbi	0x12, 3	; 18
    dat>>=1;
 138:	c6 95       	lsr	r28
 13a:	11 50       	subi	r17, 0x01	; 1
 13c:	99 f7       	brne	.-26     	; 0x124
 13e:	cf 91       	pop	r28
 140:	1f 91       	pop	r17
 142:	08 95       	ret

00000144 <Read_Temperature>:
  }
}

/*********************************************************/
/*                                                       */
/* 读取温度                                              */
/*                                                       */
/*********************************************************/
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==1)
 150:	80 91 d4 00 	lds	r24, 0x00D4
 154:	81 30       	cpi	r24, 0x01	; 1
 156:	11 f4       	brne	.+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:	ec 55       	subi	r30, 0x5C	; 92
 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 d1 00 	sts	0x00D1, r24
     temp_data[1] = ReadOneChar();   //温度高8位
 19c:	a9 df       	rcall	.-174    	; 0xf0
 19e:	80 93 d2 00 	sts	0x00D2, 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 <lcd_busy>:
    }
}

/*************************************************************/
/*                                                           */
/*  LCD初始化设定                                            */
/*                                                           */
/*************************************************************/
void lcd_init(void)
{
    DDRA=0XFF;          //设置PA输出
    PORTA=0XFF;         //全部加上上拉电阻
    DDRC=0XFF;          //设置PC为输出
    PORTC=0XFF;         //全部加上上拉电阻
	
    delay_nms(30);      //等待上电稳定
	
    lcd_wcmd(0x38,0);   //16*2显示,5*7点阵,8位数据
    delay_nms(5);
	lcd_wcmd(0x38,0);   //不进行忙检测   
    delay_nms(5);
	lcd_wcmd(0x38,0);      
    delay_nms(5);
	
    lcd_wcmd(0x0c,1);   //显示开,关光标
    delay_nms(5);
    lcd_wcmd(0x06,1);   //移动光标
    delay_nms(5);
    lcd_wcmd(0x01,1);   //清除LCD的显示内容
    delay_nms(5);
}

/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*command为指令,wait_en指定是否要检测LCD忙信号                    */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(uchar command,uchar wait_en)
{   
    if(wait_en)             //若wait_en为1,则要检测LCD忙信号
    lcd_busy();
    PORTC &=~_BV(LCD_RS);   
    PORTC &=~_BV(LCD_RW);   
    PORTC &=~_BV(LCD_EN);   
    PORTA =command;         //送指令数据 
    PORTC |=_BV(LCD_EN);   
    _NOP();
    _NOP();
    PORTC &=~_BV(LCD_EN);   
}

/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(uchar dat)
{    
    lcd_busy();
    PORTC |=_BV(LCD_RS);    
    PORTC &=~_BV(LCD_RW);
    PORTC &=~_BV(LCD_EN);   
    PORTA=dat;               //送显示数据 
    PORTC |=_BV(LCD_EN);    
    _NOP();
    _NOP();
    PORTC &=~_BV(LCD_EN);  
}

/*************************************************************/
/*                                                           */
/*检查LCD忙状态                                              */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据  */
/*                                                           */
/*************************************************************/ 
void lcd_busy(void)
{
    DDRA &=~_BV(busy);        //设置busy口为输入
 1ac:	d7 98       	cbi	0x1a, 7	; 26
    PORTC &=~_BV(LCD_RS);     
 1ae:	a8 98       	cbi	0x15, 0	; 21
    PORTC |= _BV(LCD_RW);      
 1b0:	a9 9a       	sbi	0x15, 1	; 21
    PORTC |= _BV(LCD_EN);     
 1b2:	aa 9a       	sbi	0x15, 2	; 21
    while(PINA & _BV(busy)); //忙等待
 1b4:	cf 99       	sbic	0x19, 7	; 25
 1b6:	fe cf       	rjmp	.-4      	; 0x1b4
    PORTC &=~_BV(LCD_EN);     
 1b8:	aa 98       	cbi	0x15, 2	; 21
    DDRA|=_BV(busy);          //设置busy口为输出 
 1ba:	d7 9a       	sbi	0x1a, 7	; 26
 1bc:	08 95       	ret

000001be <lcd_wcmd>:
 1be:	cf 93       	push	r28
 1c0:	c8 2f       	mov	r28, r24
 1c2:	61 11       	cpse	r22, r1
 1c4:	f3 df       	rcall	.-26     	; 0x1ac
 1c6:	a8 98       	cbi	0x15, 0	; 21
 1c8:	a9 98       	cbi	0x15, 1	; 21
 1ca:	aa 98       	cbi	0x15, 2	; 21
 1cc:	cb bb       	out	0x1b, r28	; 27
 1ce:	aa 9a       	sbi	0x15, 2	; 21
 1d0:	00 00       	nop
 1d2:	00 00       	nop
 1d4:	aa 98       	cbi	0x15, 2	; 21
 1d6:	cf 91       	pop	r28
 1d8:	08 95       	ret

000001da <lcd_init>:
 1da:	8f ef       	ldi	r24, 0xFF	; 255
 1dc:	8a bb       	out	0x1a, r24	; 26
 1de:	8b bb       	out	0x1b, r24	; 27
 1e0:	84 bb       	out	0x14, r24	; 20
 1e2:	85 bb       	out	0x15, r24	; 21
 1e4:	8e e1       	ldi	r24, 0x1E	; 30
 1e6:	90 e0       	ldi	r25, 0x00	; 0
 1e8:	37 df       	rcall	.-402    	; 0x58
 1ea:	60 e0       	ldi	r22, 0x00	; 0
 1ec:	88 e3       	ldi	r24, 0x38	; 56
 1ee:	e7 df       	rcall	.-50     	; 0x1be
 1f0:	85 e0       	ldi	r24, 0x05	; 5
 1f2:	90 e0       	ldi	r25, 0x00	; 0
 1f4:	31 df       	rcall	.-414    	; 0x58
 1f6:	60 e0       	ldi	r22, 0x00	; 0
 1f8:	88 e3       	ldi	r24, 0x38	; 56
 1fa:	e1 df       	rcall	.-62     	; 0x1be
 1fc:	85 e0       	ldi	r24, 0x05	; 5
 1fe:	90 e0       	ldi	r25, 0x00	; 0
 200:	2b df       	rcall	.-426    	; 0x58
 202:	60 e0       	ldi	r22, 0x00	; 0
 204:	88 e3       	ldi	r24, 0x38	; 56
 206:	db df       	rcall	.-74     	; 0x1be
 208:	85 e0       	ldi	r24, 0x05	; 5
 20a:	90 e0       	ldi	r25, 0x00	; 0
 20c:	25 df       	rcall	.-438    	; 0x58
 20e:	61 e0       	ldi	r22, 0x01	; 1
 210:	8c e0       	ldi	r24, 0x0C	; 12
 212:	d5 df       	rcall	.-86     	; 0x1be
 214:	85 e0       	ldi	r24, 0x05	; 5
 216:	90 e0       	ldi	r25, 0x00	; 0
 218:	1f df       	rcall	.-450    	; 0x58
 21a:	61 e0       	ldi	r22, 0x01	; 1
 21c:	86 e0       	ldi	r24, 0x06	; 6
 21e:	cf df       	rcall	.-98     	; 0x1be
 220:	85 e0       	ldi	r24, 0x05	; 5
 222:	90 e0       	ldi	r25, 0x00	; 0
 224:	19 df       	rcall	.-462    	; 0x58
 226:	61 e0       	ldi	r22, 0x01	; 1
 228:	86 2f       	mov	r24, r22
 22a:	c9 df       	rcall	.-110    	; 0x1be
 22c:	85 e0       	ldi	r24, 0x05	; 5
 22e:	90 e0       	ldi	r25, 0x00	; 0
 230:	13 df       	rcall	.-474    	; 0x58
 232:	08 95       	ret

00000234 <lcd_wdat>:
 234:	1f 93       	push	r17
 236:	18 2f       	mov	r17, r24
 238:	b9 df       	rcall	.-142    	; 0x1ac
 23a:	a8 9a       	sbi	0x15, 0	; 21
 23c:	a9 98       	cbi	0x15, 1	; 21
 23e:	aa 98       	cbi	0x15, 2	; 21
 240:	1b bb       	out	0x1b, r17	; 27
 242:	aa 9a       	sbi	0x15, 2	; 21
 244:	00 00       	nop
 246:	00 00       	nop
 248:	aa 98       	cbi	0x15, 2	; 21
 24a:	1f 91       	pop	r17
 24c:	08 95       	ret

0000024e <lcd_pos>:
}

/*************************************************************/
/*                                                           */
/*  设定显示位置                                             */
/*                                                           */
/*************************************************************/
void lcd_pos(uchar pos)
{                          
  lcd_wcmd(pos|0x80,1);  //数据指针=80+地址变量
 24e:	61 e0       	ldi	r22, 0x01	; 1
 250:	80 68       	ori	r24, 0x80	; 128
 252:	b5 df       	rcall	.-150    	; 0x1be
 254:	08 95       	ret

00000256 <writetab>:
}

/*******************************************************************/
/*                                                                 */
/*自定义字符写入CGRAM                                              */
/*                                                                 */
/*******************************************************************/
void  writetab(void)  
{  
 256:	0f 93       	push	r16
 258:	1f 93       	push	r17
 25a:	cf 93       	push	r28
    uchar i;
    lcd_wcmd(0x40,1);            //写CGRAM
 25c:	61 e0       	ldi	r22, 0x01	; 1
 25e:	80 e4       	ldi	r24, 0x40	; 64
 260:	ae df       	rcall	.-164    	; 0x1be
 262:	04 eb       	ldi	r16, 0xB4	; 180
 264:	10 e0       	ldi	r17, 0x00	; 0
 266:	c7 e0       	ldi	r28, 0x07	; 7
    for (i = 0; i< 8; i++)       
    lcd_wdat(mytab[i]);        
 268:	f8 01       	movw	r30, r16
 26a:	81 91       	ld	r24, Z+
 26c:	8f 01       	movw	r16, r30
 26e:	e2 df       	rcall	.-60     	; 0x234
 270:	c1 50       	subi	r28, 0x01	; 1
 272:	c7 ff       	sbrs	r28, 7
 274:	f9 cf       	rjmp	.-14     	; 0x268
 276:	cf 91       	pop	r28
 278:	1f 91       	pop	r17
 27a:	0f 91       	pop	r16
 27c:	08 95       	ret

0000027e <Ok_Menu>:
}

/*******************************************************************/
/*                                                                 */
/* DS18B20 OK 显示菜单                                             */
/*                                                                 */
/*******************************************************************/
void  Ok_Menu (void)
{ 
 27e:	cf 93       	push	r28
    uchar  m;
    lcd_init();                //初始化LCD
 280:	ac df       	rcall	.-168    	; 0x1da
            
    lcd_pos(0);                //设置显示位置为第一行的第1个字符
 282:	80 e0       	ldi	r24, 0x00	; 0
 284:	e4 df       	rcall	.-56     	; 0x24e
     m = 0;
 286:	c0 e0       	ldi	r28, 0x00	; 0
    while(cdis1[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis1[m]);
       m++;
 288:	80 91 93 00 	lds	r24, 0x0093
 28c:	88 23       	and	r24, r24
 28e:	69 f0       	breq	.+26     	; 0x2aa
 290:	ec 2f       	mov	r30, r28
 292:	ff 27       	eor	r31, r31
 294:	ed 56       	subi	r30, 0x6D	; 109
 296:	ff 4f       	sbci	r31, 0xFF	; 255
 298:	80 81       	ld	r24, Z
 29a:	cc df       	rcall	.-104    	; 0x234
 29c:	cf 5f       	subi	r28, 0xFF	; 255

⌨️ 快捷键说明

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