基于stm8的18B20溫度顯示程序
單片機源程序如下:
- #include"stm8s.h"
- #include"Cry12864.h"
- #include"temp.h"
- #include"tim1.h"
- void LcdDisplay(int temp) ;
- uint a;
- void main( void )
- { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//內部時鐘1分頻16m
- Ini_Lcd();//液晶初始化
- Tim1_Init();//時鐘初始化
- while(1)
- {LcdDisplay(Ds18b20ReadTemp());
- }
- }
-
- /*******************************************************************************
- * 函數名 : LcdDisplay()
- * 函數功能 : LCD顯示讀取到的溫度
- * 輸入 : v
- * 輸出 : 無
- *******************************************************************************/
- void LcdDisplay(int temp) //lcd顯示
- {
-
- unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數組
- float tp;
- if(temp< 0) //當溫度值為負數
- {
- Write_Cmd(0x80); //寫地址 80表示初始地址
- Write_Data('-'); //顯示負
- //因為讀取的溫度是實際溫度的補碼,所以減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的就
- //算由?.5,還是在小數點后面。
-
- }
- else
- {
- Write_Cmd(0x80); //寫地址 80表示初始地址
- Write_Data('+'); //顯示正
- tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
- //如果溫度是正的那么,那么正數的原碼就是補碼它本身
- temp=tp*0.0625*100+0.5;
- //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
- //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
- //算加上0.5,還是在小數點后面。
- }
- datas[0] = temp / 10000;
- datas[1] = temp % 10000 / 1000;
- datas[2] = temp % 1000 / 100;
- datas[3] = temp % 100 / 10;
- datas[4] = temp % 10;
-
- Write_Cmd(0x82); //寫地址 80表示初始地址
- Write_Data(0x30+datas[0]); //百位
-
- //LcdWriteCom(0x83); //寫地址 80表示初始地址
- Write_Data(0x30+datas[1]); //十位
- //LcdWriteCom(0x84); //寫地址 80表示初始地址
- Write_Data(0x30+datas[2]); //個位
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
stm8溫度顯示.rar
(821.4 KB, 下載次數: 102)
2017-12-4 20:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|