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

📄 main.c

📁 ds13b20 与大家分享,呵呵^^^^^^^^^^^^ 请大家指教!
💻 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 + -