📄 main.lss
字号:
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 + -