資源簡介
有想用ds18b20編程序的么?這是一個正確的程序,不僅普通的51單片機學(xué)習(xí)者可以用;c8051f020系列的單片機也能用。好好學(xué)習(xí)一下吧。
代碼片段和文件信息
#include
#define?uchar?unsigned?char?
#define?uint?unsigned?int
#define?com?0
#define?dat?1
sbit?DQ=P1^3;
void?port_init();
void?os_init();
void?timer0_init();
void?DelayUs2x(unsigned?char?t);
bit?Init_DS18B20(void);
void?init_all();
void?ASIC_disp(uchar?adduchar?nuchar?*h);
void?wr_lcd?(uchar?dat_commuchar?content);
void?wr_lcd?(uchar?dat_commuchar?content);
void?Init_lcd(void);
void?WriteOneChar(unsigned?char?date);
void?DelayMs(unsigned?char?t);
unsigned?int?ReadTemperature(void);
unsigned?char?ReadOneChar(void);
uchar?xdata?tab[5]={0x30};
uint?n=0;
uchar?flag;
void?port_init()
{
??XBR2=0X40;
??P1MDOUT=0XFF;
??P74OUT=0XFF;
}
void?os_init()
{
??int?i;
??OSCXCN=0X67;
??for(i=0;i<256;i++);
??while(!(OSCXCN&0X80));
??OSCICN=0X88;
}
void?timer0_init()
{
??TH0=0X06;//定時250us
??TL0=0X06;
??TMOD=0X02;//定時器0,方式2
??ET0=1;
??EA=1;
??TR0=1;
}
void?init_all()
{
??port_init();
??os_init();
??timer0_init();
??Init_DS18B20();
??Init_lcd();
}
void?DelayUs2x(unsigned?char?t)
{???
?while(--t);
}
void?DelayMs(unsigned?char?t)
{
?????
?while(t--)
?{
?????//大致延時1mS
?????DelayUs2x(245);
?DelayUs2x(245);
?}
}
bit?Init_DS18B20(void)
{
?bit?dat1=0;
?DQ?=?1;????//DQ復(fù)位
?DelayUs2x(5);???//稍做延時
?DQ?=?0;?????????//單片機將DQ拉低
?DelayUs2x(200);?//精確延時?大于?480us?小于960us
?DelayUs2x(200);
?DQ?=?1;????????//拉高總線
?DelayUs2x(50);?//15~60us?后?接收60-240us的存在脈沖
?dat1=DQ;????????//如果x=0則初始化成功?x=1則初始化失敗
?DelayUs2x(25);?//稍作延時返回
?return?dat1;
}
unsigned?char?ReadOneChar(void)
{
unsigned?char?i=0;
unsigned?char?date?=?0;
for?(i=8;i>0;i--)
?{
??DQ?=?0;?//?給脈沖信號
??date>>=1;
??DQ?=?1;?//?給脈沖信號
??if(DQ)
???date|=0x80;
??DelayUs2x(25);
?}
?return(date);
}
void?WriteOneChar(unsigned?char?date)
{
?unsigned?char?i=0;
?for?(i=8;?i>0;?i--)
?{
??DQ?=?0;
??DQ?=?dat&0x01;
??DelayUs2x(25);
??DQ?=?1;
??date>>=1;
?}
DelayUs2x(25);
}
unsigned?int?ReadTemperature(void)
{
unsigned
- 上一篇:mpla
yer QT源碼 - 下一篇:單片機教學(xué)打鈴控制器.rar
評論
共有 條評論