第二次优化代码,增加闹钟、蜂鸣器功能。

This commit is contained in:
Andy0613
2026-07-07 09:12:08 +08:00
parent 971abf1cd8
commit 6c23af74d4
13 changed files with 4896 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
#include "ds18b20.h"
void DS18B20_Reset(void)
{
uchar i;
DS18B20_DQ = 0;
for(i=0; i<200; i++);
DS18B20_DQ = 1;
for(i=0; i<100; i++);
}
void DS18B20_WriteByte(uchar dat)
{
uchar i, j;
for(i=0; i<8; i++)
{
DS18B20_DQ = 0;
_nop_();
if(dat & 0x01)
DS18B20_DQ = 1;
else
DS18B20_DQ = 0;
for(j=0; j<30; j++);
DS18B20_DQ = 1;
_nop_();
_nop_();
dat >>= 1;
}
}
uchar DS18B20_ReadByte(void)
{
uchar i, j, dat = 0;
for(i=0; i<8; i++)
{
dat >>= 1;
DS18B20_DQ = 0;
_nop_();
DS18B20_DQ = 1;
_nop_();
_nop_();
if(DS18B20_DQ)
dat |= 0x80;
for(j=0; j<20; j++);
}
return dat;
}
void DS18B20_StartConvert(void)
{
DS18B20_Reset();
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0x44);
}
void DS18B20_SetResolution(uchar res)
{
// res: 0x1F=9bit, 0x3F=10bit, 0x5F=11bit, 0x7F=12bit
DS18B20_Reset();
DS18B20_WriteByte(0xCC); // Skip ROM
DS18B20_WriteByte(0x4E); // Write Scratchpad
DS18B20_WriteByte(0x00); // TH (user byte 1)
DS18B20_WriteByte(0x00); // TL (user byte 2)
DS18B20_WriteByte(res); // Configuration register
DS18B20_Reset();
DS18B20_WriteByte(0xCC); // Skip ROM
DS18B20_WriteByte(0x48); // Copy Scratchpad to EEPROM
}
bit DS18B20_GetTemp(int *temp)
{
uchar tempL, tempH;
int raw;
DS18B20_Reset();
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0xBE);
tempL = DS18B20_ReadByte();
tempH = DS18B20_ReadByte();
raw = (tempH << 8) | tempL;
*temp = raw;
return 1;
}