unsigned int wd() //读取温度函数
{
unsigned char i = 0; //低8位数据
unsigned char j = 0; //高8位数据
unsigned int k = 0; //无符号16整形用来存储读回来的 16位温度数据(j和i组合后的数据)
sm();
d18b20_qs(); //初始化
d18b20_x(0xCC); //跳过序列号的操作(因为18b20在总线上可以挂很多个,这个序列号和网卡MAC地址类似)
d18b20_x(0x44); //开启温度转换
sm();
sm();
sm();
d18b20_qs(); //初始化
d18b20_x(0xCC); //跳过序列号的操作(因为18b20在总线上可以挂很多个,这个序列号和网卡MAC地址类似)
sm();
d18b20_x(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
sm();
i = d18b20_d(); //读取低8位
j = d18b20_d(); //读取高8位
sm();
k = j;
k <<= 8;
k = k + i;
sm();
return k; //返回读取到的16位数据
}
void zh(unsigned int i) //数码管显示缓存写入函数
{
unsigned char x,z;
x = i & 0x0f; //取出小数
i >>=4;
z = i & 0xff; //取出整数
switch(x) //小数位写人显示缓存
{
case 0: hc[7]=DM[0];break;
case 1: hc[7]=DM[1];break;
case 2: hc[7]=DM[1];break;
case 3: hc[7]=DM[2];break;
case 4: hc[7]=DM[3];break;
case 5: hc[7]=DM[3];break;
case 6: hc[7]=DM[4];break;
case 7: hc[7]=DM[4];break;
case 8: hc[7]=DM[5];break;
case 9: hc[7]=DM[6];break;
case 10: hc[7]=DM[6];break;
case 11: hc[7]=DM[7];break;
case 12: hc[7]=DM[8];break;
case 13: hc[7]=DM[8];break;
case 14: hc[7]=DM[9];break;
case 15: hc[7]=DM[9];break;
}
x = z/10; //取出十位
hc[5]=DM[x];//十位缓存写入
x = z%10; //取出个位
hc[6] = DM[x] | 0x80;//个位缓存写入
}