主函数
温度传感器可记录温度-55~125摄氏度
#include"reg52.h"
#include"temp.h"//这个头文件要写上,否则会报错!!!
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;//数码管用74LS138译码器来控制,所以有了这些东西
sbit LSB=P2^3;
sbit LSC=P2^4;
char num=0;//有用。在后面解释
u8 DisplayData[8];//工具数组,接受num转换过来的16进制数,传递给smg段数组
//上面这个数组这个要写成比5大的数因为要显示6位数码管,然后拼写注意一下!
u8 code smgduan[10]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段选,从0~9
void delay(u16 i)
{
//粗延时函数
while(i--);
}
void datapros(int temp)//参数表别忘了!!!因为你主函数调用这个函数是要传进实参的!!
{
float tp;//定义温度浮点数。因为数据处理有小数点所以将温度赋给一个浮点型变量
if(temp<0)
{
//如果从温度传感器里读取的温度是负数
DisplayData[0]=0x40;//就让数码管显示1个负号在前头
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
//读取的温度经一顿转换后变为真正的10进制温度
}
else//如果从温度传感器里读取的温度是0或者正数
{
DisplayData[0]=0x00;//那就不用在数码管最前头显示一个负号了
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
}
DisplayData[1]=smgduan[temp/10000];//因为数码管我们只用右边的6位,而且我们让temp多×了100,所以这里/10000
//所以这里剥离temp的百位给DisplayData数组存着 数组下标为0的数字你已经占用了,这里必须为1开始
DisplayData