RTC芯片 w25q128sa驅動源碼,移植的話只需要改I2C文件里面的兩個引腳,非常方便,以測試通過
0.png (43.58 KB, 下載次數: 55)
下載附件
2018-6-14 04:03 上傳
單片機源程序如下:
- #include "Rx8025sa.h"
- #include "myiic.h"
- #include "stdio.h"
- #include "string.h"
- #include "delay.h"
- //?RX8025???
- u8 RX8025_Read(u8 register_address)
- {
- u8 ret;
- IIC_Start();
- IIC_Send_Byte(RX8025_ADDR);
- while(IIC_Wait_Ack());
- IIC_Send_Byte((register_address<<4));
- while(IIC_Wait_Ack());
- IIC_Start();
- IIC_Send_Byte(RX8025_ADDR | 1);
- while(IIC_Wait_Ack());
- ret=IIC_Read_Byte(1);
- // I2C_SendACK(1);
- IIC_Stop();
- return ret;
- }
- void RX8025_Write(u8 register_address,u8 val)
- {
- IIC_Start();
- IIC_Send_Byte(RX8025_ADDR);
- while(IIC_Wait_Ack());
- IIC_Send_Byte((register_address<<4));
- while(IIC_Wait_Ack());
- IIC_Send_Byte(val);
- while(IIC_Wait_Ack());
- IIC_Stop();
- }
- void Rx8025_Init(void)
- {
- // u8 ret=0;
- IIC_Init();
- // IIC_Start();
- // IIC_Send_Byte(RX8025_ADDR);
- // IIC_Wait_Ack();
- // IIC_Send_Byte(0x0);
- // IIC_Wait_Ack();
- // IIC_Send_Byte(0x10);
- // IIC_Wait_Ack();
- //
- // IIC_Stop();
- if(RX8025_Read(RX8025_ADDR_CONTROL1)!=0x20)
- {
- RX8025_Write(RX8025_ADDR_CONTROL1,0x20);
- }
- //printf("%x\r\n",RX8025_Read(RX8025_ADDR_CONTROL1));
- }
- u8 set_rtc_time(TIME* t)
- {
- u8 i=0;
- u8 rtc_str[7];
- rtc_str[0] = ((t->second/10)<<4) | (t->second%10);
- rtc_str[1] = ((t->minute/10)<<4) | (t->minute%10);
- rtc_str[2] = ((t->hour/10)<<4) | (t->hour%10);
- rtc_str[3] = t->week;
- rtc_str[4] = ((t->day/10)<<4) | (t->day%10);
- rtc_str[5] = ((t->month/10)<<4) | (t->month%10);
- rtc_str[6] = ((t->year/10)<<4) | (t->year%10);
- for(i=0;i<7;i++)
- {
- RX8025_Write(i,rtc_str[i]);
- }
- return 0;
- }
- u8 get_rtc_time(TIME* t)
- {
- u8 i=0;
- u8 rtc_str[7];
- for(i=0;i<7;i++)
- {
- rtc_str[i]=RX8025_Read(i);
- }
- //rtc_str[6] = RX8025_Read(RX8025_ADDR_YEAR);
- t->second = ((rtc_str[0]>>4)*10) + (rtc_str[0] & 0x0f);
- t->minute = ((rtc_str[1]>>4)*10) + (rtc_str[1] & 0x0f);
- t->hour = ((rtc_str[2]>>4)*10) + (rtc_str[2] & 0x0f);
- t->week = rtc_str[3];
- t->day = ((rtc_str[4]>>4)*10) + (rtc_str[4] & 0x0f);
- t->month = ((rtc_str[5]>>4)*10) + (rtc_str[5] & 0x0f);
- t->year = ((rtc_str[6]>>4)*10) + (rtc_str[6] & 0x0f);
- return 0;
- }
- void test_rtc(void)
- {
- TIME rtc_time;
- rtc_time.second = 00;
- rtc_time.minute =0x57;
- rtc_time.hour = 0x13;
- rtc_time.week = 0x1;
- rtc_time.day =0x7;
- rtc_time.month = 0x8;
- rtc_time.year = 0x63;
-
- //Rx8025_Init();
- IIC_Init();
- if(RX8025_Read(RX8025_ADDR_CONTROL1)!=0x20)
- {
- RX8025_Write(RX8025_ADDR_CONTROL1,0x20);
- }
- set_rtc_time(&rtc_time);
- while(1)
- {
- get_rtc_time(&rtc_time);
-
- printf("%d %x %x %x %d %d %d\r\n",rtc_time.year,rtc_time.month,rtc_time.day,rtc_time.week,rtc_time.hour,rtc_time.minute,rtc_time.second);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
RX8025SA.rar
(3 KB, 下載次數: 166)
2018-6-13 10:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|