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