资讯详情

蓝桥杯ds18b20用数码管显示温度

可以看到ds18b20的外部电路很简单,out接单片机的P14但要连接拉电阻

DS18B测量范围为-55℃~ 125℃。测量分辨率为9~12位可调(复位值为12位),12位精度可达0.0625℃(小数部分有4位)。 其温度测量原理,简单地说,内部精密晶体振动的振动频率会随着温度的变化而变化,在处理振动频率后,可以得到温度。 18B20有其指令系统,分为ROM命令和功能命令,内部有临时存储温度、报警上下限等数据,写在温度测量程序中。

温度传感器ds18b20是蓝桥杯的重要考点,省赛会提供底层驱动,但需要稍加修改

void delay_onewire (unsigned int t)  ///单总线延迟函数 {     while(t--);                     }

我们使用的开发板 iap15f2k61s2/iap15f2k60s2 比传统51快8~12倍,改为:

void delay_onewire (unsigned int t)  {   t = t*12;                       //放大12倍  while(t--);                   //10us  }

单总线向ds18b20写一个字节

void Write_ds18b20(unsigned char date)     ////单总线ds18b20写一个字节 {   unsigned char i;  for(i=0;i<8;i  )  {    DQ=0;                         //拉低P14   DQ= date & 0x01;            ///将数据发送到单总线,最低位   delay_onewire(5);           //延时30~60us   DQ = 1;                     //拉高P14   date>>=1;                   ///数据位移 ,回到第一步    }    delay_onewire(5);             }

向ds18b20读一个字节

unsigned char Read_ds18b20(void)  {    unsigned char i;   unsigned char date;   for(i=0;i<8;i  )  {     DQ=0;                         //拉低    date >>= 1;                 ///数据位移    DQ=1;                       //拉高   if(DQ)   {    date |= 0x80;           //读数据,最低位=DQ                                     //循环8次,保存8位数据,获得一个字节       }         delay_onewire(5);      } }

ds18b20初始化

bit init_ds18b20(void)        //ds18b20 初始化 {   bit init_flag = 0;      DQ = 1;                    //拉高   delay_onewire(12);         //稳定DQ      DQ = 0;                    ///      delay_onewire(80);         //延时480~960us      DQ = 1;                    ///释放总线      delay_onewire(10);               init_flag = DQ;            //若DQ = 0; 初始化成功   delay_onewire(5);     return init_flag; } 

温度转化

unsigned char rd_temperature(void) {   unsigned char temperature;  unsigned char low,high;    init_ds18b20();  Write_ds18b20(0xcc);         //跳过rom  Write_ds18b20(0x44);         //执行温度转换  delay_onewire(200);          //等待       init_ds18b20();  Write_ds18b20(0xcc);         //跳过rom     Write_ds18b20(0xbe);         ///读暂存器    low = Read_ds18b20();         high = Read_ds18b20();       temperature = (high<<4) | (low>>4);    return temperature;       }

标签: 放大电路数码管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台