单片机AT8051是本系统的核心部分,它控制着数据显示、温度检测存储数据等功能。根据以上各功能模块得到应用电路总原理图。第三章 数字温度计软件设计
第一节 各部分程序设计流程
一、 主程序设计
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度。系统主程序首先对系统进行初始化,
包括设置定时器、中断和端口;然后
显示开机画面。由于单片机没有停止
指令,所以可以设计系统程序不断地
循环执行上述显示结果。其程序流程
如图4所示。
二、温度值读取程序设计
读出温度子程序的主要功能是读
出RAM中的9字节,在读出时需进
行CRC校验,校验有错时不进行温
度数据的改写。其程序流程图如图5。
三、温度值转换程序设计
温度转换命令子程序主要是发温
度转换开始命令,当采用12位分辨率
时转换时间约为750毫秒,在本程序
设计中采用1秒显示程序延时法等待
转换的完成。
四、计算温度程序设计
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图1.6。
五、 显示数据刷新程序设计
显示数据刷新子程序主要时
对显示缓冲器中的显示数据进行
刷新操作,当最高显示位为零时
将符号显示位移入下一位。程序
流程图如图1.7。
第二节 温度计源程序
//通过DS18B20测试当前环境温度, 并通过液晶显示器显示当前温度值, 目前显示范围: 0.0~ +99.9度
#include<AT8051.H>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DATAPORT P0 //定义P0口为Lcd数据口
#define SETTEMP P1 //定义P1口为设定温度
#define SELECT P2 //定义P2口为选择信号
sbit L1 = P1^1; //灯作为电机
sbit L2 = P1^2;
sbit L3 = P1^3;
sbit DQ = P3^4; //定义DS18B20通信端口
char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0~9对应16进制数
int temp1,temp2,ID=0,set=0,blink;
int temp1=27,xs=5; //定义整数和小数
unsigned int max,mid,min,flag;
///下面是小板的地址///大板对应为0xc700,0xc600,0xc500///
#define lcd_data XBYTE[0xe000] //显示数据端口
#define lcd_sel XBYTE[0xc000] //显示器选择端
#define key_addr XBYTE[0xa000] //按键端口
uchar d[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};
//仿真时用到
/*********延时>K*1ms,*////*12.000mhz>11.0596有误差********/
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
}www.751com.cn
}
/***********ds18b20延迟子函数(晶振11.0596MHz )*******/
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位 ds18b20通信端口
delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(4);
x=DQ; //稍做延时后,如果x=0则初始化成功;x=1则初始化失败
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页