📄 ds18b20_1602.lst
字号:
(0087)
(0088) void CurReturn(void)
(0089) {
(0090) WriteCmd(CUR_RET);
_CurReturn:
0170 E003 LDI R16,3
0171 DFCF RCALL _WriteCmd
0172 9508 RET
_SetInputMode:
setData --> R20
textMove --> R22
curDir --> R10
0173 940E03BD CALL push_gset3
0175 2F62 MOV R22,R18
0176 2EA0 MOV R10,R16
(0091) }
(0092)
(0093) void SetInputMode(byte curDir, byte textMove)
(0094) {
(0095) byte setData = 0x04;
0177 E044 LDI R20,4
(0096) if (curDir == 1) //光标右移
0178 2D8A MOV R24,R10
0179 3081 CPI R24,1
017A F411 BNE 0x017D
(0097) setData |= 0x02;
017B 6042 ORI R20,2
017C C001 RJMP 0x017E
(0098) else
(0099) setData &= ~0x02;
017D 7F4D ANDI R20,0xFD
(0100)
(0101) if (textMove == 1) //文字移动
017E 3061 CPI R22,1
017F F411 BNE 0x0182
(0102) setData |= 0x01;
0180 6041 ORI R20,1
0181 C001 RJMP 0x0183
(0103) else //文字不移动
(0104) setData &= ~0x01;
0182 7F4E ANDI R20,0xFE
(0105) WriteCmd(setData);
0183 2F04 MOV R16,R20
0184 DFBC RCALL _WriteCmd
0185 940E03B3 CALL pop_gset3
0187 9508 RET
_SetDisMode:
setData --> R20
curFlash --> Y+6
curDis --> R22
allDis --> R10
0188 940E03BD CALL push_gset3
018A 2F62 MOV R22,R18
018B 2EA0 MOV R10,R16
(0106) }
(0107)
(0108) void SetDisMode(byte allDis, byte curDis, byte curFlash)
(0109) {
(0110) byte setData = 0x08;
018C E048 LDI R20,0x8
(0111)
(0112) if (allDis == 1) //所有都显示
018D 2D8A MOV R24,R10
018E 3081 CPI R24,1
018F F411 BNE 0x0192
(0113) setData |= 0x04;
0190 6044 ORI R20,4
0191 C001 RJMP 0x0193
(0114) else //都不显示
(0115) setData &= ~0x04;
0192 7F4B ANDI R20,0xFB
(0116)
(0117) if (curDis == 1) //光标显示
0193 3061 CPI R22,1
0194 F411 BNE 0x0197
(0118) setData |= 0x02;
0195 6042 ORI R20,2
0196 C001 RJMP 0x0198
(0119) else //光标不显示
(0120) setData &= ~0x02;
0197 7F4D ANDI R20,0xFD
(0121)
(0122) if (curFlash == 1) //光标闪烁
0198 818E LDD R24,Y+6
0199 3081 CPI R24,1
019A F411 BNE 0x019D
(0123) setData |= 0x01;
019B 6041 ORI R20,1
019C C001 RJMP 0x019E
(0124) else ///光标不闪烁
(0125) setData &= ~0x01;
019D 7F4E ANDI R20,0xFE
(0126) WriteCmd(setData);
019E 2F04 MOV R16,R20
019F DFA1 RCALL _WriteCmd
01A0 940E03B3 CALL pop_gset3
01A2 9508 RET
_SetFunction:
setData --> R20
fDis --> Y+6
lineDis --> R22
numBus --> R10
01A3 940E03BD CALL push_gset3
01A5 2F62 MOV R22,R18
01A6 2EA0 MOV R10,R16
(0127) }
(0128) /*
(0129) void SetShift(byte cMove, byte cDir)
(0130) {
(0131) byte setData = 0x10;
(0132)
(0133) if (cMove == 1) //移动文字
(0134) setData |= 0x08;
(0135) else //移动光标
(0136) setData &= ~0x08;
(0137)
(0138) if (cDir == 1) //右移
(0139) setData |= 0x04;
(0140) else //左移
(0141) setData &= ~0x04;
(0142) WriteCmd(setData);
(0143) }
(0144) */
(0145) void SetFunction(byte numBus, byte lineDis, byte fDis)
(0146) {
(0147) byte setData = 0x20;
01A7 E240 LDI R20,0x20
(0148)
(0149) if (numBus == 1) //4位总线
01A8 2D8A MOV R24,R10
01A9 3081 CPI R24,1
01AA F411 BNE 0x01AD
(0150) setData |= 0x10;
01AB 6140 ORI R20,0x10
01AC C001 RJMP 0x01AE
(0151) else //8位总线
(0152) setData &= ~0x10;
01AD 7E4F ANDI R20,0xEF
(0153)
(0154) if (lineDis == 1) //双行显示
01AE 3061 CPI R22,1
01AF F411 BNE 0x01B2
(0155) setData |= 0x08;
01B0 6048 ORI R20,0x8
01B1 C001 RJMP 0x01B3
(0156) else //单行显示
(0157) setData &= ~0x08;
01B2 7F47 ANDI R20,0xF7
(0158)
(0159) if (fDis == 1) //5*10点阵
01B3 818E LDD R24,Y+6
01B4 3081 CPI R24,1
01B5 F411 BNE 0x01B8
(0160) setData |= 0x04;
01B6 6044 ORI R20,4
01B7 C001 RJMP 0x01B9
(0161) else ///5*7点阵
(0162) setData &= ~0x04;
01B8 7F4B ANDI R20,0xFB
(0163) WriteCmd(setData);
01B9 2F04 MOV R16,R20
01BA DF86 RCALL _WriteCmd
01BB 940E03B3 CALL pop_gset3
01BD 9508 RET
_SetDisAddr:
ucol --> R20
urow --> R22
01BE 940E03BF CALL push_gset2
01C0 2F42 MOV R20,R18
01C1 2F60 MOV R22,R16
(0164) }
(0165) /*
(0166) void SetCGRAMAddr(byte ramAddr)
(0167) {
(0168) byte setData = 0x40;
(0169) setData |= (ramAddr &0x3f);
(0170) WriteCmd(setData);
(0171) }
(0172) */
(0173) void SetDisAddr(byte urow, byte ucol)
(0174) {
(0175) if (ucol >= 20)
01C2 3144 CPI R20,0x14
01C3 F008 BCS 0x01C5
(0176) ucol= 20;
01C4 E144 LDI R20,0x14
(0177) if (urow == 0)
01C5 2366 TST R22
01C6 F421 BNE 0x01CB
(0178) WriteCmd( 0x80+ucol);
01C7 2F04 MOV R16,R20
01C8 5800 SUBI R16,0x80
01C9 DF77 RCALL _WriteCmd
01CA C003 RJMP 0x01CE
(0179) else
(0180) WriteCmd( 0xc0+ucol);
01CB 2F04 MOV R16,R20
01CC 5400 SUBI R16,0x40
01CD DF73 RCALL _WriteCmd
01CE 940E03B0 CALL pop_gset2
01D0 9508 RET
_DisCGRAM:
ch --> Y+4
ucol --> R22
urow --> R20
01D1 940E03BF CALL push_gset2
01D3 2F62 MOV R22,R18
01D4 2F40 MOV R20,R16
(0181) }
(0182)
(0183) void DisCGRAM(byte urow, byte ucol, char ch)
(0184) {
(0185) SetDisAddr(urow, ucol);
01D5 2F26 MOV R18,R22
01D6 2F04 MOV R16,R20
01D7 DFE6 RCALL _SetDisAddr
(0186) WriteData(ch);
01D8 810C LDD R16,Y+4
01D9 DF73 RCALL _WriteData
01DA 940E03B0 CALL pop_gset2
01DC 9508 RET
_DisString:
i --> R20
str --> R22
ucol --> R12
urow --> R10
01DD 940E03BB CALL push_gset4
01DF 2EC2 MOV R12,R18
01E0 2EA0 MOV R10,R16
01E1 8568 LDD R22,Y+8
01E2 8579 LDD R23,Y+9
(0187) }
(0188) /*
(0189) void DisChar(byte row, byte line, char ch)
(0190) {
(0191) SetDisAddr(row, line);
(0192) WriteData(ch);
(0193) }
(0194) */
(0195) void DisString(byte urow, byte ucol, char *str)
(0196) {
(0197) byte i = 0;
01E3 2744 CLR R20
(0198)
(0199) SetDisAddr(urow, ucol);
01E4 2D2C MOV R18,R12
01E5 2D0A MOV R16,R10
01E6 DFD7 RCALL _SetDisAddr
01E7 C007 RJMP 0x01EF
(0200) while (i < strlen(str))
(0201) {
(0202) WriteData(*(str + i));
01E8 2FE4 MOV R30,R20
01E9 27FF CLR R31
01EA 0FE6 ADD R30,R22
01EB 1FF7 ADC R31,R23
01EC 8100 LDD R16,Z+0
01ED DF5F RCALL _WriteData
(0203) i++;
01EE 9543 INC R20
01EF 018B MOVW R16,R22
01F0 940E038C CALL _strlen
01F2 2E24 MOV R2,R20
01F3 2433 CLR R3
01F4 1620 CP R2,R16
01F5 0631 CPC R3,R17
01F6 F388 BCS 0x01E8
01F7 940E03B6 CALL pop_gset4
01F9 9508 RET
_DisNum:
num --> Y+4
ucol --> R22
urow --> R20
01FA 940E03BF CALL push_gset2
01FC 2F62 MOV R22,R18
01FD 2F40 MOV R20,R16
(0204) }
(0205) }
(0206)
(0207)
(0208) void DisNum(byte urow, byte ucol, byte num)
(0209) {
(0210) SetDisAddr(urow, ucol);
01FE 2F26 MOV R18,R22
01FF 2F04 MOV R16,R20
0200 DFBD RCALL _SetDisAddr
(0211) WriteData('0'+ num);
0201 810C LDD R16,Y+4
0202 5D00 SUBI R16,0xD0
0203 DF49 RCALL _WriteData
0204 940E03B0 CALL pop_gset2
0206 9508 RET
_DisplayTime:
second --> Y+6
minute --> R20
hour --> R22
0207 940E03BF CALL push_gset2
0209 2F42 MOV R20,R18
020A 2F60 MOV R22,R16
020B 9722 SBIW R28,2
(0212) }
(0213)
(0214)
(0215) void DisplayTime(byte hour,byte minute,byte second)
(0216) {
(0217) DisNum(1, 3, hour/16);
020C 2F86 MOV R24,R22
020D 9582 SWAP R24
020E 708F ANDI R24,0xF
020F 8388 STD Y+0,R24
0210 E023 LDI R18,3
0211 E001 LDI R16,1
0212 DFE7 RCALL _DisNum
(0218) DisNum(1, 4, hour%16);
0213 E110 LDI R17,0x10
0214 2F06 MOV R16,R22
0215 940E0398 CALL mod8u
0217 8308 STD Y+0,R16
0218 E024 LDI R18,4
0219 E001 LDI R16,1
021A DFDF RCALL _DisNum
(0219) DisString(1, 5,":");
021B E880 LDI R24,0x80
021C E090 LDI R25,0
021D 8399 STD Y+1,R25
021E 8388 STD Y+0,R24
021F E025 LDI R18,5
0220 E001 LDI R16,1
0221 DFBB RCALL _DisString
(0220) DisNum(1, 6, minute/16);
0222 2F84 MOV R24,R20
0223 9582 SWAP R24
0224 708F ANDI R24,0xF
0225 8388 STD Y+0,R24
0226 E026 LDI R18,6
0227 E001 LDI R16,1
0228 DFD1 RCALL _DisNum
(0221) DisNum(1, 7, minute%16);
0229 E110 LDI R17,0x10
022A 2F04 MOV R16,R20
022B 940E0398 CALL mod8u
022D 8308 STD Y+0,R16
022E E027 LDI R18,7
022F E001 LDI R16,1
0230 DFC9 RCALL _DisNum
(0222) DisString(1, 8,":");
0231 E880 LDI R24,0x80
0232 E090 LDI R25,0
0233 8399 STD Y+1,R25
0234 8388 STD Y+0,R24
0235 E028 LDI R18,0x8
0236 E001 LDI R16,1
0237 DFA5 RCALL _DisString
(0223)
(0224) DisNum(1, 10, second & 0x0f);
0238 818E LDD R24,Y+6
0239 708F ANDI R24,0xF
023A 8388 STD Y+0,R24
023B E02A LDI R18,0xA
023C E001 LDI R16,1
023D DFBC RCALL _DisNum
(0225) DisNum(1, 9, (second >> 4) &0x07);
023E 818E LDD R24,Y+6
023F 9582 SWAP R24
0240 708F ANDI R24,0xF
0241 7087 ANDI R24,7
0242 8388 STD Y+0,R24
0243 E029 LDI R18,0x9
0244 E001 LDI R16,1
0245 DFB4 RCALL _DisNum
0246 9622 ADIW R28,2
0247 940E03B0 CALL pop_gset2
0249 9508 RET
_LCD_Dis_Float:
tempdata --> Y+1
i --> R20
bvalue --> Y+11
ucol --> R22
urow --> R10
024A 940E03BD CALL push_gset3
024C 2F62 MOV R22,R18
024D 2EA0 MOV R10,R16
024E 9725 SBIW R28,5
(0226) }
(0227)
(0228)
(0229) void LCD_Dis_Float(byte urow,byte ucol,byte bvalue)
(0230) {
(0231) byte i;
(0232) byte tempdata[4];
(0233)
(0234) tempdata[0] = (bvalue)/100;
024F E614 LDI R17,0x64
0250 850B LDD R16,Y+11
0251 940E039A CALL div8u
0253 8309 STD Y+1,R16
(0235) if(tempdata[0]== 0) tempdata[0]= ' '-'0';
0254 2300 TST R16
0255 F411 BNE 0x0258
0256 EF80 LDI R24,0xF0
0257 8389 STD Y+1,R24
(0236) tempdata[1] = (bvalue)%100/10;
0258 E614 LDI R17,0x64
0259 850B LDD R16,Y+11
025A 940E0398 CALL mod8u
025C E01A LDI R17,0xA
025D 940E039A CALL div8u
025F 830A STD Y+2,R16
(0237) if((tempdata[0] == 0x00)&&(tempdata[1] == 0x00))
0260 8029 LDD R2,Y+1
0261 2022 TST R2
0262 F421 BNE 0x0267
0263 2300 TST R16
0264 F411 BNE 0x0267
(0238) {
(0239) tempdata[1] = ' '-'0';
0265 EF80 LDI R24,0xF0
0266 838A STD Y+2,R24
(0240) }
(0241) tempdata[2] = (bvalue)%10;
0267 E01A LDI R17,0xA
0268 850B LDD R16,Y+11
0269 940E0398 CALL mod8u
026B 830B STD Y+3,R16
(0242) tempdata[3] = '.'-'0';
026C EF8E LDI R24,0xFE
026D 838C STD Y+4,R24
(0243)
(0244) for(i = 0;i<4;i++)
026E 2744 CLR R20
026F C00D RJMP 0x027D
(0245) DisNum(urow,ucol+i,tempdata[i]);
0270 01CE MOVW R24,R28
0271 9601 ADIW R24,1
0272 2FE4 MOV R30,R20
0273 27FF CLR R31
0274 0FE8 ADD R30,R24
0275 1FF9 ADC R31,R25
0276 8020 LDD R2,Z+0
0277 8228 STD Y+0,R2
0278 2F26 MOV R18,R22
0279 0F24 ADD R18,R20
027A 2D0A MOV R16,R10
027B DF7E RCALL _DisNum
027C 9543 INC R20
027D 3044 CPI R20,4
027E F388 BCS 0x0270
027F 9625 ADIW R28,5
0280 940E03B3 CALL pop_gset3
0282 9508 RET
_LCD_Dis_Temperature:
rValue --> R10
ucol --> R22
urow --> R20
0283 940E03BD CALL push_gset3
0285 2F62 MOV R22,R18
0286 2F40 MOV R20,R16
0287 9722 SBIW R28,2
0288 84A8 LDD R10,Y+8
0289 84B9 LDD R11,Y+9
(0246) }
(0247)
(0248) void LCD_Dis_Temperature(byte urow,byte ucol, unsigned int rValue) //温度数据转换和显示函数
(0249) {
(0250) ClearLcd();
028A DEE2 RCALL _ClearLcd
(0251) DisString(0,1,"Temperature is:");
028B E780 LDI R24,0x70
028C E090 LDI R25,0
028D 8399 STD Y+1,R25
028E 8388 STD Y+0,R24
028F E021 LDI R18,1
0290 2700 CLR R16
0291 DF4B RCALL _DisString
(0252) if((rValue &0xf800) == 0xf800)
0292 01C5 MOVW R24,R10
0293 7080 ANDI R24,0
0294 7F98 ANDI R25,0xF8
0295 3080 CPI R24,0
0296 EFE8 LDI R30,0xF8
0297 079E CPC R25,R30
0298 F4C1 BNE 0x02B1
(0253) {
(0254) DisString(urow,ucol,"-");
0299 E68E LDI R24,0x6E
029A E090 LDI R25,0
029B 8399 STD Y+1,R25
029C 8388 STD Y+0,R24
029D 2F26 MOV R18,R22
029E 2F04 MOV R16,R20
029F DF3D RCALL _DisString
(0255) LCD_Dis_Float(urow,ucol+1,((byte)(~((rValue>>3)-1)))>>1);
02A0 01C5 MOVW R24,R10
02A1 9596 LSR R25
02A2 9587 ROR R24
02A3 9596 LSR R25
02A4 9587 ROR R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -