学过51单片机的回过头来都会觉得51还是比较简单的,在此我将贴出在我的学习过程中,把对各种外设所进行的操作,封装成函数库的形式,以供新手学习。
注:使用的单片机是stc12c5a60s2,该系列单片机属于加强51,在运行速度上是普通51的8-12倍,有关时序的操作需要加以注意。
注2:使用说明:
unsigned int temp = Ds18b20ReadTemp(); //调用函数,取得测温结果(相对大小)
float num0 = temp*0.0625+0.05; //使用公式,将结果转化为人看得懂的温度值(实际大小)
申明:本系列全部例程通过单片机开发板,实验亲测有效!
#include "ds18b20.h"
#include <intrins.h>
/**************************************************************
模块名:驱动Ds18b20
模块功能:实现Ds18b20的测温
时间:2017.5.4
备注:可选择调用,关键输出Temp值
***************************************************************/
bit Ds18b20Init() //Ds18b20初始化
{
bit ack;
DQ = 0; //产生500us复位脉冲
delay10us(50);
DQ = 1;
delay10us(6); //延时60us
ack = DQ; //读取存在脉冲
while(!DQ); //等待存在脉冲结束
return ack; //返回0表示成功
}
void Ds18b20WriteByte(unsigned char date)
{
unsigned char mask;
for (mask=0x01; mask!=0; mask<<=1) //低位在先,依次移出8个bit
{
DQ = 0; //产生2us低电平脉冲
_nop_();
_nop_();
if ((mask&date) == 0) //输出该bit值
DQ = 0;
else
DQ = 1;
delay10us(6); //延时60us
DQ = 1; //拉高通信引脚
}
}
unsigned char Ds18b20ReadByte()
{
unsigned char date, mask;
for (mask=0x01; mask!=0; mask<<=1) //低位在先,依次采集8个bit
{
DQ = 0; //产生2us低电平脉冲
_nop_();
_nop_();
DQ = 1; //结束低电平脉冲,等待18B20输出数据
_nop_(); //延时2us
_nop_();
if (!DQ) //读取通信引脚上的值
date &= ~mask;
else
date |= mask;
delay10us(6); //再延时60us
}
return date;
}
bit Ds18b20Convert()
{
bit ack;
ack = Ds18b20Init(); //执行总线复位,并获取18B20应答,0正确
if (ack == 0) //如18B20正确应答,则启动一次转换
{
Ds18b20WriteByte(0xCC); //跳过ROM操作
Ds18b20WriteByte(0x44); //启动一次温度转换
}
return ~ack; //ack==0表示操作成功,所以返回值对其取反
}
unsigned int Ds18b20ReadTemp() //读取Ds18b20—1温度数值
{
bit ack;
unsigned char lsb, msb; //16bit温度值的低字节和高字节
unsigned int temp;
Ds18b20Convert();
ack = Ds18b20Init(); //Ds18b20初始化
if (ack == 0) //如Ds18b20正确应答,则读取温度值
{
Ds18b20WriteByte(0xcc); //跳过检测Rom
Ds18b20WriteByte(0xbe); //发送读命令
lsb = Ds18b20ReadByte(); //读温度值的低字节
msb = Ds18b20ReadByte(); //读温度值的高字节
temp = ((unsigned int)msb << 8) + lsb; //合成为16bit整型数
}
return temp;
}
这篇博客主要介绍了如何在51单片机中,特别是STC12C5A60S2型号,使用DS18B20温度传感器,并提供了相应的库函数。内容包括对51单片机库的封装方法,以及针对DS18B20传感器的实测应用,确保所有例程在实际开发板上经过验证,适合初学者学习。
1278

被折叠的 条评论
为什么被折叠?



