📄 zh.c
字号:
#include<stdio.h>
#include"math.h"
#include"zh.h"
extern unsigned int t_cishu=0;
extern unsigned int remin_cishu=0;
extern unsigned int putong_cishu=0;
float renminwendu=0;
uchar flag=0; //判断DS18B20是否存在
uchar CRC_result=1; //CRC校验的结果,为0则正确。
unsigned int zhengshu,xiaoshu;
signed char fuhao;
uint baiwei,shiwei,gewei,xiao1,xiao2;
unsigned char temp_buff[9]; //DS18B20读出的9位数值数组
unsigned char DS18B20Temp[6];
void Delay(void);
void Delay_us(uint len);
void led_light(void);
void RF_sent(void);
void RF_recive(void);
void Init_CLK(void);
void DS18B20_ReadTemp(void);
void get_temp(void); //将温度转换成十进制
void temp_ASCII(void);
void DS18B20_ReadByte(void);
uchar DS18B20_Init(void);
void DS18B20_WriteByte(uchar oww_dat);
void Delay_us(uint len);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
_DINT(); //关闭中断
Init_CLK();
DS18B20_ReadTemp();
DS18B20_ReadTemp();
get_temp();
temp_ASCII();
_NOP();
}
void Init_CLK(void)
{
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL2 = 0x16; //MCLK=4MHZ,SMCLK=1MHZ;
}
void get_temp(void)
{
uchar gao,di;
gao = temp_buff[1];
di = temp_buff[0];
fuhao = gao&0xf8;
if(fuhao==0x00)
{
fuhao='+';
gao = gao<<4;
gao = gao&0xf0;
xiaoshu=di&0x0f;
di = di>>4;
di = di&0x0f;
zhengshu = gao+di;
}
else
{
fuhao='-';
di = di-0x01;
di = ~di;
gao = ~gao;
gao = gao<<4;
gao = gao&0xf0;
xiaoshu=di&0x0f;
di = di>>4;
di = di&0x0f;
zhengshu = gao+di;
}
}
void temp_ASCII(void)
{
uchar gao,di;
gao = temp_buff[1];
di = temp_buff[0];
fuhao = gao&0xf8;
if(fuhao==0x00)
{
fuhao='+';
gao = gao<<4;
gao = gao&0xf0;
xiaoshu=di&0x0f;
di = di>>4;
di = di&0x0f;
zhengshu = gao+di;
}
else
{
fuhao='-';
di = di-0x01;
di = ~di;
gao = ~gao;
gao = gao<<4;
gao = gao&0xf0;
xiaoshu=di&0x0f;
di = di>>4;
di = di&0x0f;
zhengshu = gao+di;
}
baiwei = zhengshu/100;
shiwei = (zhengshu%100)/10;
gewei = zhengshu%10;
xiao1 = xiaoshu/10;
xiao2 = xiaoshu%10;
DS18B20Temp[0]=fuhao;
DS18B20Temp[1]=baiwei+0x30;
DS18B20Temp[2]=shiwei+0x30;
DS18B20Temp[3]=gewei+0x30;
DS18B20Temp[4]=xiao1+0x30;
DS18B20Temp[5]=xiao2+0x30;
}
///*****************DS18B20的程序***************************/////////
void DS18B20_ReadTemp(void)
{
DS18B20_Init(); //初始化
if(flag)
{
flag=0;
DS18B20_WriteByte(SkipRom); //跳过ROM匹配 0xcc
DS18B20_WriteByte(ConvertTemperature); //温度转换命令 0x44
Delay_us(558); //等待温度转换750us
DS18B20_Init();
flag=0;
DS18B20_WriteByte(SkipRom); //跳过ROM匹配 0xcc
DS18B20_WriteByte(ReadScratchpad); //读温度命令 0xbe
DS18B20_ReadByte(); //读出温度数据到数组temp_buff[9]里
}
_NOP();
}
uchar DS18B20_Init(void)
{
unsigned char result;
uint j;
_NOP();
DS18B20_DIR |= DS18B20_DQ; // 输出方向
_NOP();
DS18B20_OUT &= ~DS18B20_DQ; // 拉低
Delay_us(360); // 持续〉480us 次数=(t-5us)*3/4
DS18B20_DIR &= ~DS18B20_DQ; // 输入方向
Delay_us(41); //等待60us
result = DS18B20_IN & DS18B20_DQ;
result = result&0x01;
for(j=0;j<75;j++)
{
if(result==0x00)
{
flag=1;
break;
}
else
{
flag=0;
}
}
Delay_us(1000); // > 480us
return(flag);
}
void DS18B20_WriteByte(uchar oww_dat)////////////********************/////写字节
{
uchar i,temp;
_NOP();
for(i = 0; i < 8; i++)
{
DS18B20_DIR |= DS18B20_DQ; //输出方向
//DS18B20_OUT |= DS18B20_DQ; // 输出高电平
_NOP();
DS18B20_OUT &= ~DS18B20_DQ; // ;拉低,写时间隙,15us内把所写的位送到总线上
_NOP();
temp = oww_dat >> i;
temp &= 0x01;
if (temp == 1)
{
DS18B20_OUT |= DS18B20_DQ; // 输出高电平
Delay_us(41); // 60us
}
else
{
DS18B20_OUT &= ~DS18B20_DQ; // 输出低电平
Delay_us(41); // 60us
DS18B20_OUT |= DS18B20_DQ;
}
DS18B20_DIR &= ~DS18B20_DQ; // 输入方向,释放总线
}
_NOP(); _NOP();_NOP();_NOP(); // 1us
}
void DS18B20_ReadByte(void)////////////////************///////////////////读字节
{
uchar i,j,temp=0,result;
for(i=0;i<9;i++)
{
temp=0;
for(j=0;j<8;j++)
{
DS18B20_DIR |= DS18B20_DQ; //输出方向
_NOP();
DS18B20_OUT &= ~DS18B20_DQ; // 输出低电平
_NOP();_NOP();_NOP();_NOP(); //2us
_NOP();_NOP();_NOP();_NOP();
DS18B20_OUT |= DS18B20_DQ; // 拉高
_NOP();
DS18B20_DIR &= ~DS18B20_DQ; // 输入方向
Delay_us(4); //12us
result = DS18B20_IN & DS18B20_DQ; //读出那一位
Delay_us(30); //45us
result = result&0x01;
if(result==0x01)
{
temp |= 0x01<<j;
}
}
temp_buff[i]=temp;
}
}
void Delay_us(uint len)
{
uint i;
for(i=0;i<len;i++)
{
_NOP();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -