基于ARM的萬年歷_第1頁
基于ARM的萬年歷_第2頁
基于ARM的萬年歷_第3頁
基于ARM的萬年歷_第4頁
基于ARM的萬年歷_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、嵌入式系統(tǒng)課程設(shè)計(jì)報(bào)告 基于arm的萬年歷系統(tǒng) 院 系: 機(jī)電學(xué)院 學(xué)生姓名: 專 業(yè): 應(yīng)用電子技術(shù)教育 班 級(jí): 指導(dǎo)教師: 田豐慶 杜留鋒 付廣春 陳艷鋒 完成時(shí)間: 2013年3月29日 摘要現(xiàn)在是一個(gè)知識(shí)爆炸的新時(shí)代,新產(chǎn)品、新技術(shù)層出不窮,電子技術(shù)的發(fā)展更是日新月異??梢院敛豢鋸埖恼f,電子技術(shù)的應(yīng)用無處不在,電子技術(shù)正在不斷地改變我們的生活,改變著我們的世界。在這快速發(fā)展的年代,時(shí)間對(duì)人們來說是越來越寶貴,在快節(jié)奏的生活時(shí),人們往往忘記了時(shí)間,一旦遇到重要的事情而忘記了時(shí)間,這將會(huì)帶來很大的損失。因此我們需要一個(gè)定時(shí)系統(tǒng)來提醒這些忙碌的人,而數(shù)字化的鐘表給人們帶來了極大的方便。電子

2、萬年歷是一種非常廣泛日常計(jì)時(shí)工作,對(duì)現(xiàn)代社會(huì)越來越流行。它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí)。由于單片機(jī)具有靈活性強(qiáng)、成本低、功耗低、保密性好等特點(diǎn),所以電子日歷時(shí)鐘一般都以單片機(jī)為核心,外加一些外圍設(shè)備來實(shí)現(xiàn),可以顯示年月日時(shí)分秒和溫度信息,具有可調(diào)整日期和時(shí)間功能。 近些年,隨著科技的發(fā)展和社會(huì)的進(jìn)步,人們對(duì)數(shù)字鐘的要求也越來越高,傳統(tǒng)的時(shí)鐘已不能滿足人們的需求。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化,有電子鬧鐘、數(shù)字鬧鐘等等。單片機(jī)在多功能數(shù)字鐘中的應(yīng)用已是非常普遍的,人們對(duì)數(shù)字鐘的功能及工作順序都非常熟悉。但是卻很少知道它的內(nèi)部結(jié)構(gòu)以及工作原理。由單片機(jī)作為數(shù)字鐘的核

3、心控制器,可以通過它的時(shí)鐘信號(hào)進(jìn)行計(jì)時(shí)實(shí)現(xiàn)計(jì)時(shí)功能,將其時(shí)間數(shù)據(jù)經(jīng)單片機(jī)輸出,利用顯示器顯示出來,通過按鍵可以進(jìn)行定時(shí)、校時(shí)功能。輸出設(shè)備顯示器可以用液晶顯示技術(shù)和數(shù)碼管顯示技術(shù)。目錄1 arm cortex-m簡介12 電子萬年歷的發(fā)展?fàn)顩r13 萬年歷硬件系統(tǒng)設(shè)計(jì)13.1 單片機(jī)內(nèi)部主電路如圖一所示13.2 時(shí)鐘電路如圖二所示24 程序流程圖35 程序運(yùn)行結(jié)果如圖五所示46 研究目的與意義4參考文獻(xiàn)6附錄7源程序71 arm cortex-m簡介arm cortex-m系列主要用于微控制器單片機(jī)(mcu)領(lǐng)域,是為了那些對(duì)功耗和成本非常敏感,同時(shí)對(duì)性能要求不斷增加的嵌入式應(yīng)用(如微控制器系統(tǒng)

4、、汽車電子與車身控制系統(tǒng)、各種家電、工業(yè)控制、醫(yī)療器械、玩具和無線網(wǎng)絡(luò)等)所設(shè)計(jì)與實(shí)現(xiàn)的。隨著在各種不同領(lǐng)域應(yīng)用需求的增加,微處理器市場也在趨于多樣化。cortex-m3是一個(gè)32位的單片機(jī)核,在傳統(tǒng)的單片機(jī)領(lǐng)域中,有一些不同于通用32位cpu應(yīng)用的要求,結(jié)合了多種創(chuàng)新性突破技術(shù),使得芯片供應(yīng)商可以提供超低費(fèi)用的芯片。m3處理器還集成了許多緊耦合系統(tǒng)外設(shè),合理利用了芯片空間,使系統(tǒng)能滿足下一代產(chǎn)品的控制需求。cortex的優(yōu)勢(shì)在于低功耗、低成本、高性能的結(jié)合,憑借縮小的內(nèi)核尺寸、出色的中斷延遲、集成的系統(tǒng)部件、靈活的硬件配置、快速的系統(tǒng)調(diào)試和簡易的軟件編程,cortex-m3處理器將成為廣大嵌

5、入式系統(tǒng)(從復(fù)雜的片上系統(tǒng)到低端微控制器)的理想解決方案。2 電子萬年歷的發(fā)展?fàn)顩r隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來越多。二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子萬年歷,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對(duì)穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時(shí)差從分級(jí)縮小到秒級(jí),代表性的產(chǎn)品就是帶有擺或擺輪游絲的機(jī)械鐘或表。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時(shí)精度更高的石英電子鐘表,使鐘表的走時(shí)月差從分級(jí)縮小到秒級(jí)。第三次革命就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用(電子萬年歷),使計(jì)時(shí)產(chǎn)品的走時(shí)日差從分級(jí)縮小到1/600萬秒

6、,從原有傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動(dòng)日期、星期、溫度以及其他日常附屬信息的顯示功能,它更符合消費(fèi)者的生活需求!因此,電子萬年歷的出現(xiàn)帶來了鐘表計(jì)時(shí)業(yè)界跨躍性的進(jìn)步!3 萬年歷硬件系統(tǒng)設(shè)計(jì)3.1 單片機(jī)內(nèi)部主電路如圖1所示圖1 單片機(jī)內(nèi)部主電路3.2 時(shí)鐘電路如圖2所示圖2 時(shí)鐘電路3.3 內(nèi)部串口電路如圖3所示圖3 內(nèi)部串口電路4 程序流程圖圖4 程序流程圖5 程序運(yùn)行結(jié)果如圖5所示程序通過宏定義來設(shè)置當(dāng)前時(shí)間,對(duì)開發(fā)板進(jìn)行初始化后,進(jìn)行設(shè)置和串口初始化,并打開中斷,當(dāng)設(shè)置時(shí)間到時(shí),程序讀取可編程計(jì)數(shù)器的值以或許信息,通過串口發(fā)送數(shù)據(jù)顯示

7、時(shí)鐘。圖5 程序運(yùn)行結(jié)果6 研究目的與意義二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(shí)代扮演者極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場地、教學(xué)室、公共場地等場合,可以說遍及人們生活的每一個(gè)角落。所以說電子萬年歷的開發(fā)是國家之所需,社會(huì)之所需,人民之所需。由于社會(huì)對(duì)信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促進(jìn)電子萬年歷發(fā)展并且投入市場得到廣泛應(yīng)用。 參考文獻(xiàn)1、 李佳. arm系列處理器應(yīng)用技術(shù)完全手冊(cè)m. 人民郵電出版社,2006.2、 彭剛,秦志強(qiáng).基于arm cortes-m3的stm

8、32系列嵌入式微控制器應(yīng)用實(shí)踐m.北京:電子工業(yè)出版社.2011.1 3、 李佳. arm系列處理器應(yīng)用技術(shù)完全手冊(cè)m. 人民郵電出版社,2006.4、 賴于樹. arm微處理器與應(yīng)用開發(fā)m. 電子工業(yè)出版社,2007.張綺文,謝建雄,謝勁心.arm嵌入式常用模塊與中和系統(tǒng)設(shè)計(jì)實(shí)例精講m. 電子工業(yè)出版社, 2007.5、 張綺文,謝建雄,謝勁心.arm嵌入式常用模塊與中和系統(tǒng)設(shè)計(jì)實(shí)例精講m. 電子工業(yè)出版社, 2007.6、 劉嵐 尹勇 李京蔚.基于arm的嵌入式系統(tǒng)開發(fā)m.電子工業(yè)出版社,2008.附錄源程序:#include stm32f10x.h#include stdio.h #in

9、clude calendar.h#include date.h_io uint32_t timedisplay = 0;void rcc_configuration(void);void nvic_configuration(void);void gpio_configuration(void);void usart_configuration(void);int fputc(int ch, file *f);void rtc_configuration(void);void time_regulate(struct rtc_time *tm);void time_adjust(void);v

10、oid time_display(uint32_t timevar);void time_show(void);u8 usart_scanf(u32 value);#define rtcclocksource_lseu8 const *week_str = 日, 一, 二, 三, 四, 五, 六;u8 const *zodiac_sign = 豬, 鼠, 牛, 虎, 兔, 龍, 蛇, 馬, 羊, 猴, 雞, 狗;struct rtc_time systmtime;int main() rcc_configuration(); nvic_configuration(); gpio_configu

11、ration(); usart_configuration(); if (bkp_readbackupregister(bkp_dr1) != 0xa5a5) printf(rnn rtc not yet configured.); rtc_configuration();printf(rn rtc configured.); time_adjust();bkp_writebackupregister(bkp_dr1, 0xa5a5);elseif (rcc_getflagstatus(rcc_flag_porrst) != reset) printf(rnn power on reset o

12、ccurred.);else if (rcc_getflagstatus(rcc_flag_pinrst) != reset) printf(rnn external reset occurred.); printf(rn no need to configure rtc.);rtc_waitforsynchro();rtc_itconfig(rtc_it_sec, enable);rtc_waitforlasttask(); #ifdef rtcclockoutput_enable rcc_apb1periphclockcmd(rcc_apb1periph_pwr | rcc_apb1per

13、iph_bkp, enable); pwr_backupaccesscmd(enable); bkp_tamperpincmd(disable); bkp_rtcoutputconfig(bkp_rtcoutputsource_calibclock);#endif rcc_clearflag(); time_show();void rcc_configuration()systeminit();rcc_apb2periphclockcmd(rcc_apb2periph_usart1 | rcc_apb2periph_gpioa, enable);void nvic_configuration(

14、) nvic_inittypedef nvic_initstructure; nvic_prioritygroupconfig(nvic_prioritygroup_1); nvic_initstructure.nvic_irqchannel = rtc_irqn; nvic_initstructure.nvic_irqchannelpreemptionpriority = 1; nvic_initstructure.nvic_irqchannelsubpriority = 0; nvic_initstructure.nvic_irqchannelcmd = enable; nvic_init

15、(&nvic_initstructure);void gpio_configuration() gpio_inittypedef gpio_initstructure; gpio_initstructure.gpio_pin = gpio_pin_9; gpio_initstructure.gpio_mode = gpio_mode_af_pp; gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpioa, &gpio_initstructure); gpio_initstructure.gpio_pin = gpio_p

16、in_10; gpio_initstructure.gpio_mode = gpio_mode_in_floating; gpio_init(gpioa, &gpio_initstructure);void usart_configuration() usart_inittypedef usart_initstructure;usart_initstructure.usart_baudrate = 115200;usart_initstructure.usart_wordlength = usart_wordlength_8b;usart_initstructure.usart_stopbit

17、s = usart_stopbits_1;usart_initstructure.usart_parity = usart_parity_no ;usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none; usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;usart_init(usart1, &usart_initstructure); usart_cmd(usart1, enable);int fputc(int ch

18、, file *f) usart_senddata(usart1, (unsigned char) ch); while (!(usart1-sr & usart_flag_txe); return (ch);void rtc_configuration() rcc_apb1periphclockcmd(rcc_apb1periph_pwr | rcc_apb1periph_bkp, enable); pwr_backupaccesscmd(enable); bkp_deinit(); #ifdef rtcclocksource_lsi rcc_lsicmd(enable); while(rc

19、c_getflagstatus(rcc_flag_lsirdy)=reset) rcc_rtcclkconfig(rcc_rtcclksource_lsi); #elif defined rtcclocksource_lse rcc_lseconfig(rcc_lse_on); while(rcc_getflagstatus(rcc_flag_lserdy)=reset) rcc_rtcclkconfig(rcc_rtcclksource_lse); #endif rcc_rtcclkcmd(enable); #ifdef rtcclockoutput_enable bkp_tamperpin

20、cmd(disable); bkp_rtccalibrationclockoutputcmd(enable); #endif rtc_waitforsynchro(); rtc_waitforlasttask(); rtc_itconfig(rtc_it_sec, enable); rtc_waitforlasttask(); #ifdef rtcclocksource_lsi rtc_setprescaler(31999); #elif defined rtcclocksource_lse rtc_setprescaler(32767); #endif rtc_waitforlasttask

21、();void time_regulate(struct rtc_time *tm) u32 tmp_yy = 0xff, tmp_mm = 0xff, tmp_dd = 0xff, tmp_hh = 0xff, tmp_mi = 0xff, tmp_ss = 0xff; printf(rn=time settings=); printf(rn 請(qǐng)輸入年份(please set years): 20); while (tmp_yy = 0xff) tmp_yy = usart_scanf(99); printf(nr 年份被設(shè)置為: 20%0.2dnr, tmp_yy); tm-tm_year

22、 = tmp_yy+2000; tmp_mm = 0xff; printf(rn 請(qǐng)輸入月份(please set months): ); while (tmp_mm = 0xff) tmp_mm = usart_scanf(12); printf(nr 月份被設(shè)置為: %dnr, tmp_mm); tm-tm_mon= tmp_mm; tmp_dd = 0xff; printf(rn 請(qǐng)輸入日期(please set dates): ); while (tmp_dd = 0xff) tmp_dd = usart_scanf(31); printf(nr 日期被設(shè)置為: %dnr, tmp_d

23、d); tm-tm_mday= tmp_dd; tmp_hh = 0xff; printf(rn 請(qǐng)輸入時(shí)鐘(please set hours): ); while (tmp_hh = 0xff) tmp_hh = usart_scanf(23); printf(nr 時(shí)鐘被設(shè)置為: %dnr, tmp_hh ); tm-tm_hour= tmp_hh; tmp_mi = 0xff; printf(rn 請(qǐng)輸入分鐘(please set minutes): ); while (tmp_mi = 0xff) tmp_mi = usart_scanf(59); printf(nr 分鐘被設(shè)置為:

24、%dnr, tmp_mi); tm-tm_min= tmp_mi; tmp_ss = 0xff; printf(rn 請(qǐng)輸入秒鐘(please set seconds): ); while (tmp_ss = 0xff) tmp_ss = usart_scanf(59); printf(nr 秒鐘被設(shè)置為: %dnr, tmp_ss); tm-tm_sec= tmp_ss;void time_adjust() rtc_waitforlasttask(); time_regulate(&systmtime); gregorianday(&systmtime); rtc_setcounter(mk

25、timev(&systmtime); rtc_waitforlasttask();void time_display(uint32_t timevar) static uint32_t firstdisplay = 1; u8 str15; to_tm(timevar, &systmtime); if(!systmtime.tm_hour & !systmtime.tm_min & !systmtime.tm_sec) | (firstdisplay) getchinacalendar(u16)systmtime.tm_year, (u8)systmtime.tm_mon, (u8)systmtime.tm_mday, str); printf(nrnr 今天農(nóng)歷:%0.2d%0.2d,%0.2d,%0.2d, str0, str1, str2, str3); getchinacalendarstr(u16)systmtime.tm_year,(u8)systmtime.tm_mon,(u8)systmtime.t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論