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

📄 main.c

📁 MinArm MNU20-20模块 ,8563使用例程
💻 C
📖 第 1 页 / 共 2 页
字号:
	buff[2]=(New_time.sec%10)|(((New_time.sec/10)<<4)&0x70);                                           // 转化秒
	buff[3]=(New_time.min%10)|(((New_time.min/10)<<4)&0x70);                                           // 转化分
	buff[4]=(New_time.hour%10)|(((New_time.hour/10)<<4)&0x70);                                         // 转化小时
			
	buff[6]=(New_time.dow&0x07);                                                                       // 转化星期
			
			
	buff[5]=(New_data.day%10)|(((New_data.day/10)<<4)&0x30);                                           // 转化日
	buff[7]=(New_data.mon%10)|(((New_data.mon/10)<<4)&0x10);                                           // 转化月
			
	if(New_data.year>2000)                                                                             // 转化年
	{
		buff[7]=buff[7]&(~0x80);
		buff[8]=(New_data.year-2000);                            
	}
	else
	{
		buff[7]=buff[7]|0x80;
		buff[8]=(New_data.year-1900);

	}
   /*初始化PCF8563剩下的寄存器*/
   buff[0]=0x00;
   buff[1]=0x12;
   buff[9]=0x80;
   buff[10]=0x80;
   buff[11]=0x80;
   buff[12]=0x80;
   buff[13]=0x80;
   buff[14]=0x00;
   buff[15]=0x5a;
}
#define PCF8563   0xA2 				                       // PCF8563 I2C地址
extern void UpsysTime(void);
/*******************************************************************************************
** Function name: TASK0
** Descriptions:  通过调试观察RTC的运行
                  如果按下KEY1,实时时钟PCF8563重新恢复默认设置值为2007年6月22日,星期5,1时22分30秒         
** Input:         无
** Output:        无 
*******************************************************************************************/
void TASK0(void *pdata)  
{
    TIME    read_time;		                               // 时间结构体, 用于调试观察
	DATE    read_date;		                               // 日期结构体, 用于调试观察
	int32	I2C_Handles=0;                                 // 定义I2C句柄
	char    buff[7];		                               // 存放从8563读出的时间和日期数据
	char 	buff2[16] ;
	int32	Err;

	pdata = pdata;
	
	I2C_Handles = dopen("I2C", O_RDWR, SHARE); 			             // 以读写和共享方式打开I2C设备
	if (I2C_Handles < 0 )
	{
		Err = getlasterr(I2C_Handles);					             // 打开I2C错误,查看错误状态
		while (1)
		{
			OSTimeDly(OS_TICKS_PER_SEC);
		}
	}
	
	while (1)
	{
		if (gpio_get(KEY1) == 0)		                   // 如果按下KEY1,RTC重新恢复默认设置值为2007年6月22日,星期5,1时22分30秒 
		{
			/* RTC的初始设置值 */
			TimeToData("2007-06-22","5","01:22:30",buff2);
			diocontrol(I2C_Handles, I2C_DEVICE_ADDR, (void *)PCF8563);       // 设置从器件写地址
			diocontrol(I2C_Handles, I2C_ONE_BYTE_SUBA, (void *)0); 		     // 设置单字节从器件子地址, 从0x00地址开始配置8563的16个寄存器
			diocontrol(I2C_Handles, I2C_TIME_DLY, (void *)50); 			     // 设置超时时间
			dwrite(I2C_Handles, buff2, sizeof(buff2)); 					     // 向I2C 器件写数据
		    OSTimeDly(OS_TICKS_PER_SEC/200); 
		    UpsysTime();                                                     // 更新系统内部时钟
		}
		
		diocontrol(I2C_Handles, I2C_DEVICE_ADDR, (void *)PCF8563); 	         // 设置从器件读地址
		diocontrol(I2C_Handles, I2C_ONE_BYTE_SUBA, (void *)2); 			     // 设置单字节从器件子地址, 从0x02秒寄存器开始读出时间和日期
		diocontrol(I2C_Handles, I2C_TIME_DLY, (void *)50); 				     // 设置超时时间
		dread(I2C_Handles, buff, sizeof(buff)); 							 // 从I2C 器件读数据

		/* 把读出的时间和日期BCD码转换成十进制数 */
		read_time.sec  = ((buff[0]&0x70)>>4)*10 + (buff[0]&0x0f);	         // 秒
		read_time.min  = ((buff[1]&0x70)>>4)*10 + (buff[1]&0x0f);	         // 分
		read_time.hour = ((buff[2]&0x30)>>4)*10 + (buff[2]&0x0f);	         // 小时
		read_time.dow  = buff[4]&0x07;								         // 星期
		
		read_date.day  = ((buff[3]&0x30)>>4)*10 + (buff[3]&0x0f);	         // 日
		read_date.mon  = ((buff[5]&0x10)>>4)*10 + (buff[5]&0x0f);	         // 月
		
		if (buff[5]&0x80) 	                                                 // 年为19XX
		{
			read_date.year = ((buff[6]&0xf0)>>4)*10 + (buff[6]&0x0f) +1900;
		}
		else				                                                 // 年为20XX 
		{
			read_date.year = ((buff[6]&0xf0)>>4)*10 + (buff[6]&0x0f) +2000;
		}
		
		/* 在此设置断点,从RTC中读出日期和时间参数(read_date, read_time)
		   通过变量调试窗口观察读出的日期和时间参数
		   观察RTC是否有运行	*/
		   
		OSTimeDly(OS_TICKS_PER_SEC/200); 
	}
 
}


/*******************************************************************************************
** Function name: TASK1
** Descriptions : 
** Input        : 无
** Output       : 无 
*******************************************************************************************/
void TASK1(void *pdata)
{
	pdata = pdata;

	while (1)
    {
		OSTimeDly(OS_TICKS_PER_SEC); 
    }
}

/*******************************************************************************************
** Function name: TASK2
** Descriptions : 
** Input        : 无
** Output       : 无 
*******************************************************************************************/
void TASK2(void *pdata)
{	
	pdata = pdata;

	while (1)
    {
		OSTimeDly(OS_TICKS_PER_SEC);
    }
}

/*******************************************************************************************
** Function name: TASK3
** Descriptions : 
** Input        : 无
** Output       : 无 
*******************************************************************************************/
void TASK3(void *pdata)
{	
	pdata = pdata;

	while(1)
    {
		OSTimeDly(OS_TICKS_PER_SEC);
	}
}

/*******************************************************************************************
** Function name: TASK4
** Descriptions : 
** Input        : 无
** Output       : 无 
*******************************************************************************************/
void TASK4(void *pdata)
{
	pdata = pdata;
	
	while (1)
	{
		OSTimeDly(OS_TICKS_PER_SEC); 
	} 
}

/*******************************************************************************************
** Function name: TASK5
** Descriptions : 系统正常运行指示灯,如果系统正常运行,LDE9会正常闪烁。
** Input        : 无
** Output       : 无 
*******************************************************************************************/
void TASK5(void *pdata)
{
	pdata = pdata;
	
	while (1)
	{   
       gpio_clr(LED9); 
       OSTimeDly(OS_TICKS_PER_SEC/2);
       gpio_set(LED9);
       OSTimeDly(OS_TICKS_PER_SEC/2);
	} 
}

/*******************************************************************************************
**                            End Of File
*******************************************************************************************/

⌨️ 快捷键说明

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