基于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)
|