资讯详情

51单片机温度传感器

#include “reg52.h” ///本文件定义了单片机的一些特殊功能寄存器 #include"temp.h" ///这里有一个温度函数 u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/

void main() {   while(1)  {   datapros(Ds18b20ReadTemp());  ///数据处理函数   DigDisplay()    }   } 

//Ds18b20ReadTemp()这个函数 在头文件中 一些物理计算应该省略 类似于 电流的大小 电压 根据产品的材料 算出 温度的值 传给你

void datapros(int temp)    {     float tp;    if(temp< 0)    //当温度值为负时    {   DisplayData[0] = 0x40;    //   -   //因为读取的温度是实际温度的补码,所以减1,再拿出原码   temp=temp-1;   temp=~temp;   tp=temp;   temp=tp*0.0625*100 0.5;    留两个小数点*100, 0.五是四舍五入,因为C语言浮点数转化为整形时,小数点被转化为整形   无论是否大于0,///后面的数字都会自动去除.5,而 0.5之后大于0.5是进1,小于0.5的就   //算加上0.还是在小数点后面。      }   else    {      DisplayData[0] = 0x00;   tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量   //如果温度正确,那么正数原码就是补码本身   temp=tp*0.0625*100 0.5;    //留两个小数点就*100, 0.五是四舍五入,因为C语言浮点数转化为整形时,小数点被转化为整形   无论是否大于0,///后面的数字都会自动去除.5,而 0.5之后大于0.5是进1,小于0.5的就   //算加上0.5,还在小数点后面。  }  DisplayData[1] = smgduan[temp / 10000];  DisplayData[2] = smgduan[temp % 10000 / 1000];  DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;  DisplayData[4] = smgduan[temp % 100 / 10];  DisplayData[5] = smgduan[temp % 10]; } 

这个值还是要处理的 逻辑不需要思考 毕竟,这是人们计算给出的值 既然它让我们这样处理,那就让我们这样处理吧 我们就这样处理 留两个小数点*100, 0.五是四舍五入,因为C语言浮点数转化为整形时,小数点被转化为整形 无论是否大于0,///后面的数字都会自动去除.5,而 0.5之后大于0.5是进1,小于0.5的就 //算加上0.还是在小数点后面。 这句话 其实有点重要 c语言将自动帮助您转换类型 所以四舍五入就没用函数了 我记得js还要MATH函数处理 下次我也这样写四舍五入 会不会出问题不清楚 void DigDisplay() { u8 i; for(i=0;i<6;i ) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第一位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第二位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第三位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第四位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第五位 } P0=DisplayData[5-i];///发送数据 delay(100); ///间隔扫描一段时间 P0=0x00;//消隐 } }

这个函数 一秒执行几百次 然后 您可以看到多个数组 像我这种动态视力优秀的人 看着 是一堆闪烁的灯 花里胡哨的 人类的动态视力真的很弱 被欺骗;

sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; 这三个 只要使用数码管 三个数字 是2的三次方 就是 有八种情况 然后这八种情况对应一个数字 一个数字有八个二极管 所以就是 P0=DisplayData[5-i];就是 1111 1110 ,随便写的 控制八盏灯的亮度 用三个开关控制8个灯的开关 ; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 所以这是设计10盏灯的方法 ;

DisplayData[1] = smgduan[temp / 10000]; DisplayData[2] = smgduan[temp % 10000 / 1000]; DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80; DisplayData[4] = smgduan[temp % 100 / 10]; DisplayData[5] = smgduan[temp % 10]; 

可见温度给出的是四位数字 然后拆卸这个四位数字 放到led里面显示 P0=0x00;//消隐 我不太了解这个 他加我就加

标签: tp3231温度传感器

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

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