📄 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; //
// unsigned int uiTemp; //
*P_SystemClock = 0x0018; //
*P_IOB_Attrib = 0xffff; //
*P_IOB_Dir = 0xffff;
*P_IOB_Data = 0x0000;
*P_INT_Ctrl = C_IRQ5_2Hz; //
__asm("IRQ ON");
PowerOn(); //
//
LCD1602_Initial(); //
Show_String();
SP_SIOInitial(); //
SP_SIOMassErase(); //
Init_Uart(); //
while(1)
{
uiTemperature = Read_Temp(); //
Display(uiTemperature); //
Send_Data(uiTemperature); //
if(g_min10 > SAVETIME)
{
g_min10 = 0;
Save_Message(); //
SP_SIOSendAWord(ulAddr,uiTemperature); //
// uiTemp = SP_SIOReadAWord(ulAddr); //
ulAddr++;
ulAddr++;
}
*P_Watchdog_Clear = 0x0001; //
}
}
//========================================================
// 语法格式: void PowerOn(void)
// 实现功能: 开机画面,
// 参数: 无
// 返回值: 无
//========================================================
void PowerOn(void)
{
int i;
LCD1602_Initial(); //
Write_Command(0x0080); //
Write_Data('w'); //
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); //在第二行显示
for(i=0;i<20;i++)
{
Delay(65535); //延时
*P_Watchdog_Clear = 0x0001; //清看门狗
}
Write_Command(0x0001);
}
//========================================================
// 语法格式: void Display(unsigned int)
// 实现功能: 显示,
// 参数: 要显示的温度
// 返回值: 无
//========================================================
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 + -