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

📄 main.c

📁 基于S3C23410 ARM9的温度传感实验
💻 C
字号:
/****************************************************************************
【文  件  名  称】main.c
【功  能  描  述】MCS3C2410A板DS1820温度测试
【程  序  版  本】0.0
【创建人及创建日期】孙俊军//2007年10月5日
****************************************************************************/
#include "def.h"
#include "2410addr.h"
#include "config.h"
#include "board.h"
#include "utils.h"
#include "ds1820.h"

/*************************************************************/
//定义DS1820的一些全局变量
unsigned char tempL=0; 							//设全局变量
unsigned char tempH=0; 
unsigned int sdata=0;								//测量到的温度的整数部分
unsigned char xiaoshu1=0;							//小数第一位
unsigned char xiaoshu2=0;							//小数第二位
unsigned char xiaoshu=0;							//两位小数
int   fg=1;        							//温度正负标志

//读温度值(低位放tempL;高位放tempH;)
void ReadTemperature(void) 
{ 
 	Init_DS18B20(); //初始化
 	WriteOneChar(0xcc); //跳过读序列号的操作
 	WriteOneChar(0x44); //启动温度转换
 	sysUtilsUSecDelay(1010); //转换需要一点时间,延时 
 	Init_DS18B20(); //初始化
 	WriteOneChar(0xcc); //跳过读序列号的操作 
 	WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) 
 	tempL=ReadOneChar(); //读出温度的低位LSB
 	tempH=ReadOneChar(); //读出温度的高位MSB 
 	fg=1;
	if(tempH>0x7f)      //最高位为1时温度是负
	{
		fg=0;
		tempL=~tempL;         //补码转换,取反加一
		tempH=~tempH+1;       
    }
	sdata = tempL/16+tempH*16;      //整数部分
	xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
	xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
	xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
}

void Main(void)
{
	BoardInitStart();
	SystemClockInit();
	TimerInit(TIMER_us);
	MemCfgInit();
	PortInit();
	SerialSwitch(0);
	SerialChgBaud(115200);
  	printf ("\n\t\ts3c2410开发板智能温度测控系统现在开始运行\n");  	
	while(1)
	{
 		ReadTemperature();
  		if(fg==1)printf("现在温度是:%d.%d`C\n",sdata,xiaoshu);
  		else printf("现在温度是(负温度):-%d.%d`C\n",sdata,xiaoshu);
	  	sysUtilsUSecDelay(1000000);
	}
}

⌨️ 快捷键说明

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