Mình đang cần làm đồ án về báo cháy, sử dụng cảm biến DS18B20 và 8051 hiển thị LCD, trong đó có phần giao tiếp với PC nữa. Mình tìm trên diễn đàng thì thấy có một số mạch dùng con DS18B20 nhưng nối vào chân TX, RX của VĐK, như vậy thì làm sao để giao tiếp với PC nữa., có cách nối nào khác không, mình cần nối 4 con DS18B20 để đo 4 chỗ. Bạn nào có mạch nối 4 con DS18B20 cho mình với, ( mạch đã chạy thực tế) . Nếu có code cho mình xin với , cám ơn nhiều.
Thông báo
Collapse
No announcement yet.
Báo cháy sử dụng cảm biến DS18B20 và 8051 hiển thị LCD
Collapse
X
-
Nguyên văn bởi Vinhanboy Xem bài viếtMình tham khảo thì vẽ mạch thế này, xin các bạn cho ý kiến.
[ATTACH=CONFIG]41059[/ATTACH]
Comment
-
Cho em hỏi với đoạn code này
Code://--------------------------------------- // DS1820 driver // www.GetMicro.com //--------------------------------------- #include<reg8252.h> #include<stdio.h> sbit DQ = P2^0; // connect with DS1820 Data pin //--------------------------------------- // Delay mS function //--------------------------------------- void DelayMs(unsigned int count) { // mSec Delay 11.0592 Mhz unsigned int i; // Keil v7.5a while(count) { i = 115; while(i>0) i--; count--; } } //---------------------------------------- // DELAY at 11.0592MHz crystal. // Calling the routine takes about 22us, and then // each count takes another 17us. // test with KEIL C51 V7.5 //---------------------------------------- void DelayUs(int us) { int i; for (i=0; i<us; i++); } //---------------------------------------- // Reset DS1820 //---------------------------------------- bit ResetDS1820(void) { bit presence; DQ = 0; //pull DQ line low DelayUs(29); // leave it low for about 490us DQ = 1; // allow line to return high DelayUs(3); // wait for presence 55 uS presence = DQ; // get presence signal DelayUs(25); // wait for end of timeslot 316 uS return(presence); // presence signal returned } // 0=presence, 1 = no part //----------------------------------------- // Read one bit from DS1820 //----------------------------------------- bit ReadBit(void) { unsigned char i=0; DQ = 0; // pull DQ low to start timeslot DQ=1; for (i=0; i<3; i++); // delay 17 us from start of timeslot return(DQ); // return value of DQ line } //----------------------------------------- // Write one bit to DS1820 //----------------------------------------- void WriteBit(bit Dbit) { unsigned char i=0; DQ=0; DQ = Dbit ? 1:0; DelayUs(5); // delay about 39 uS DQ = 1; } //----------------------------------------- // Read 1 byte from DS1820 //----------------------------------------- unsigned char ReadByte(void) { unsigned char i; unsigned char Din = 0; for (i=0;i<8;i++) { Din|=ReadBit()? 0x01<<i:Din; DelayUs(6); } return(Din); } //----------------------------------------- // Write 1 byte //----------------------------------------- void WriteByte(unsigned char Dout) { unsigned char i; for (i=0; i<8; i++) // writes byte, one bit at a time { WriteBit((bit)(Dout & 0x1)); // write bit in temp into Dout = Dout >> 1; } DelayUs(5); } //----------------------------------------- // Read temperature //----------------------------------------- void ReadTemp(unsigned char * buff) { unsigned char n; EA=0; // disable all interrupt ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0x44); // perform temperature conversion while (ReadByte()==0xff); // wait for conversion complete ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0xbe); // read the result for (n=0; n<9; n++) // read 9 bytes but, use only one byte { buff[n]=ReadByte(); // read DS1820 } EA=1; }
Code:ReadTemp(&MyTemp[0]);
Comment
-
Nguyên văn bởi Vinhanboy Xem bài viếtAnh có chương trình đọc dữ liệu từ DS18B20 hiển thị trên LCD ko ạ, cho em với, em tìm hoài ko thấy. Nếu viết bằng C thì tốt quá.
Comment
-
Các bác cho em ý kiến với. LCD hiển thị lung tung hêt cả lên.
Nhiệt độ từ 20 đến 23 thì LCD hiển thị đúng. Từ 24 độ thì nó LCD hiển thi X88 cho đến 31 độ là X95, đến 32 độ thì lại hiển thị đúng. Lên 40 độ thì nó hiển thị X88 lại. Các bác giúp em với, em sắp nộp đồ án rồi, em tiêu mất.
Code:void ReadTemp(void) { ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0x44); // perform temperatur conversion while (ReadByte()==0xff); // wait for conversion complete ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0xbe); // read the result readdata[0]=ReadByte(); readdata[1]=ReadByte(); }
Code:void HienThi(void) { unsigned int t; t=readdata[1]; t<<=8; t=t|readdata[0]; t>>=4; lcd_data(t/100+48); lcd_data(((t/10)%10)+48); lcd_data(t%10+48); }
Code:void lcd_data(unsigned char c) //CT con doc du lieu tu LCD { RS=1; RW=0; lcd_PORT=c; EN=1; EN=0; delay_5ms(); }
Comment
-
Nguyên văn bởi Vinhanboy Xem bài viếtCác bác cho em ý kiến với. LCD hiển thị lung tung hêt cả lên.
Nhiệt độ từ 20 đến 23 thì LCD hiển thị đúng. Từ 24 độ thì nó LCD hiển thi X88 cho đến 31 độ là X95, đến 32 độ thì lại hiển thị đúng. Lên 40 độ thì nó hiển thị X88 lại. Các bác giúp em với, em sắp nộp đồ án rồi, em tiêu mất.
Code:void ReadTemp(void) { ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0x44); // perform temperatur conversion while (ReadByte()==0xff); // wait for conversion complete ResetDS1820(); WriteByte(0xcc); // skip ROM WriteByte(0xbe); // read the result readdata[0]=ReadByte(); readdata[1]=ReadByte(); }
Code:void HienThi(void) { unsigned int t; t=readdata[1]; t<<=8; t=t|readdata[0]; t>>=4; lcd_data(t/100+48); lcd_data(((t/10)%10)+48); lcd_data(t%10+48); }
Code:void lcd_data(unsigned char c) //CT con doc du lieu tu LCD { RS=1; RW=0; lcd_PORT=c; EN=1; EN=0; delay_5ms(); }
Comment
-
Nguyên văn bởi chung1608 Xem bài viếtchú giải thích thuật toán chuyển đổi giá trị nhiệt xem, lưu ý con 18B20 cho ra trực tiếp độ C. Anh giúp em với...
Nhưng mà theo em nghĩ thì khi con DS18B20 đọc dữ liệu thì nó lưu giá trị trong 9 byte, nhưng mà 2 byte đầu thì là nhiệt độ thôi.
Comment
-
Em sửa lại đoạn code thế này
Code:void HienThi_ADC(void) { int thap, cao; unsigned int t; thap = readdata[0]; cao = readdata[1]; thap = thap >> 4; cao = cao << 4; t = thap|cao; lcd_data(t/100+48); lcd_data(((t/10)%10)+48); lcd_data(t%10+48); }
Như vậy thì phần nhiệt độ nguyên sẽ được lưu từ bit 4 đến bit 10, do vậy nên ở cái thấp em sẽ dịch qua phải 4 bit, ở phần cao sẽ dịnh qua trái 4 bit, sau đó OR 2 cái này lại để có giá trị nhiệt độ phần nguyên. láy giá trị này đem xử lý để hiển thị ra LCD. Nhưng có cái lỗi này là từ nhiệt độ 40 đến 47 thì hiển thị sai, còn 48 trở lên đến 55 lại hiển thị đúng, đến 56 lại hiển thị sai, em không biết chỉnh chỗ nào, anh em giúp với, gấp lắm rồi ạLast edited by Vinhanboy; 09-03-2012, 12:34.
Comment
-
Bài viết mới nhất
Collapse
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamCám ơn những lời chúc tốt đẹp của em.
Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.
Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....-
Channel: Tâm tình dân kỹ thuật
hôm nay, 02:00 -
-
Trả lời cho Tiếng Anh cho người Việtbởi nhathung1101Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.
Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.
Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 22:18 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.
Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:51 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.
Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:39 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.
Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:28 -
-
Trả lời cho Tiếng Anh cho người Việtbởi bqvietĐúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
-
Channel: Tâm tình dân kỹ thuật
21-02-2025, 20:26 -
-
Trả lời cho Tiếng Anh cho người Việtbởi mèomướpDạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
-
Channel: Tâm tình dân kỹ thuật
21-02-2025, 12:32 -
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamNhững lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).
Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...-
Channel: Tâm tình dân kỹ thuật
20-02-2025, 21:31 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi bqvietThiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.20-02-2025, 17:22
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.
Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...-
Channel: Tâm tình dân kỹ thuật
20-02-2025, 11:52 -
Comment