Trích:
Nguyên văn bởi quyen1688
e đang phải thiết kế bộ đo và khống chế nhiệt độ hiển thị trên LCD,nhiệt độ được khống chế bằng phím ấn và hiển thị trên 3 led xanh,đỏ,vàng.
e đã vẽ xong mạch nguyên lí nhưng ko biết viết code cho con DS1620
vậy mong các pro giúp e
thanks
|
chao ban
ban thu coi chuong trinh nay nhe
tien the cho minh hoi ban mua DS1620 o dau vay?
Hien tai minh cung dang lam do an mon do nhiet do bang DS1620 hien thi len LCD
thanks ban nhieu!
nick cua minh
sandyman862002@yahoo.com
//xxxxxxxxxxxxxxxxxxxxxxxxxxx CHUONG TRINH DS1620 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Khoi tao DS1620
void DS1620_InitTemp(void)
{
RST = 1; // thiet lap che do giao tiep 3-wire.
DS1620_Write(0x0C); // cho phep ghi config
DS1620_Write(0x08);
RST = 0;
RST = 1; // thiet lap che do giao tiep 3-wire
DS1620_Write(0xEE); // bat dau chuyen doi nhiet do
RST = 0;
}
void DS1620_Write(unsigned char Data)
{
set_tris_D(0); // cong D la cong ra
CLK = 1; // tao clock
for (i=1; i<=8; ++i)
{
DQ = (Data & 1); // viet bit thap len DQ
CLK = 0;
CLK = 1; // tao clock
Data = Data >> 1; // dich fai Data di 1 bit
}
}
void DS1620_WriteTHTL(unsigned char Data, int dau)
{
set_tris_D(0); // cong D la cong ra
CLK = 1; // tao clock
for (i=1; i<=8; ++i)
{
DQ = (Data & 1); // viet bit thap len DQ
CLK = 0;
CLK = 1; // tao clock
Data = Data >> 1; // dich fai Data di 1 bit
}
CLK = 1;
if (dau == 1) DQ = 1; // Lay gia tri bit dau, gui not bit9 di
else DQ = 0;
CLK = 0;
}
unsigned int8 DS1620_Read(void)
{
unsigned int8 Data, temp;
set_tris_D(0x02); // Chan DQ = 1 : chan vao, con lai la chan ra
Data = 0;
temp = 1;
CLK = 1;
for (i=1; i<=8; ++i)
{
CLK = 0; // CLK = 0: convert
if (DQ == 1) Data += Temp; //neu DQ = 1, cong don Data
Temp = Temp << 1; // neu DQ = 0, dich trai temp 1bit de chen 0 vao
CLK = 1;
}
CLK = 0;
if (DQ == 1) Sign = 1;// Lay gia tri bit dau
else Sign = 0;
CLK = 1;
return(Data);
}
unsigned int8 DS1620_GetTemp(void)
{
unsigned int8 Data;
RST =1; // thiet lap che do giao tiep 3-wire
DS1620_Write(0xAA); // lenh cho phep doc noi dung thanh ghi nhiet
data = DS1620_Read(); // doc noi dung
RST =0; // ket thuc che do giao tiep 3-wire
return(data);
}
void display(int8 temp)
{
int8 Data, leng;
unsigned char string[3];
if (sign == 1) // Nhiet do am
{
LCD_gotoxy(5,2);
comandwrt();
LCD = '-'; // Hien thi dau -
datawrt();
printf("-");
Data = (~temp + 1) / 2; // neu nhiet do am thi lay ma bu 2
}
else { LCD_gotoxy(5,2); // Nhiet do duong
comandwrt();
LCD = '+'; // Hien thi dau +
datawrt();
printf("+");
Data = temp / 2;
}
itoa(Data,10,string); // Chuyen doi Data thanh ma ASCII vao string
printf("%3s",string);
leng = strlen(string); // Lay chieu dai cua string
if (bit_test(temp,0)) // kiem tra bit0 =1 suy ra nhiet do .5 doC
{
for(i=0;i<leng;i++)
{
LCD = string[i]; // xuat nhiet do ra o dang ki tu so
datawrt();
}
LCD = '.'; // hien thi phan thap phan .5 do C
datawrt();
LCD = '5';
datawrt();
printf(".5");
LCD = 0xDF; // ky tu °C
datawrt();
putc(0xdf);
LCD = 'C';
datawrt();
printf("C\n\r");
}
else // bit0 =0 suy ra nhiet do .0 do C
{
for(i=0;i<leng;i++)
{
LCD = string[i]; // xuat nhiet do ra o dang ki tu so
datawrt();
printf(string[i]);
}
LCD = '.'; // hien thi phan thap phan .0 do C
datawrt();
LCD = '0';
datawrt();
printf(".0");
LCD = 0xDF; // ky tu °C
datawrt();
putc(0xdf);
LCD = 'C';
datawrt();
printf("C\n\r");
}
}