⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zh.c

📁 msp430f413和prt6000程序c语言
💻 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 + -