基于51单片机的电子温度计Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
- #include <reg51.h>
- #include "LCD1602.h"
- #include "temp.h"
- unsigned char datas[9]; //定义数组
- unsigned char *TempDisplay(int);
- void Delay100ms(unsigned int t);
- void Delay100ms(unsigned int t) //@12.000MHz
- {
- unsigned char i, j;
- i = 195;
- j = 138;
- do
- do
- {
- while (--j);
- } while (--i);
- while(--t);
- }
- /*******************************************************************************
- * 函数名 : main
- * 函数功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void main()
- {
- bit k;
- LcdInit(); //初始化LCD1602
- LCD_disp_string(2,0,"thermometer");
- while(1)
- {
- Delay100ms(8);//1s钟刷一次
- k = ~k;
- if(k) LCD_disp_char(2,0,'T');
- else LCD_disp_char(2,0,'t');
- TempDisplay(Ds18b20ReadTemp());
- LCD_disp_string(4,1,datas);
- }
- }
- /*******************************************************************************
- * 函数名 : LcdDisplay()
- * 函数功能 : LCD显示读取到的温度
- * 输入 : v
- * 输出 : 无
- *******************************************************************************/
- unsigned char *TempDisplay(int temp) //lcd显示
- {
- unsigned char dat[5],i=0;
- bit fu;
- float tp;
- if(temp< 0) //当温度值为负数
- {
- fu = 1;
- //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
- temp=temp-1;
- temp=~temp;
- }
- else
- {
- fu = 0;
- }
- tp=temp;
- temp=tp*0.0625*100+0.5;
- //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
- //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
- //算由?.5,还是在小数点后面。
-
- dat[0] = temp / 10000;
- dat[1] = temp % 10000 / 1000;
- dat[2] = temp % 1000 / 100;
- dat[3] = temp % 100 / 10;
- dat[4] = temp % 10;
-
- if(fu) datas[i++] = '-';
- if(dat[0]) datas[i++] = dat[0] + '0';
- if(dat[1] || (i-(unsigned char)fu)) datas[i++] = dat[1] + '0';
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
电子温度计.rar
(628.67 KB, 下载次数: 69)
|