锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

51单片机温度传感器

时间:2022-08-07 09:30:00 tp3231温度传感器

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

//code它的功能是告诉单片机,我定义的数据应该放在那里ROM(程序存储区)实际上相当于汇编中的寻址MOVX(好像),因为C语言不能详细描述存储的是ROM还是RAM(寄存器),所以在软件中添加这个句子来代替汇编指令,相应的data是存入RAM的意思

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;//消隐 我不太了解这个 他加我就加

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

相关文章