![]() |
|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 2
: |
giúp e lập trình cho DS1620
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 |
![]() |
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 4
: |
Trích:
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"); } } |
|
![]() |
![]() |
![]() |
#3 | |
Nhập môn đệ tử
Tham gia ngày: Apr 2010
Bài gửi: 3
: |
![]() Trích:
thanks các bác. |
|
![]() |
![]() |
![]() |
|
|