小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MSP430與DS18B20驅(qū)動(dòng)程序

 敗敗0619 2012-04-14
MSP430與DS18B20驅(qū)動(dòng)程序 

**描 述: 利用但總線DS18B20測(cè)溫程序,并在LCD顯示,取三位有效小數(shù)位。整數(shù)部分兩位。共5位顯示
********************************************************************************************************/
#include <msp430x44x.h>
#define SEGE 0X80
#define SEGH 0X40
#define SEGF 0X20
#define SEGC 0X10
#define SEGG 0X08
#define SEGD 0X04
#define SEGB 0X02
#define SEGA 0X01
const unsigned char digit[10] = {
SEGA|SEGB|SEGC|SEGD|SEGE|SEGF, /* "0" LCD segments a+b+c+d+e+f */
0x12, /* "1" */
0x8F, /* "2" */
0x1F, /* "3" */
0x3A, /* "4" */
0x3D, /* "5" */
0xBD, /* "6" */
0x13, /* "7" */
0xBF, /* "8" */
0x3F /* "9" */
};
#define DQ1 P4OUT|=BIT4
#define DQ0 P4OUT&=~BIT4
float Temper=0.0;
int temperature=0;
unsigned char Error = 0;
//----------------------------------
//功能:us 級(jí)別延時(shí)
// n=10,則延時(shí)10*5+6=56uS
//----------------------------------
void DelayNus(unsigned int n)
{
while(n--){};
}
//-----------------------------------
//功能:寫18B20
//-----------------------------------
void Write_18B20(unsigned char n)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ0;
DelayNus(1);//延時(shí)13us 左右
if((n&0X01)==0X01) DQ1;
else DQ0;
n=n>>1;
DelayNus(9);//延時(shí)50us 以上
DQ1;
}
}
//------------------------------------
//功能:讀取18B20
//------------------------------------
unsigned char Read_18B20(void)
{
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++)
{
temp=temp>>1;
DQ0;
_NOP();//延時(shí)1us
DQ1;
_NOP();_NOP();//延時(shí)5us
_NOP();_NOP();_NOP();
P4DIR&=~BIT4;
if((P4IN&BIT4)==0)
{
temp=temp&0x7F;
}else
{
temp=temp|0x80;
}
DelayNus(7);//延時(shí)40us
P4DIR|=BIT4;
DQ1;
}
return temp;
}
//-----------------------------------
void Init (void)
{
DQ0;
DelayNus(50);//延時(shí)500us
DQ1;
DelayNus(17);//延時(shí)90us
P4DIR&=~BIT4;
if((P4IN&BIT4)==BIT4) //0001 1111b=1f
{
Error =1; //失敗1
P4DIR|=BIT4;
}else
{
Error = 0;//初始化成功

DelayNus(80);
P4DIR|=BIT4;
DQ1;
}
}
//----------------------------------
void Skip(void)
{
Write_18B20(0xcc);
}
//----------------------------------
void Convert (void)
{
Write_18B20(0x44);
}
//----------------------------------
void ReadDo (void)
{
Write_18B20(0xbe);
}
//----------------------------------
void ReadTemp (void)
{
char temp_low,temp_high; //溫度值
temp_low=Read_18B20(); //讀低位
temp_high=Read_18B20(); //讀高位
temperature=(temp_high&0x0f);
temperature<<=8;
temperature|=temp_low;
Temper=temperature*0.0625;
}
void GetTemp(void){
Init();
Skip();
Convert();
DelayNus(60000);
DelayNus(60000);
DelayNus(60000);//延時(shí)1s以上
Init();
Skip();
ReadDo();
ReadTemp();
}
void InitLcd(void){
LCDCTL = LCDON + LCD4MUX + LCDSG0_1; // LCD on, 4-Mux, segments S0-S15
BTCTL = BT_fLCD_DIV128; // LCD clock freq is ACLK/128
P5SEL = 0xFC; // Select P5.2-7 as Com and Rxx
}
void display_number(unsigned long value, int start, int width)
{
int i;
for (i = 0; i < width; i++)
{
LCDMEM[7 + i - start] = digit[value%10]; // remainder = character in table to display
value /= 10;
}
}
void Lcd_Clr(void)
{
volatile unsigned char i;
for (i=0; i<7; i++)
{
LCDMEM = 0;
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停狗
P4DIR |=BIT4;
DQ1;
InitLcd();
Lcd_Clr();
while(1)
{
GetTemp();
display_number((unsigned long int)(Temper*1000),7,5);
LCDMEM[3] |= SEGH;
}
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多