📄 main.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 + -