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

📄 main.c

📁 SPCE061A在温度测量显示存储系统中的应用
💻 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.
//========================================================

//========================================================
//	工程名称:	DS18B20_1602.spj
//	功能描述:	通过DS18B20温度传感器采集温度,将采集的温度显示在1602液晶显示屏上
//				同时每隔10分钟将温度记录到SPR1024存储器中进行存储
//	涉及的库:	CMacro1016.lib
//	组成文件:	main.c/ISR.c/DS18B20.c/UART.c
//				LCD1602_Driver.asm/SPR1024_Driver.asm
//				DS18B20_1602.h/DS18B20.h/UART_User.h
//				LCD1602_User.h/SPR1024_User.h
//	硬件连接:	IOA8-IOA15 ---- D0-D7(1602液晶)
//				IOB12 ---- EP(1602液晶)
//				IOB13 ---- RS(1602液晶)
//				IOB14 ---- R/w(1602液晶)
//				IOB15 ---- DQ(DS18B20温度传感器)
//				IOB1 ---- SCK(SPR1024存储器)
//				IOB0 ---- SDA(SPR1024存储器)
//				IOB7 ---- RX
//				IOB10 ---- TX
//	维护记录:	2005-11-22	v1.0
//				****-**-**	v1.x
//========================================================

//========================================================
//	文件名称:	main.c
//	功能描述:	工程的主文件
//	维护记录:	2005-11-22	v1.0
//========================================================

#include "DS18B20_1602.h"
#include "DS18B20.h"
#include "SPCE061A.h"
#include "LCD1602_User.h"
#include "SPR1024_User.h"
#include "UART_User.h"

unsigned int g_min10;				//全局变量,用于计时

#define SAVETIME 12				//10分钟

//========================================================
//	语法格式:	int main(void)
//	实现功能:	工程的主函数
//	参数:		无
//	返回值:	无
//========================================================

int main(void)
{
	unsigned int uiTemperature;			//存储温度
	unsigned long int ulAddr = 0;		//SPR1024存储地址
//	unsigned int uiTemp;				//临时测试

	*P_SystemClock = 0x0018;			//初始化,调整系统时钟24.576MHz/1,强振模式
	*P_IOB_Attrib = 0xffff;				//初始化IOB同相低电平输出口
	*P_IOB_Dir = 0xffff;
	*P_IOB_Data = 0x0000;
	*P_INT_Ctrl = C_IRQ5_2Hz;			//开2Hz 中断
	__asm("IRQ ON");
	
	PowerOn();							//开机界面:www.unsp.com.cn
										//TEL62981668-2925
	LCD1602_Initial();					//调用初始化程序,包括进行端口初始化和LCD初始化
	Show_String();

	SP_SIOInitial();					//初始化SIO
	SP_SIOMassErase();					//擦除SPR1024
	
	Init_Uart();						//初始化串口

	while(1)
	{
		uiTemperature = Read_Temp();	//测温
		Display(uiTemperature);			//显示
		Send_Data(uiTemperature);		//上传,通过UART
		if(g_min10 > SAVETIME)				//10分钟
		{
			g_min10 = 0;
			Save_Message();				//存储显示提示
			SP_SIOSendAWord(ulAddr,uiTemperature);	//记录,每10分钟
//			uiTemp = SP_SIOReadAWord(ulAddr);		//用于测试数据写入是否正确??
			ulAddr++;
			ulAddr++;
		}
	
		*P_Watchdog_Clear = 0x0001;		//清看门狗
	}
}

//========================================================
//	语法格式:	void PowerOn(void)
//	实现功能:	开机画面,显示凌阳科技大学计划网站
//	参数:		无
//	返回值:	无
//========================================================
void PowerOn(void)
{	
	int i;
	LCD1602_Initial();			//调用初始化程序,包括进行端口初始化和LCD初始化
	Write_Command(0x0080);		//设置当前DDRAM地址为0x00
	Write_Data('w');			//www.unsp.com.cn
	Write_Data('w');
	Write_Data('w');
	Write_Data('.');
	Write_Data('u');
	Write_Data('n');
	Write_Data('s');
	Write_Data('p');
	Write_Data('.');
	Write_Data('c');
	Write_Data('o');
	Write_Data('m');
	Write_Data('.');
	Write_Data('c');
	Write_Data('n');
	Write_Command(0x00c0);		//在第二行显示
	Write_Data('T');			//显示电话:TEL 62981668-2965
	Write_Data('E');
	Write_Data('L');
	Write_Data('6');
	Write_Data('2');
	Write_Data('9');
	Write_Data('8');
	Write_Data('1');
	Write_Data('6');
	Write_Data('6');
	Write_Data('8');
	Write_Data('-');
	Write_Data('2');
	Write_Data('9');
	Write_Data('6');
	Write_Data('5');
	for(i=0;i<20;i++)
	{
		Delay(65535);						//延时
		*P_Watchdog_Clear = 0x0001;			//清看门狗
	}
	Write_Command(0x0001);
}

//========================================================
//	语法格式:	void Display(unsigned int)
//	实现功能:	显示,将温度显示在1602液晶屏上
//	参数:		要显示的温度
//	返回值:	无
//========================================================
	
void Display(unsigned int uiData)
{
	unsigned int Data[10] = {0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039};
	
	unsigned int uiInteger;					//数据的整数部分
	unsigned int uiDecimal;					//数据的小数部分
	unsigned int uiBai;						//显示温度的百位
	unsigned int uiShi;						//显示温度的十位
	unsigned int uiGe;						//显示温度的个位
	unsigned int uiShi_d;					//显示温度的十分位
	unsigned int uiBai_d;					//显示温度的百分位
	unsigned int uiQian_d;					//显示温度的千分位
	unsigned int uiResidue;					//数据的余数,作除法
	
	uiInteger = 0;
	uiDecimal = 0;
	
	if(uiData & 0x0400)
		uiInteger += 64;					//转换为整数部分
	if(uiData & 0x0200)
		uiInteger += 32;
	if(uiData & 0x0100)
		uiInteger += 16;
	if(uiData & 0x0080)
		uiInteger += 8;
	if(uiData & 0x0040)
		uiInteger += 4;
	if(uiData & 0x0020)
		uiInteger += 2;
	if(uiData & 0x0010)
		uiInteger += 1;
	
	if(uiData & 0x0008)
		uiDecimal += 5000;					//转换为小数部分
	if(uiData & 0x0004)
		uiDecimal += 2500;
	if(uiData & 0x0002)
		uiDecimal += 1250;
	if(uiData & 0x0001)
		uiDecimal += 625;
	
	uiBai = uiInteger/100;					//小数点前面部分
	uiResidue = uiInteger%100;
	uiInteger = uiResidue;
	uiShi = uiInteger/10;
	uiResidue = uiInteger%10;
	uiGe = uiResidue;
	
	uiShi_d = uiDecimal/1000;				//小数点后面部分
	uiResidue = uiDecimal%1000;
	uiDecimal = uiResidue;
	uiBai_d = uiDecimal/100;
	uiResidue = uiDecimal%100;
	uiDecimal = uiResidue;
	uiQian_d = uiDecimal/10;
	uiResidue = uiDecimal%10;				//万分位
	
	//显示
	Write_Command(0x00c7);					//设置显示地址
	if(uiBai)
		Write_Data(Data[uiBai]);
	Write_Data(Data[uiShi]);
	Write_Data(Data[uiGe]);
	Write_Data('.');
	Write_Data(Data[uiShi_d]);
	Write_Data(Data[uiBai_d]);
	Write_Data(Data[uiQian_d]);
	Write_Data(Data[uiResidue]);
	Write_Data(0x005e);
	Write_Data('C');
}

//========================================================
//	语法格式:	void Show_String(void)
//	实现功能:	显示提示符 Temperature is:
//	参数:		无
//	返回值:	无
//========================================================

void Show_String(void)
{
	Write_Command(0x0080);					//设置显示地址
	Write_Data('T');
	Write_Data('e');
	Write_Data('m');
	Write_Data('p');
	Write_Data('e');
	Write_Data('r');
	Write_Data('a');
	Write_Data('t');
	Write_Data('u');
	Write_Data('r');
	Write_Data('e');
	Write_Command(0x008c);
	Write_Data('i');
	Write_Data('s');
	Write_Data(':');
	*P_Watchdog_Clear = 0x0001;
}

//========================================================
//	语法格式:	void Delay_10Min(void);	
//	实现功能:	延时10分钟
//	参数:		无
//	返回值:	无
//========================================================
void Delay_10Min(void)
{
	g_min10++;
}

//========================================================
//	语法格式:	void Save_Message(void)
//	实现功能:	在存储温度是进行提示
//	参数:		无
//	返回值:	无
//========================================================
void Save_Message(void)
{
	int i;
	Write_Command(0x0001);		//清屏
	Write_Command(0x0080);		//设置显示地址
	Write_Data('T');
	Write_Data('e');
	Write_Data('m');
	Write_Data('p');
	Write_Data('e');
	Write_Data('r');
	Write_Data('a');
	Write_Data('t');
	Write_Data('u');
	Write_Data('r');
	Write_Data('e');
	
	*P_Watchdog_Clear = 0x0001;
		
	Write_Command(0x008c);
	Write_Data('S');
	Write_Data('a');
	Write_Data('v');
	Write_Data('e');
	Write_Command(0x00c0);
	Write_Data('i');
	Write_Data('n');
	Write_Data('g');
	Write_Data('.');
	Write_Data('.');
	Write_Data('.');
	Write_Data('.');
	Write_Data('.');
	Write_Data('.');
	for(i=0;i<5;i++)
	{
		Delay(65535);						//延时
		*P_Watchdog_Clear = 0x0001;			//清看门狗
	}
	Write_Command(0x0001);
	Show_String();
}

⌨️ 快捷键说明

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