PDA

View Full Version : giúp e lập trình cho DS1620


quyen1688
25-09-2009, 05:47 PM
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

thanhquyet
17-11-2009, 10:25 PM
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");
}
}

chomchom
24-04-2010, 05:46 PM
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");
}
}

mình cũng đang phải làm bài tập lớn đề do nhiet do bang DS1620 hien thi len LCD này. các bác giúp đỡ với, mình là lính mới nên chưa biết gì nhiều. nếu có thể các bác gửi cho mình bản vẽ mạch để tham khao được chứ. địa chỉ mail của mình là: buihuutungktqs@yahoo.com
thanks các bác.