?? 10-4.c
字號(hào):
#include <reg51.h>
#include <absacc.h>
#include <stdio.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit P3_5=P3^5;
uchar TEMP; // 溫度值的變量;
uchar flag1; // 結(jié)果為負(fù)和正的標(biāo)志位。
void delay (unsigned int count)
{
unsigned int i;
while (count)
{
i =200;
while (i>0) i--;
count--;
}
}
void tmreset (void) // 發(fā)送復(fù)位和初始化
{
unsigned int i;
P3_5 = 0;
i = 103;
while (i>0) i--; // 延時(shí)
P3_5 = 1;
i = 4;
while (i>0) i--;
}
bit tmpread (void) // 讀取數(shù)據(jù)的一位
{
unsigned int i;
bit dat;
P3_5 = 0; i++;
P3_5 = 1; i++; i++; //延時(shí)
dat = P3_5;
i = 8; while (i>0) i--; // 延時(shí)
return (dat);
}
unsigned char tmpread2 (void) //讀一個(gè)字節(jié)
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{
j = tmpread ();
dat = (j << 7) | (dat >> 1);
}
return (dat);
}
void tmpwrite (unsigned char dat) //寫一個(gè)字節(jié)
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
{
testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{
P3_5 = 0; // 寫0
i++; i++;
P3_5 = 1;
i = 8; while (i>0) i--;
}
else
{
P3_5 = 0; // 寫0
i = 8; while (i>0) i--;
P3_5 = 1;
i++; i++;
}
}
}
void tmpchange(void) // ds1820 開始轉(zhuǎn)換
{
tmreset (); // 復(fù)位
//tmpre (); // 等待存在脈沖
delay (1); // 延時(shí)
tmpwrite (0xcc); // 跳過序列號(hào)命令
tmpwrite (0x44); // 發(fā)轉(zhuǎn)換命令 44H,
}
void tmp (void) // 讀取溫度
{
unsigned char a,b;
tmreset (); // 復(fù)位
delay (1); // 延時(shí)
tmpwrite (0xcc); // 跳過序列號(hào)命令
tmpwrite (0xbe); // 發(fā)送讀取命令
a = tmpread2 (); // 讀取低位溫度
b = tmpread2 (); //讀取高位溫度
flag1=b; //若b為1則為負(fù)溫
if(flag1)
{
TEMP=~a+1; //如果為負(fù)溫則去除其補(bǔ)碼
}
else
{
TEMP=a;
}
}
rom() // 讀取器件序列號(hào)子程序
{
tmreset (); //復(fù)位
delay (1); //延時(shí)
tmpwrite(0x33); //發(fā)送讀序列號(hào)子程序
}
main()
{
do{
tmpchange(); // 開始溫度轉(zhuǎn)換
delay(200); // 讀取延時(shí)
tmp(); //讀取溫度
}while(1);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -