欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
好熱呀,沒有溫度計可不行,自己做個溫度計18B20+2051單片機+數碼管(小兒科)
[打印本頁]
作者:
huxiao
時間:
2015-1-24 14:38
標題:
好熱呀,沒有溫度計可不行,自己做個溫度計18B20+2051單片機+數碼管(小兒科)
本帖最后由 huxiao 于 2015-1-24 14:39 編輯
西安這鬼天氣,這幾天真的好熱呀,估計也在30多度
這幾天也沒什么事情干,做個溫度計吧,好壞不說知道有多熱。
很簡單得,18B20+AT89C2051+數碼管
用洞洞板好了,電路不復雜。
這個是我每次用洞洞板前必須要做的工作,用cad先把走線布一下,這樣焊起來就方便多了。
焊接完得正面是這個樣子得:
顯示數字的用前面三個數碼管,最后一個反過來用,可以顯示攝氏度符號。
背面的鍍錫走線是這個垃圾效果:
上電測試溫度顯示:
最后把程序給大家,線路看著程序走,數碼管是共陽的。
#include<reg51.h>
#define leddata P1
sbit led0=P3^7;
sbit led1=P3^0;
sbit led2=P3^1;
sbit DQ=P3^5;
typedef unsigned char byte;
byte i;
unsigned char code tab2[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};//小數部分顯示數據
unsigned char code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};//LED段碼表,根據自己硬件修改
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, off
void delays(unsigned char k)
{
unsigned char i,j;
for(i=0;i<k;i++)
for(j=0;j<50;j++);
}
//*********** 18B20驅動 **************************
void delay(unsigned char i)
{
while(--i);
}
//復位
byte ow_reset(void)
{
byte presence;
DQ=0; //拉低總線
delay(250); // 保持 480us
delay(250);
DQ = 1; // 釋放總線
delay(30); // 等待回復
presence = DQ; // 讀取信號
delay(250); // 等待結束信號
return(presence); // 返回 0:正常 1:不存在
}
//從 1-wire 總線上讀取一個字節
byte read_byte(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0;
DQ = 1;
delay(2);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
//向 1-WIRE 總線上寫一個字節
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--) // 一次寫一位
{ DQ=1;
DQ=0;
DQ = val&0x01;
delay(30);
DQ = 1;
val=val/2;
}
delay(70);
}
unsigned int Read_Temperature(void)
{
union
{
unsigned char c[2];
unsigned int x;
}temp;
temp.x=0x0000;
i=ow_reset();
if(!i)
{
write_byte(0xCC); //Skip ROM
write_byte(0xBE); //Read Scratch Pad
temp.c[1]=read_byte(); //Start read data
temp.c[0]=read_byte(); //read two byte data from device
ow_reset(); //reset
write_byte(0xCC); //Skip ROM
write_byte(0x44); //Start Conversion
}
return temp.x;
}
//***************************
void main(void)
{ unsigned int j;
unsigned char p,q,n0,n1,n2;
while(1)
{
j=Read_Temperature();
q=(unsigned char)(j&0x000f);
p=(unsigned char)(j>>4)-2;
n0=p/10;
n1=p%10;
n2=tab2[q];
led0=0;leddata=tab1[n0];delays(30);led0=1;
led1=0;leddata=tab1[n1]&0x7f;delays(30);led1=1;
led2=0;leddata=tab1[n2];delays(20);led2=1;
}
}
復制代碼
超級簡單吧,所以這個小兒科,給初學者一個參考,高手就不要給我拍磚了,不然我要被打死了。
作者:
jxr0345
時間:
2015-1-24 22:29
不錯,支持分享精神。
51hei有你更精彩!!
作者:
dege
時間:
2015-1-26 10:51
寫得不錯。
作者:
lilijun5292
時間:
2015-6-6 10:34
make an effort
作者:
星星一眨眼
時間:
2015-6-9 21:16
謝謝分享制作的真好
作者:
xiaowei105
時間:
2015-6-26 18:07
18B20+AT89C2051+數碼管
51hei有你更精彩!!
作者:
waiwai
時間:
2015-8-11 21:57
排線不錯
作者:
ludaijin
時間:
2015-9-7 13:47
有打算做一個,好資料,謝謝
作者:
ludaijin
時間:
2015-9-7 13:47
51hei有你更精彩!!
作者:
wxgzf
時間:
2015-9-9 14:28
樓主,超過18b20的測溫上限和下限怎么處理!
作者:
wxgzf
時間:
2015-9-9 14:30
程序里只能顯示0-99左右,零下無法實現呀。
作者:
somexu
時間:
2015-10-13 16:51
學習了,思路很清晰
作者:
ls0899
時間:
2015-10-13 23:02
我也做了一個,那天發個圖上來
作者:
暗夜321
時間:
2016-4-12 09:02
有沒有原理圖 大神 求原理圖
作者:
jiajuntao
時間:
2016-4-12 10:45
pcb的背面做的很漂亮,就是有點費錫
作者:
brhzlzx
時間:
2016-4-12 12:41
不錯,樓主辛苦了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1