![]() |
|
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 |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Jun 2008
Nơi Cư Ngụ: Lê Duẩn - Hà Nội
Bài gửi: 23
: |
Đề tài này có vẻ ít người làm nhẩy!..
Cuối cùng thì cũng đọc được nhiệt độ, mọi người ai biết giúp tôi thiết đặt giới hạn nhiệt độ cao, thấp với(write TH, TL)! Đây là phần code: Code:
xxxxxxxxxxxxxxxxx Interface PIC6F877-DS1620xxxxxxxxxxxxxxxxxxx //*----------------------------------------------------------------------------- //* Tac gia : Pham Thanh Cong //* Ngay viet : 18/06/2008 //* Ngay hoan thanh : 22/07/2008 //* Phan cung : PIC16F877, LCD 2x16[5x7], DS1620 //* Chuong trinh : do nhiet do dung DS1620 hien thi tren LCD LMB162A //*===========================================================================*/ // Khoi tien xu ly #include <16F877A.h> #include <stdlib.h> #include <string.h> #fuses XT,NOWDT,NOPROTECT,NOLVP // dat cau hinh cho PIC #use delay(clock=4000000) #use fast_io(A) // su dung cung voi lenh set_tris #use fast_io(B) #use fast_io(D) #byte PORTB = 0x06 #define LCD PORTB #bit RA2 = 0x05.2 #bit RA1 = 0x05.1 #bit RA0 = 0x05.0 #define RS RA0 // chan chon thanh ghi =0 lenh hay =1 du lieu #define RW RA1 // =1 doc hay =0 ghi #define E RA2 // H-to-L de cho fep LCD #bit RD1 = 0x08.1 // chan data cua DS1620 #bit RD2 = 0x08.2 // chan dong ho #bit RD3 = 0x08.3 // #define DQ RD1 // =0 output, =1 input #define CLK RD2 #define RST RD3 // khai bao cac ham su dung trong chuong trinh void LCD_init(void); void comandwrt(void); void datawrt(void); void LCD_gotoxy(byte x, byte y); void DS1620_InitTemp(void); unsigned int8 DS1620_GetTemp(void); void DS1620_Write(unsigned char Data); unsigned int8 DS1620_Read(void); void display(int8 temp); void main(void); // Cac bien toan cuc const unsigned char dongchu[]="Nhiet do:"; // Hang so toan cuc int i = 0, sign = 0; // Bien toan cuc //xxxxxxxxxxxxxxxxxxxxxxxxxxx CHUONG TRINH LCD xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // Khoi tao cho LCD void LCD_init() { delay_ms(50); // tre it nhat 30ms LCD = 0x38; // Hai hang, ma tran diem 5*8, 8 bit interface comandwrt(); delay_us(50); // tre it nhat 39us LCD = 0x0C; // bat hien thi, tat con tro va tat nhap nhay comandwrt(); delay_us(50); // tre it nhat 39us LCD = 0x01; // xoa man hinh comandwrt(); delay_ms(3); // tre it nhat 1.53ms LCD = 0x06; // che do tang con tro sau khi viet 1 ki tu comandwrt(); // va chu khong chay delay_ms(1); } // Ham gui lenh ra LCD void comandwrt(void) { RS = 0; RW = 0; E = 1; E = 0; delay_ms(1); } // Ham gui du lieu ra LCD void datawrt(void) { RS = 1; RW = 0; E = 1; E = 0; delay_ms(1); } // Ham di chuyen con tro toi vi tri xy(cot,hang) tren man hinh LCD void LCD_gotoxy(int x, int y) { int address; switch(y) { case 1: address=0; address+=x-1; LCD = (0x80 + address); // dong 1, cot1: 80h break; case 2: address=0; address+=x-1; LCD = (0xC0 + address); // dong 2, cot1: C0h break; default : break; } } //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(0x00);// xoa thanh ghi config, thiet lap chuyen doi lien tuc 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) { unsigned char i; 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 dl } } 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, bit thu 9 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) { LCD_gotoxy(5,2); comandwrt(); LCD = '-'; datawrt(); Data = ~(temp - 1) / 2; } else { LCD_gotoxy(5,2); comandwrt(); LCD = '+'; datawrt(); Data = temp / 2; } itoa(Data,10,string); leng = strlen(string); if (bit_test(temp,0)) { for(i=0;i<leng;i++) { LCD = string[i]; // xuat nhiet do ra o dang ki tu so datawrt(); } LCD = '.'; datawrt(); LCD = '5'; datawrt(); LCD = ' '; datawrt(); LCD = 'd'; datawrt(); LCD = 'o'; datawrt(); LCD = 'C'; datawrt(); } else { for(i=0;i<leng;i++) { LCD = string[i]; // datawrt(); } LCD = '.'; datawrt(); LCD = '0'; datawrt(); LCD = ' '; datawrt(); LCD = 'd'; datawrt(); LCD = 'o'; datawrt(); LCD = 'C'; datawrt(); } } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Ham main xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ void main(void) { int8 data; set_tris_B(0); // cong ra set_tris_A(0); // cong ra LCD_init(); // dat che do hoat dong cho LCD delay_us(2); DS1620_InitTemp(); delay_ms(2); LCD_gotoxy(5,1); // Vi tri cot 5, hang 1 comandwrt(); for (i=0;i<=8;i++) { LCD = dongchu[i]; // xuat chu ra LCD datawrt(); } while(1) { data = DS1620_GetTemp(); // lay du lieu display(data); } }
__________________
Sống ở trên đời cần phải có một tấm lòng để gió cuốn đi! xxxxxxxxxxxxxxxxxxx Trịnh Công Sơn xxxxxxxxxxxxxxxxxxx thay đổi nội dung bởi: namqn, 26-07-2008 lúc 02:08 AM. Lý do: định dạng code |
![]() |
![]() |
|
|