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;//個位緩存寫入
}