📄 main.c
字号:
//======================================================================
// 工程名称: DS1302Demo.spj
// 功能描述: 提供时钟芯片DS1302的底层源码,以及简单的使用范例
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// 组成文件: 主程序:main.c
// DS18B20底层驱动源码:DS1302Driver_IO.asm
// 硬件连接: 范例中硬件连接如:
// DS1302的片选线(CE)接IOA7
// DS1302的数据线(I/O)接IOA6
// DS1302的时钟线(CLK)接IOA5
//
// SPLC501模组驱动程序演示Demo的主程序文件
// LCD D0~D7接IOA8~IOA15
// LCD EP 接IOB6
// LCD RWP 接IOB5
// LCD A0 接IOB4
// LCD /CS1 接IOB9 或接地也可
//
// SPCE061A端口供电为3.3V
// 维护记录: 2007-08-20
// Rn出品 经典应用
//======================================================================
//======================================================================
// 文件名称: main.c
// 功能描述: 简单的设置范例^_^
// 维护记录: 2007-08-20
//======================================================================
#include "SPCE061A.h"
#include "DS1302Driver_IO.h"
#include "SPLC501USer.h"
//=====================================================================
// 语法格式: int main(void)
// 实现功能: 简单的设置范例^_^
// 参数: 无
// 返回值: 无意义
//=====================================================================
int main(void)
{
unsigned int uiTemp;
unsigned int Temp1 ;
unsigned int Temp2 ;
LCD501_Init(0x00); //初始化端口、包括LCD的初始设置、以及显示初始(即传到函数的参数)
F_DS1302_Initial_IO(); //初始化DS1302
uiTemp = F_DS1302_ReadByte(0xc1);
//if(uiTemp!=0xAA) //读取RAM中的第一个单元数据,看是否已经设置过时间了?
//{
F_DS1302_WriteByte(0x8E,0x00); //enable Write
F_DS1302_WriteByte(0x90,0xAA); //TCS=1010b DS=10b Rout=10b
F_DS1302_WriteByte(0x8C,0x07); //year 2007
F_DS1302_WriteByte(0x8A,0x03); //day 3
F_DS1302_WriteByte(0x88,0x08); //month 08
F_DS1302_WriteByte(0x86,0x20); //date 20
F_DS1302_WriteByte(0x84,0x18); //hour 18
F_DS1302_WriteByte(0x82,0x58); //minute 58
F_DS1302_WriteByte(0x80,0x00); //seconds 00(bit7=0,start clk)
F_DS1302_WriteByte(0xC0,0xAA); //write 0xAA to RAM for flag
// }
uiTemp = F_DS1302_ReadByte(0xc1);
LCD501_ClrScreen(0); //清屏
LCD501_PutString(0,0,(unsigned int *)"Sunple technology"); //显示字符串
Delay(10);
LCD501_PutString(20,16,(unsigned int *)"Year:"); //显示字符串
LCD501_PutString(0,32,(unsigned int *)"Month:"); //显示字符串
LCD501_PutString(70,32,(unsigned int *)"Data:"); //显示字符串
LCD501_PutString(0,48,(unsigned int *)"Time:"); //显示字符串
while(1)
{
uiTemp = F_DS1302_ReadByte(0x8d); //year
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(60, 16, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(68, 16, Temp2);
uiTemp = F_DS1302_ReadByte(0x89); //Month
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(50, 32, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(58, 32, Temp2);
uiTemp = F_DS1302_ReadByte(0x87); //Date
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(110, 32, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(118, 32, Temp2);
uiTemp = F_DS1302_ReadByte(0x85); //Hour
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(48, 48, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(56, 48, Temp2);
LCD501_PutChar(64,48,':');//点":"
uiTemp = F_DS1302_ReadByte(0x83); //Minutes
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(72, 48, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(80, 48, Temp2);
LCD501_PutChar(88,48,':');//点":"
uiTemp = F_DS1302_ReadByte(0x81); //second
Temp1 = HEX_ASCII((uiTemp&0xf0)>>4); LCD501_PutChar(96, 48, Temp1);
Temp2 = HEX_ASCII(uiTemp&0x0f); LCD501_PutChar(104, 48, Temp2);
uiTemp = F_DS1302_ReadByte(0x8b);
uiTemp = F_DS1302_ReadByte(0x8f);
uiTemp = F_DS1302_ReadByte(0x91);
*P_Watchdog_Clear = 0x0001;
}
}
//-------------------------------------------------------------------
//软件延时函数
void Delay(unsigned int Delays)
{
unsigned int i,j;
for(j=0;j<Delays;j++)
{
for(i=0;i<10000;i++)
*P_Watchdog_Clear = 0x0001;
}
}
//------------------------------------------------------------------
unsigned int HEX_ASCII(unsigned int HEX)
{
unsigned int ASCII;
if((HEX >= 0) && (HEX <= 9))
ASCII = HEX + 48;
else if((HEX >= 10) && (HEX <= 15))
ASCII = HEX + 55;
return(ASCII);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -