新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)的DS18B20 C語(yǔ)言程序

AVR單片機(jī)的DS18B20 C語(yǔ)言程序

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
#include
#include
#define uchar unsigned char
#define uint unsigned int
//
#define BIT_SET(a,b) a|=(1<
#define BIT_CLR(a,b) a&=~(1<//清零位a.b
#define BIT_INV(a,b) a^=(1<//翻轉(zhuǎn)位a.b
#define BIT_STATUS(a,b) a&(1<//讀取位a.b
/
#define CLR_DS18B20 BIT_CLR(PORTC,PC7) //數(shù)據(jù)線強(qiáng)制拉低
#define SET_DS18B20 BIT_SET(PORTC,PC7) //數(shù)據(jù)線強(qiáng)制拉高,上拉
#define HLD_DS18B20 BIT_SET(DDRC,PC7) //Mega16控制總線
#define RLS_DS18B20 BIT_CLR(DDRC,PC7) //釋放總線
#define STU_DS18B20 BIT_STATUS(PINC,PC7) //數(shù)據(jù)線的狀態(tài)
uchar const SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar const ACT[8]={0x08,0x04,0x02,0x01,0x80,0x40,0x20,0x10};
uint T;
//=============================
void delayUs(uchar temp)
{
while(temp--);
}
uchar resetDS18B20(void);
unsigned int readTempDS18B20(void);
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF; //輸出
PORTC = 0xFF;
DDRC = 0xFF; //輸出
DDRD = 0xFF;
PORTD = 0xFF;
}
void delay_ms(uint k)
{
uint i,j;
for(i=0;i
{
for(j=0;j<570;j++);
}
}
//=============================
void display(uchar counter)
{
uchar i;
DDRA=0xff;
DDRC=0xff;
PORTA=0x00;
PORTC=0xff;
for(i=0;i<100;i++)
{
PORTA=SEG7[counter];
PORTC=ACT[3];
delay_ms(10);
PORTA=SEG7[counter/10];
PORTC=ACT[2];
delay_ms(10);
PORTA=SEG7[counter/100];
PORTC=ACT[1];
delay_ms(10);
PORTA=SEG7[counter/1000];
PORTC=ACT[0];
delay_ms(10);
}
}
void main()
{
port_init();
while(1)
{
resetDS18B20();
T=readTempDS18B20();
T=T>>4; //去除ds18b20轉(zhuǎn)換的小數(shù)位(低四位)
display(T);
}
}

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉