在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用RTC外設(shè)實(shí)現(xiàn)萬年歷功能

中科芯MCU ? 來源:中科芯MCU ? 2025-02-18 16:56 ? 次閱讀

萬年歷實(shí)驗(yàn)

本小節(jié)講解的是如何利用RTC外設(shè)實(shí)現(xiàn)萬年歷功能,本實(shí)驗(yàn)工程與RTC底層驅(qū)動(dòng)相關(guān)的文件為bsp_rtc.c/h,在底層驅(qū)動(dòng)之上我們添加了bsp_calendar.c/h和bsp_date.c/h文件,用于萬年歷的計(jì)算。

程序設(shè)計(jì)要點(diǎn)

(1)初始化RTC外設(shè);

(2)設(shè)置時(shí)間以及添加配置標(biāo)志;

(3)獲取當(dāng)前時(shí)間;

代碼分析

1、RTC實(shí)驗(yàn)配置相關(guān)宏定義

在這個(gè)RTC實(shí)驗(yàn)中的bsp_rtc.h文件中添加了一些宏定義用于切換工程的配置。本實(shí)驗(yàn)?zāi)J(rèn)使用LSI內(nèi)部時(shí)鐘,使用內(nèi)部時(shí)鐘時(shí),即使安裝了鈕扣電池,主電源掉電后時(shí)間是不會(huì)繼續(xù)走的,只會(huì)保留上次斷電的時(shí)間。若要持續(xù)運(yùn)行,需要切換成使用LSE外部時(shí)鐘。

#define RTC_CLOCK_SOURCE_LSI //使用LS內(nèi)部時(shí)鐘

#define RTC_BKP_DRX BKP_DR1

#define RTC_BKP_DATA 0xA5A5//寫入到備份寄存器的數(shù)據(jù)宏定義

#define TIME_ZOOM (8*60*60)//北京時(shí)間的時(shí)區(qū)秒數(shù)差

RTC_BKP_DRX和RTC_BKP_DATA:這兩個(gè)宏用于在備份域寄存器設(shè)置RTC已配置標(biāo)志,本實(shí)驗(yàn)中初始化RTC后,向備份域寄存器寫入一個(gè)數(shù)字,若下次芯片上電檢測到該標(biāo)志,說明RTC之前已經(jīng)配置好時(shí)間,所以不應(yīng)該再設(shè)置RTC,而如果備份域電源也掉電,備份域內(nèi)記錄的該標(biāo)志也會(huì)丟失,所以芯片上電后需要重新設(shè)置時(shí)間。這兩個(gè)宏的值中,BKP_DR1是備份域的其中一個(gè)寄存器,而0xA5A5則是隨意選擇的數(shù)字,只要寫入和檢測一致即可。

TIME_ZOOM:這個(gè)宏用于設(shè)置時(shí)區(qū)的秒數(shù)偏移,例如北京時(shí)間為(GMT+8)時(shí)區(qū),即相對(duì)于格林威治時(shí)間(GMT)早8個(gè)小時(shí),此處使用的宏值即為8個(gè)小時(shí)的秒數(shù)(8*60*60),若使用其它時(shí)區(qū),修改該宏即可。

2、初始化RTC

在本工程中,我們編寫了RTC_Configuration函數(shù)對(duì)RTC進(jìn)行初始化。這個(gè)初始化的流程如下:使用RCC_APB1PeriphClockCmd使能PWR和BKP區(qū)域(即備份域)的時(shí)鐘系統(tǒng),使用PWR_BackupAccessCmd設(shè)置允許對(duì)BKP區(qū)域的訪問,使能LSI時(shí)鐘,選擇LSI作為RTC的時(shí)鐘源并使能RTC時(shí)鐘,利用庫函數(shù)RTC_WaitForSynchro對(duì)備份域和APB進(jìn)行同步,用RTC_ITConfig使能秒中斷,使用RTC_SetPrescaler分頻配置把RTC時(shí)鐘頻率設(shè)置為1Hz,那么RTC每個(gè)時(shí)鐘周期都會(huì)產(chǎn)生一次中斷。經(jīng)過這樣的配置后,RTC每秒產(chǎn)生一次中斷事件,實(shí)驗(yàn)中在中斷設(shè)置標(biāo)志位以便更新時(shí)間。

/*

* 函數(shù)名:RTC_Configuration

* 描述 :配置RTC

* 輸入 :無

* 輸出 :無

*/

void RTC_Configuration(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和Backup時(shí)鐘

PWR_BackupAccessCmd(ENABLE);//允許訪問 Backup 區(qū)域

BKP_DeInit();//復(fù)位 Backup 區(qū)域

RCC_LSICmd(ENABLE);//使能 LSI

while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); //等待 LSI 準(zhǔn)備好

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//選擇 LSI 作為 RTC 時(shí)鐘源

RCC_RTCCLKCmd(ENABLE);//使能 RTC 時(shí)鐘

RTC_WaitForSynchro();//因?yàn)镽TC時(shí)鐘是低速的,內(nèi)環(huán)時(shí)鐘是高速的,所以要等待 RTC 寄存器同步

RTC_WaitForLastTask();//確保上一次 RTC 的操作完成

RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能 RTC 秒中斷

RTC_WaitForLastTask();//確保上一次 RTC 的操作完成

/* 設(shè)置 RTC 分頻: 使 RTC 周期為1s ,LSI約為40KHz */

RTC_SetPrescaler(40000-1); //RTC period = RTCCLK/RTC_PR = (40 KHz)/(40000-1+1) = 1HZ

RTC_WaitForLastTask();//確保上一次 RTC 的操作完成

}

3、時(shí)間管理結(jié)構(gòu)體

RTC初始化完成后可以直接往它的計(jì)數(shù)器寫入時(shí)間戳,但是時(shí)間戳對(duì)用戶不友好,不方便配置和顯示時(shí)間,在本工程中,使用bsp_date.h文件的rtc_time結(jié)構(gòu)體來管理時(shí)間。這個(gè)類型的結(jié)構(gòu)體具有時(shí)、分、秒、日、月、年及星期這7個(gè)成員。當(dāng)需要給RTC的計(jì)時(shí)器重新配置或顯示時(shí)間時(shí),使用這種容易接受的時(shí)間表示方式。

struct rtc_time {

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

};

在配置RTC時(shí),使用這種類型的變量保存用戶輸入的時(shí)間,然后利用函數(shù)由該時(shí)間求出對(duì)應(yīng)的UNIX時(shí)間戳,寫入RTC的計(jì)數(shù)器;RTC正常運(yùn)行后,需要輸出時(shí)間時(shí),利用函數(shù)通過RTC的計(jì)數(shù)器獲取UNIX時(shí)間戳,轉(zhuǎn)化成這種友好的時(shí)間表示方式保存到變量輸出。

4、時(shí)間格式轉(zhuǎn)換

在本實(shí)驗(yàn)中,tm格式轉(zhuǎn)時(shí)間戳使用mktimev函數(shù),時(shí)間戳轉(zhuǎn)tm格式使用to_tm函數(shù),這兩個(gè)函數(shù)都定義在bsp_date.c文件中。關(guān)于日期計(jì)算的細(xì)節(jié)此處不作詳細(xì)分析,其原理是以1970年1月1日0時(shí)0分0秒為計(jì)時(shí)基點(diǎn),對(duì)日期和以秒數(shù)表示時(shí)間戳進(jìn)行互相轉(zhuǎn)化,轉(zhuǎn)化重點(diǎn)在于閏年的計(jì)算。這兩個(gè)函數(shù)都是以格林威治時(shí)間(GMT)時(shí)區(qū)來計(jì)算的,在調(diào)用這些函數(shù)時(shí)我們會(huì)對(duì)輸入?yún)?shù)加入時(shí)區(qū)偏移的運(yùn)算,進(jìn)行調(diào)整。

/* Converts Gregorian date to seconds since 1970-01-01 0000.

* Assumes input in normal date format, i.e. 1980-12-31 2359

* => year=1980, mon=12, day=31, hour=23, min=59, sec=59.

*/

u32 mktimev(struct rtc_time *tm)

{

if (0 >= (int) (tm->tm_mon -= 2)) { /* 1..12 -> 11,12,1..10 */

tm->tm_mon += 12; /* Puts Feb last since it has leap day */

tm->tm_year -= 1;

}

return (((

(u32) (tm->tm_year/4 - tm->tm_year/100 + tm->tm_year/400 + 367*tm->tm_mon/12 + tm->tm_mday) +

tm->tm_year*365 - 719499

)*24 + tm->tm_hour /* now have hours */

)*60 + tm->tm_min /* now have minutes */

)*60 + tm->tm_sec; /* finally seconds */

}

void to_tm(u32 tim, struct rtc_time * tm)

{

register u32 i;

register long hms, day;

day = tim / SECDAY; //有多少天

hms = tim % SECDAY; //今天的時(shí)間,單位s

tm->tm_hour = hms / 3600;//時(shí)

tm->tm_min = (hms % 3600) / 60;//分

tm->tm_sec = (hms % 3600) % 60;//秒

/*算出當(dāng)前年份,起始的計(jì)數(shù)年份為1970年*/

for (i = STARTOFTIME; day >= days_in_year(i); i++) {

day -= days_in_year(i);

}

tm->tm_year = i;

/*計(jì)算當(dāng)前的月份*/

if (leapyear(tm->tm_year)) {

days_in_month(FEBRUARY) = 29;

}

for (i = 1; day >= days_in_month(i); i++) {

day -= days_in_month(i);

}

days_in_month(FEBRUARY) = 28;

tm->tm_mon = i;

tm->tm_mday = day + 1;//計(jì)算當(dāng)前日期

GregorianDay(tm); //計(jì)算當(dāng)前是星期幾

}

5、配置時(shí)間

有了以上的準(zhǔn)備,接下來學(xué)習(xí)一下Time_Adjust函數(shù)。Time_Adjust函數(shù)用于配置時(shí)間,它先調(diào)用前面的RTC_Configuration初始化RTC,接著調(diào)用庫函數(shù)RTC_SetCounter向RTC計(jì)數(shù)器寫入要設(shè)置時(shí)間的時(shí)間戳值,而時(shí)間戳的值則使用mktimev函數(shù)通過輸入?yún)?shù)tm來計(jì)算,計(jì)算后還與宏TIME_ZOOM運(yùn)算,計(jì)算時(shí)區(qū)偏移值。此處的輸入?yún)?shù)tm是北京時(shí)間,所以“mktimev(tm)- TIME_ZOOM”計(jì)算后寫入到RTC計(jì)數(shù)器的是格林威治時(shí)區(qū)的標(biāo)準(zhǔn)UNIX時(shí)間戳。

/*

* 函數(shù)名:Time_Adjust

* 描述 :時(shí)間調(diào)節(jié)

* 輸入 :用于讀取RTC時(shí)間的結(jié)構(gòu)體指針(北京時(shí)間)

* 輸出 :無

*/

void Time_Adjust(struct rtc_time *tm)

{

RTC_Configuration();//RTC 配置

RTC_WaitForLastTask(); //等待確保上一次操作完成

GregorianDay(tm); //計(jì)算星期

RTC_SetCounter(mktimev(tm)-TIME_ZOOM); //由日期計(jì)算時(shí)間戳并寫入到RTC計(jì)數(shù)寄存器

RTC_WaitForLastTask(); //等待確保上一次操作完成

}

6、檢查并配置RTC

上面的Time_Adjust函數(shù)直接把參數(shù)寫入到RTC中修改配置,但在芯片每次上電時(shí),并不希望每次都修改系統(tǒng)時(shí)間,所以我們?cè)黾恿薘TC_CheckAndConfig函數(shù)用于檢查是否需要向RTC寫入新的配置。

/*

* 函數(shù)名:RTC_CheckAndConfig

* 描述 :檢查并配置RTC

* 輸入 :用于讀取RTC時(shí)間的結(jié)構(gòu)體指針

* 輸出 :無

*/

void RTC_CheckAndConfig(struct rtc_time *tm)

{

/*在啟動(dòng)時(shí)檢查備份寄存器BKP_DR1,如果內(nèi)容不是0xA5A5,則需重新配置時(shí)間并詢問用戶調(diào)整時(shí)間*/

if (BKP_ReadBackupRegister(RTC_BKP_DRX) != RTC_BKP_DATA)

{

Time_Adjust(tm);//使用tm的時(shí)間配置RTC寄存器

BKP_WriteBackupRegister(RTC_BKP_DRX, RTC_BKP_DATA);//向BKP_DR1寄存器寫入標(biāo)志

}

else

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能時(shí)鐘

PWR_BackupAccessCmd(ENABLE);//允許訪問 Backup 區(qū)域

#ifdef RTC_CLOCK_SOURCE_LSI// LSE啟動(dòng)無需設(shè)置新時(shí)鐘

RCC_LSICmd(ENABLE);//使能 LSI

while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); //等待 LSI 準(zhǔn)備好

#endif

if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)//檢查是否掉電重啟

{

printf(" Power On Reset occurred....");

}

else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)//檢查是否Reset復(fù)位

{

printf(" External Reset occurred....");

}

printf(" No need to configure RTC....");

RTC_WaitForSynchro();//等待寄存器同步

RTC_ITConfig(RTC_IT_SEC, ENABLE);//允許RTC秒中斷

RTC_WaitForLastTask();//等待上次RTC寄存器寫操作完成

}

RCC_ClearFlag();//清除復(fù)位標(biāo)志 flags

}

在本函數(shù)中,會(huì)檢測備份域寄存器RTC_BKP_DRX內(nèi)的值是否等于RTC_BKP_DATA而分成兩個(gè)分支。若不等,說明之前沒有配置RTC所以直接調(diào)用Time_Adjust函數(shù)初始化RTC并寫入時(shí)間戳進(jìn)行計(jì)時(shí),配置完成后向備份域寄存器RTC_BKP_DRX寫入值RTC_BKP_DATA作為標(biāo)志,這樣該標(biāo)志就可以指示RTC的配置情況了,因?yàn)閭浞萦虿坏綦姇r(shí),RTC和該寄存器的值都會(huì)保存完好,而如果備份域掉電,那么RTC配置和該標(biāo)志都會(huì)一同丟失。

若本函數(shù)的標(biāo)志判斷相等,進(jìn)入else分支,不再調(diào)用Time_Adjust函數(shù)初始化RTC,而只是使用RTC_WaitForSynchro和RTC_ITConfig同步RTC域和APB以及使能中斷,以便獲取時(shí)間。如果使用的是LSI時(shí)鐘,還需要使能LSI時(shí)鐘,RTC才會(huì)正常運(yùn)行,這是因?yàn)楫?dāng)主電源掉電和備份域的情況下LSI會(huì)關(guān)閉,而LSE則會(huì)正常運(yùn)行,驅(qū)動(dòng)RTC計(jì)時(shí)。

7、轉(zhuǎn)換并輸出時(shí)間

RTC正常運(yùn)行后,可以使用Time_Display函數(shù)轉(zhuǎn)換時(shí)間格式并輸出到串口。

/*

* 函數(shù)名:Time_Display

* 描述 :顯示當(dāng)前時(shí)間值

* 輸入 :-TimeVar RTC計(jì)數(shù)值,單位為 s

* 輸出 :無

*/

void Time_Display(uint32_t TimeVar,struct rtc_time *tm)

{

static uint32_t FirstDisplay = 1;

uint32_t BJ_TimeVar;

uint8_t str[200]; //字符串暫存

BJ_TimeVar =TimeVar + TIME_ZOOM; //把標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)換為北京時(shí)間

to_tm(BJ_TimeVar, tm);//把定時(shí)器的值轉(zhuǎn)換為北京時(shí)間

if((!tm->tm_hour && !tm->tm_min && !tm->tm_sec) || (FirstDisplay))

{

GetChinaCalendar((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str);

printf(" 今天新歷:%0.2d%0.2d,%0.2d,%0.2d", str[0], str[1], str[2], str[3]);

GetChinaCalendarStr((u16)tm->tm_year,(u8)tm->tm_mon,(u8)tm->tm_mday,str);

printf(" 今天農(nóng)歷:%s ", str);

if(GetJieQiStr((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str))

{

printf(" 今天農(nóng)歷:%s ", str);

}

FirstDisplay = 0;

}

/* 輸出時(shí)間戳,公歷時(shí)間 */

printf(" UNIX時(shí)間戳 = %d 當(dāng)前時(shí)間為: %d年(%s年) %d月 %d日 (星期%s) %0.2d:%0.2d:%0.2d ",TimeVar,

tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday,

WEEK_STR[tm->tm_wday], tm->tm_hour, tm->tm_min, tm->tm_sec);}

本函數(shù)的核心部分已加粗顯示,主要是使用to_tm把時(shí)間戳轉(zhuǎn)換成日常生活中使用的時(shí)間格式,to_tm以BJ_TimeVar作為輸入?yún)?shù),而BJ_TimeVar對(duì)時(shí)間戳變量Time_Var進(jìn)行了時(shí)區(qū)偏移,也就是說調(diào)用Time_Display函數(shù)時(shí),以RTC計(jì)數(shù)器的值作為TimeVar作為輸入?yún)?shù)即可,最終會(huì)輸出北京時(shí)間。利用to_tm轉(zhuǎn)換格式后,調(diào)用bsp_calendar.c文件中的日歷計(jì)算函數(shù),求出星期、農(nóng)歷、生肖等內(nèi)容,然后使用串口顯示出來。

8、中斷服務(wù)函數(shù)

一般來說,上面的Time_Display時(shí)間顯示每秒中更新一次,而根據(jù)前面的配置,RTC每秒會(huì)進(jìn)入一次中斷,本實(shí)驗(yàn)中的RTC中斷服務(wù)函數(shù)如下。RTC的秒中斷服務(wù)函數(shù)只是簡單地對(duì)全局變量TimeDisplay置1,在main函數(shù)的while循環(huán)中會(huì)檢測這個(gè)標(biāo)志,當(dāng)標(biāo)志為1時(shí),就調(diào)用Time_Display函數(shù)顯示一次時(shí)間,達(dá)到每秒鐘更新當(dāng)前時(shí)間的效果。

void RTC_IRQHandler(void)

{

if (RTC_GetITStatus(RTC_IT_SEC) != RESET)

{

RTC_ClearITPendingBit(RTC_IT_SEC); //清中斷標(biāo)志

TimeDisplay = 1; //置位秒顯示更新任務(wù)標(biāo)志

RTC_WaitForLastTask(); //等待RTC操作完成

}

}

9、main函數(shù)

main函數(shù)的流程非常清晰,初始化了按鍵、串口等外設(shè)后,調(diào)用RTC_CheckAndConfig函數(shù)初始化RTC,若RTC是第一次初始化,就使用變量systmtime中的默認(rèn)時(shí)間配置,若之前已配置好RTC,那么RTC_CheckAndConfig函數(shù)僅同步時(shí)鐘系統(tǒng),便于獲取實(shí)時(shí)時(shí)間。在 while循環(huán)里檢查中斷設(shè)置的TimeDisplay是否置1,若置1了就調(diào)用Time_Display函數(shù),它的輸入?yún)?shù)是庫函數(shù)RTC_GetCounter的返回值,也就是RTC計(jì)數(shù)器里的時(shí)間戳,Time_Display函數(shù)把該時(shí)間戳轉(zhuǎn)化成北京時(shí)間顯示到串口上。

/**

* @brief 主函數(shù)

* @param

* @retval 無

*/

int main()

{

USART_Config();

Key_GPIO_Config();

RTC_NVIC_Config();/* 配置RTC秒中斷優(yōu)先級(jí) */

RTC_CheckAndConfig(&systmtime);

while (1)

{

if (TimeDisplay == 1)//每過1s 更新一次時(shí)間

{

Time_Display( RTC_GetCounter(),&systmtime); //當(dāng)前時(shí)間

TimeDisplay = 0;

}

//按下按鍵,通過串口修改時(shí)間

if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )

{

struct rtc_time set_time;

Time_Regulate_Get(&set_time);//使用串口接收設(shè)置的時(shí)間,輸入數(shù)字時(shí)注意末尾要加回車

Time_Adjust(&set_time);//用接收到的時(shí)間設(shè)置RTC

BKP_WriteBackupRegister(RTC_BKP_DRX, RTC_BKP_DATA);//向備份寄存器寫入標(biāo)志

}

}

}

main函數(shù)中當(dāng)檢測到開發(fā)板上的KEY1被按下時(shí),會(huì)調(diào)用Time_Regulate_Get函數(shù)通過串口獲取配置時(shí)間,然后把獲取得的時(shí)間輸入到Time_Adjust函數(shù)把該時(shí)間寫入到RTC計(jì)數(shù)器中,更新配置。Time_Regulate_Get函數(shù)的本質(zhì)是利用重定向到串口的C標(biāo)準(zhǔn)數(shù)據(jù)流輸入函數(shù)scanf獲取用戶輸入,若獲取得的數(shù)據(jù)符合范圍,則賦值到tm結(jié)構(gòu)體中,在main函數(shù)中再調(diào)用Time_Adjust函數(shù)把tm存儲(chǔ)的時(shí)間寫入到RTC計(jì)數(shù)器中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5394

    瀏覽量

    122226
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5270

    瀏覽量

    99833
  • 萬年歷
    +關(guān)注

    關(guān)注

    3

    文章

    189

    瀏覽量

    24136
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    598

    瀏覽量

    67701

原文標(biāo)題:MCU微課堂|CKS32F107xx RTC(二)

文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    電子萬年歷設(shè)計(jì)

    電子萬年歷設(shè)計(jì)
    發(fā)表于 08-20 22:46

    萬年歷

    如何在萬年歷加上鬧鐘
    發(fā)表于 09-24 15:29

    萬年歷電路圖

    萬年歷電路圖萬年歷電路圖
    發(fā)表于 08-05 14:59

    萬年歷

    萬年歷萬年歷萬年歷萬年歷
    發(fā)表于 03-20 21:08

    萬年歷 仿真

    游戲 萬年歷
    發(fā)表于 07-08 11:19

    怎么用FPGA實(shí)現(xiàn)萬年歷的設(shè)計(jì)

    問各位大神們?cè)鯓佑肍PGA實(shí)現(xiàn)數(shù)碼萬年歷的設(shè)計(jì)
    發(fā)表于 07-03 08:31

    STM32RTC萬年歷制作本設(shè)計(jì)

    寫博客,請(qǐng)多多關(guān)照本設(shè)計(jì)是用STM32F103c8t6制作的簡單萬年歷后續(xù)功能會(huì)添加,也請(qǐng)廣大網(wǎng)友給本設(shè)計(jì)出出主意,若有錯(cuò)誤或更好的方法,請(qǐng)多多指正,虛心受教,謝謝首先是配置RTC時(shí)鐘用庫函數(shù)...
    發(fā)表于 08-12 06:26

    如何利用C51單片機(jī)實(shí)現(xiàn)萬年歷設(shè)計(jì)?

    如何利用C51單片機(jī)實(shí)現(xiàn)萬年歷設(shè)計(jì)?
    發(fā)表于 11-08 06:39

    基于單片機(jī)的液晶多功能萬年歷設(shè)計(jì)資料分享

    單片機(jī)實(shí)訓(xùn)之萬年歷(具有時(shí)分秒,日期,星期調(diào)校功能什么是萬年歷????年歷是中國古代傳說中最古老的一部太陽歷。萬年歷是記錄一定時(shí)間范圍內(nèi)(比
    發(fā)表于 11-10 08:04

    stm32如何實(shí)現(xiàn)秒表及萬年歷的設(shè)計(jì)?

    stm32如何實(shí)現(xiàn)秒表及萬年歷的設(shè)計(jì)?
    發(fā)表于 12-15 07:06

    如何利用STM32與3264點(diǎn)陣屏實(shí)現(xiàn)功能萬年歷的設(shè)計(jì)

    基于STM32與3264點(diǎn)陣屏的多功能萬年歷一、前因一次偶然的機(jī)會(huì),筆者得到了一塊二手的3264雙色點(diǎn)陣屏,一番把玩過后發(fā)現(xiàn)這個(gè)屏幕的顯示效果還是很棒的,就萌生了一個(gè)用這塊屏diy的想法,思來想去
    發(fā)表于 01-07 07:13

    基于FPGA的多功能電子萬年歷

    基于FPGA的多功能電子萬年歷,畢業(yè)論文
    發(fā)表于 10-29 17:19 ?22次下載

    萬年歷

    電子萬年歷,可以運(yùn)行的哦,單片機(jī)相關(guān)知識(shí)。
    發(fā)表于 05-17 11:09 ?16次下載

    萬年歷

    基于C51單片機(jī)的萬年歷
    發(fā)表于 12-17 20:48 ?119次下載

    萬年歷protues仿真 實(shí)時(shí)時(shí)鐘仿真 12864萬年歷仿真 5

    萬年歷protues仿真 實(shí)時(shí)時(shí)鐘仿真 12864萬年歷仿真 51萬年歷設(shè)計(jì)
    發(fā)表于 01-14 22:32 ?175次下載

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品
    主站蜘蛛池模板: 日本一本高清视频 | 日韩第十页 | 精品色综合 | 久久婷婷人人澡人人爱91 | 欧美色人阁 | 性夜影院爽黄e爽在线观看 羞羞色院91精品网站 | 农村妇女高清毛片一级 | 噜噜噜久久 | 亚洲一区二区在线 | 干干天天| 五月开心六月伊人色婷婷 | 午夜在线视频观看版 | 亚洲一卡2卡3卡4卡5卡乱码 | 精品一区二区三区自拍图片区 | 亚洲综合春色另类久久 | 国内精品视频在线 | 天天插狠狠干 | 大黄蕉 | 性视频网| 国产精品久久国产三级国不卡顿 | 亚洲精品国产美女在线观看 | 日本www色视频成人免费网站 | 午夜影院网站 | 色噜噜狠狠狠狠色综合久一 | 国产黄色在线网站 | 免费两性的视频网站 | 午夜剧| 久久中出 | 亚洲一在线 | 色综合天天综一个色天天综合网 | 欧美一区中文字幕 | 黄视频在线播放 | 成人网中文字幕色 | 国产拍拍拍免费视频网站 | 天天亚洲综合 | 日本骚视频| 视频综合网 | 狠狠曹| 欧美ol丝袜高跟秘书在线播放 | 午夜看一级特黄a大片黑 | 韩国在线a免费观看网站 |