⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 凌阳单片机机上实现DS18B20测温的程序
💻 C
字号:
//========================================================
//	The information contained herein is the exclusive property of
//	Sunnnorth Technology Co. And shall not be distributed, reproduced,
//	or disclosed in whole in part without prior written permission.
//	(C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
//	ALL RIGHTS RESERVED
//	The entire notice above must be reproduced on all authorized copies.
//========================================================

//========================================================
//	工程名称:	18B20_Show
//	功能描述:	课程设计实验参考
//				利用DS18B20测量温度,并将温度显示在数码管上
//	涉及的库:	CMacro.lib
//	组成文件:	main.c
//	硬件连接:	IOA15连接DS18B20的数据线DQ
//				IOA口的低8位与6位数码管的Segment相连
//				IOB口的IOB15、IOB14、IOB13、IOB12、IOB2、IOB1分别控制数码管的位选
//	维护记录:	2005-09-12	v1.0
//
//========================================================

//========================================================
//	文件名称:	main.c
//	功能描述:	利用DS18B20测量温度,并将温度显示在数码管上
//	维护记录:	2005-09-29	v1.0
//========================================================

//========================================================
//	语法格式:	int main(void)
//	实现功能:	利用DS18B20测量温度,并将温度显示在数码管上
//	参数:		无
//	返回值:	无
//========================================================

#include "DS18B20.h"
#include "ptr.h"
#include "Dig.h"

#define C_IRQ4_4KHz		0x0040

unsigned int Data[8];
unsigned int g_Data_Dot[11] = {0x00bf,0x0086,0x00db,0x00cf,0x00e6,0x00ed,0x00fd,0x0087,0x00ff,0x00ef,0x0000};
						//0,		1,		2,		3,		4,		5,	6,		7,		8,		9,		无
unsigned int g_Data[11] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0000};
						//0,		1,		2,		3,		4,		5,	6,		7,		8,		9,		无

unsigned int Temp_Data(void);

int main(void)
{
	unsigned int uiTemp;
	unsigned int uiYushu;
	unsigned int uiBaiwei;
	unsigned int uiShiwei;
//	unsigned int uiGewei;
	unsigned int uiXiaoshu;
	
	
	Delay(1);
	*P_SystemClock = 0x0018;
	Delay(1);
	*P_IOA_Attrib = 0xffff;
	*P_IOA_Dir = 0xffff;
	*P_IOA_Data = 0x0000;
	__asm("int irq");
	DIG_Init();
	while(1)
	{
		Read_Temp();
		uiTemp = Temp_Data();
		uiXiaoshu = uiTemp/1000;
		if(uiXiaoshu)
			DIG_Set(6,g_Data[5]);
		else
			DIG_Set(6,g_Data[0]);
		
		uiYushu = uiTemp%1000;
		uiTemp = uiYushu;
		uiBaiwei = uiTemp/100;
		if(uiBaiwei)
			DIG_Set(3,g_Data[uiBaiwei]);
		else
			DIG_Set(3,g_Data[10]);
		
		uiYushu = uiTemp%100;
		uiTemp = uiYushu;
		uiShiwei = uiTemp/10;
		if(uiShiwei)
			DIG_Set(4,g_Data[uiShiwei]);
		else
			DIG_Set(4,g_Data[0]);
		
		uiYushu = uiTemp%10;
		if(uiYushu)
			DIG_Set(5,g_Data_Dot[uiYushu]);
		else
			DIG_Set(5,g_Data_Dot[0]);

		*P_Watchdog_Clear = 0x0001;
	}
}

unsigned int Temp_Data(void)
{
	unsigned int uiTemp;			//临时变量
//	unsigned int uiSignal;			//保存符号
	unsigned int uiData;			//保存温度
	uiTemp = Data[0];
	uiData = 0;
//	if(uiTemp & 0x0080)
//		uiSignal = 1;
//	else 
//		uiSignal = 0;				//为正
	if(uiTemp & 0x0080)
		uiData += 64;
	if(uiTemp & 0x0040)
		uiData += 32;
	if(uiTemp & 0x0020)
		uiData += 16;
	uiTemp = Data[0];
	if(uiTemp & 0x0010)
		uiData += 8;
	if(uiTemp & 0x0008)
		uiData += 4;
	if(uiTemp & 0x0004)
		uiData += 2;
	if(uiTemp & 0x0002)
		uiData += 1;
	if(uiTemp & 0x0001)
		uiData += 1000;				//0.5
//	if(uiSignal == 0)
		return uiData;
//	else
//		return -uiData;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -