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

📄 1302.h

📁 定时打铃控制器
💻 H
字号:
#define uchar unsigned char
#define uint  unsigned int

#define CE_1 GPIO_WriteHigh(GPIOB, GPIO_PIN_3) //PB3
#define CE_0 GPIO_WriteLow(GPIOB, GPIO_PIN_3)
#define SCLK_1 GPIO_WriteHigh(GPIOB, GPIO_PIN_5)//PB5
#define SCLK_0 GPIO_WriteLow(GPIOB, GPIO_PIN_5)
#define IO_1 GPIO_WriteHigh(GPIOB, GPIO_PIN_4)//PB4
#define IO_0 GPIO_WriteLow(GPIOB, GPIO_PIN_4)

uchar h=0x00,m=0x00,s=0x00,n=0x12,y=0x11,r=0x17;
uchar TIMESET[7];   //秒,分,小时,日,月,星期,年
uchar READTIME[14];  //读取后,时间数据存放在此。,,十秒 秒 十分 分 十时 时 十日 日 十月 月  空字节  星期 十年 年 
/******延时函数******/
void NOP()
{	uchar i;
	i=5;
	while(i--);
}
/******读IO函数******/
uchar readIO()
{
       uchar t;
       GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT);//初始化PB4为上拉输入
       t=GPIO_ReadInputData(GPIOB);            //读端口值,返回一个八位二进制数。
       GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);//初始化PB4
       if(t&GPIO_PIN_4)  return 1;
       else   return 0;
}
/******SPI主收从发(1Byte)******/
uchar  SPIread()
{
	uchar DAT,i;
	DAT=0;							   //收的问题
	CE_1;
	for(i=0;i<8;i++)
   	{
	   DAT=DAT>>1;	  
	   SCLK_1;
           NOP();
	   SCLK_0;      
	   if(readIO())	DAT=DAT|0x80;	  //或完以后还要把值送到DAT上
	} 								  
	return DAT;
}
/******SPI主发从收(1Byte)******/
void SPIwrite(uchar DAT)
{
	uchar i;
	CE_1;
	for(i=0;i<8;i++)
	{
	    if((DAT&0x01)==0x01)
              IO_1;
            else IO_0;
		SCLK_0;
		SCLK_1;
		DAT=DAT>>1;	
	}	
}
/******1302写入******/
void write1302(uchar ADD,uchar DAT)
{
	CE_0;	 		//总线清零
	SCLK_0;
	SPIwrite(ADD);	//写地址 ,具体的地址看RAM表和RTC,写就用储存单元的写地址(最低位为0,看时序图),存就用储存单元的存地址。
	NOP();
	NOP();
	SPIwrite(DAT);	//写数据
	CE_0;			//释放总线
	SCLK_0;
}
/******1302读取******/
uchar read1302(uchar ADD)
{
	uchar DAT;
	CE_0;	 		//总线清零
	SCLK_0;
	SPIwrite(ADD);	//写地址
	NOP();
        DAT=SPIread();  //读数据
	CE_0;			//释放总线
	SCLK_0;
	return DAT;
}

void SETtime()
{
        TIMESET[0]=s;
        TIMESET[1]=m;
        TIMESET[2]=h;
        TIMESET[3]=r;
        TIMESET[4]=y;
        TIMESET[5]=0x06;
        TIMESET[6]=n;
}

/******1302时间初始化******/	 //默认时间数据储存在TIMESET数组中
void SETtime1302()
{
	SETtime();
        uchar i,addr;
        addr=0x80;
	write1302(0x8e,0x00);	//WP置零,开1302 RTC内存写使能
	NOP();
	for(i=0;i<7;i++)
	{
		write1302(addr,TIMESET[i]);	 //写入初始时间
		addr+=2;
	}
			
}

/******1302时间读取******/
void READtime1302()
{
	uchar i,j,addr,temp;		
	write1302(0x8e,0x00);	//??读取的时候也要开RTC写使能,因为要先写入要读的单元的地址。
	addr=0x81;
	j=0;
	for(i=0;i<7;i++)		//读取顺序为十秒 秒 十分 分 十时 时
	{
		temp = read1302(addr);
		addr=addr+2;
		READTIME[j] = (temp>>4);
		j++;
		READTIME[j] = (temp&0x0F); 
		j++;		
	}
}

⌨️ 快捷键说明

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