




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)內(nèi)容與要求課程設(shè)計(jì)目的:1、鞏固和加深對(duì)單片機(jī)原理知識(shí)的理解和運(yùn)用。2、進(jìn)一步提高學(xué)生綜合運(yùn)用所學(xué)知識(shí)的能力。3、培養(yǎng)學(xué)生綜合分析問(wèn)題、發(fā)現(xiàn)問(wèn)題和解決問(wèn)題的能力基本要求:1) 顯示時(shí)間和日期2) 可設(shè)置多個(gè)鬧鐘3) 可以調(diào)整時(shí)間擴(kuò)展功能:1) 按鍵復(fù)用 共有六個(gè)按鍵,每個(gè)按鍵在不同模式下有不同的功能。2) 秒表功能 進(jìn)入秒表界面后,再按一下就秒表開始計(jì)時(shí),再按一下秒表停止。3) 省電模式 在每天00:00會(huì)自動(dòng)進(jìn)入省電模式,8個(gè)數(shù)碼管會(huì)自動(dòng)關(guān)閉,到5:00時(shí)會(huì)自動(dòng)退出省電模式;也可以手動(dòng)進(jìn)入和退出省電模式。4) 查看/刪除鬧鐘 查看鬧鐘時(shí)間為五秒,五秒內(nèi)按鍵無(wú)動(dòng)作則自動(dòng)退出。器件介紹本
2、次設(shè)計(jì)主要用到的硬件有:1、51實(shí)驗(yàn)板1塊2、stm8s105c6開發(fā)板1快51實(shí)驗(yàn)板:主要用到實(shí)驗(yàn)板上的硬件有:1) 兩個(gè)四位一體的共陰LED數(shù)碼管,電路圖如下:2)兩個(gè)74HC573的鎖存芯片:3)8個(gè)獨(dú)立按鍵,用了其中6個(gè)5) 一個(gè)蜂鳴器:Stm8s105c6開發(fā)板:總共有48個(gè)引腳,本設(shè)計(jì)共用引腳20個(gè)引腳。PB0PB7和PE6PE7用于數(shù)碼管顯示控制,PD0PD5用于鍵盤輸入,PD6、 PE0、PE3用于LED指示燈控制。PD7用于蜂鳴器控制。設(shè)計(jì)方案本次設(shè)計(jì)采用51實(shí)驗(yàn)板和stm8s105c6開發(fā)板來(lái)完成,沒(méi)有做實(shí)物。顯示電路采用8個(gè)共陽(yáng)數(shù)碼管顯示;控制按鍵采用六個(gè)獨(dú)立按鍵,每一個(gè)
3、按鍵都有復(fù)用功能;鬧鐘提醒采用蜂鳴器;外加四個(gè)不同顏色的LED發(fā)光二極管,當(dāng)進(jìn)入相應(yīng)功能模式時(shí)對(duì)應(yīng)的指示燈就會(huì)亮。1、鍵盤設(shè)計(jì):在鍵盤電路中,使用的是6個(gè)獨(dú)立鍵盤。鍵盤在源程序中的功能安排如下:1)當(dāng)掃描到有鍵盤按下時(shí),設(shè)置相應(yīng)標(biāo)志位,然后延時(shí)一定時(shí)間消抖。2)鍵盤的設(shè)置鍵盤表面如圖:OkEsc其中各鍵設(shè)置為:(待機(jī)狀態(tài):正常的時(shí)間顯示模式)待機(jī)狀態(tài)下是“設(shè)置鬧鐘”,在其他模式下是“遞增功能”待機(jī)狀態(tài)下是“調(diào)整時(shí)間”,在其他模式下是“遞減功能”。 待機(jī)狀態(tài)下是“秒表功能”,在其他模式下是“左移功能”。 待機(jī)狀態(tài)下是“查看/刪除鬧鐘”,在其他模式下是“右移功能”O(jiān)K 待機(jī)狀態(tài)下是“切換顯示”,在
4、省電模式下是“退出功能”,在其他模式下是“確認(rèn)功能”Esc 待機(jī)狀態(tài)下是“省電模式”,在查看/刪除鬧鐘模式下是“刪除功能”,在其他模式下是“退出功能”2、數(shù)碼管顯示:采用按位掃描的動(dòng)態(tài)顯示方式。3、其他設(shè)計(jì):定時(shí)器使用stm8s105c6中的Tim2定時(shí)器,每1ms產(chǎn)生一次溢出中斷。鬧鈴響的時(shí)間為15秒。查看/刪除鬧鐘模式下,5s內(nèi)鍵盤無(wú)動(dòng)作則自動(dòng)退出。每次按鍵按下后,會(huì)延時(shí)240ms,此時(shí)間內(nèi)不會(huì)再對(duì)鍵盤進(jìn)行掃描。在每天00:00會(huì)自動(dòng)進(jìn)入省電模式,8個(gè)數(shù)碼管會(huì)自動(dòng)關(guān)閉,到5:00時(shí)會(huì)自動(dòng)退出省電模式;也可以手動(dòng)進(jìn)入和退出省電模式。4、設(shè)計(jì)思路:開始初始化引腳和Tim2定時(shí)器調(diào)用時(shí)間處理函數(shù)
5、鬧鈴響鬧鐘時(shí)間? 是 否掃描鍵盤鬧鐘設(shè)置位=1?是時(shí)間調(diào)整位=1? 否 是調(diào)用相應(yīng)功能函數(shù) 否秒表功能位=1? 是 否查看鬧鐘位=1? 是 否顯示切換位=1?顯示日期 是 是 否顯示時(shí)間5、以下是部分程序:/*標(biāo)志位*/_Bool off;/省電模式_Bool tab;/切換顯示模式_Bool run;/控制秒表_Bool left;/左移_Bool right;/右移_Bool set;/設(shè)置鬧鐘_Bool adjust;/調(diào)整時(shí)間_Bool ok;/確定_Bool esc;/取消或刪除_Bool duan PE_ODR:7; /PE6作為段鎖存_Bool wei PE_ODR:6; /PE
6、7作為位鎖存_Bool set_c PE_ODR:3;_Bool adjust_t PE_ODR:0;_Bool check_clock PD_ODR:6;_Bool c_alarm PD_ODR:7;/*相關(guān)變量*/unsigned char month_day=31,28,31,30,31,30,31,31,30,31,30,31;unsigned char wei_ma=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/顯示位碼unsigned char duan_ma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7
7、f,0x6f; /共陰極顯示段碼unsigned char sec_duan_ma=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;unsigned char hour_5,minute_5,second_5=1,2,3,4,5;/用于秒表unsigned char sec_time8;/用于秒表unsigned char clocks58;/可存5個(gè)鬧鐘信息unsigned char times8;/存放當(dāng)前時(shí)間unsigned char days8;/存放當(dāng)前日期unsigned int T1=1000;/200x10ms=1s秒計(jì)算un
8、signed int T2=0;/20x10ms=200msunsigned char c=0;/用于記錄鬧鐘個(gè)數(shù)unsigned char hour=8,minute=55,second;unsigned char month=12,day=12;int year=2011;unsigned char *ud;/ud加減指針unsigned char lr;/記錄指針?biāo)肝籧har A,B,C,D,E,F,G,H,I,J,K,L;int T3=0,T4=0;/其他定時(shí),鬧鐘顯示和蜂鳴器int sec1,sec2;/用于秒表的變量/*函數(shù)聲明*/unsigned char leapyear(i
9、nt b);/閏年判斷void TIM2_initial(void);/初始化定時(shí)器void GPIO_initial(void);/初始化I/O引腳void display(unsigned char x8);/時(shí)間顯示函數(shù)void time_process(void);/時(shí)間處理函數(shù)void times_bi_duan_ma(unsigned char,unsigned char,unsigned char);void days_bi_duan_ma(int,unsigned char,unsigned char);void keyscan(void);/鍵盤掃描函數(shù)void set_cl
10、ock(void);/設(shè)置鬧鐘void adjust_times(void);/void clock_display(void);/鬧鐘顯示函數(shù)void alarm(void);void second_clock(void);/*主函數(shù)*/main()GPIO_initial();TIM2_initial();leapyear(year);while(1)time_process();alarm();if(T2=0)/消抖,延時(shí)100mskeyscan();if(hour=0&minute=0&second=0)off=1;if(hour=5&minute=0&
11、second=0)off=0;if(set=0&adjust=0&left=0&right=0&ok=0&off=1) PB_ODR=0xff;/不顯示時(shí)間,省電模式wei=1;wei=0;else if(set=1&adjust=0)/設(shè)置鬧鐘模式 set_c=0;set_clock(); else if(set=0&adjust=1)/調(diào)整時(shí)間模式 adjust_t=0;adjust_times();else if(left=1)/秒表模式second_clock();else if(right=1)/查看/刪除鬧鐘模式check_c
12、lock=0; clock_display();else if(tab=0) times_bi_duan_ma(hour,minute,second); display(times);/時(shí)間顯示 else if(tab=1)days_bi_duan_ma(year,month,day); display(days); /*秒表函數(shù)*/void second_clock(void)if(sec1=999)sec1=999;sec_time0=0x00; sec_time1=0x00; sec_time2=0x00; sec_time3=duan_masec1/100; sec_time4=dua
13、n_masec1%100/10; sec_time5=sec_duan_masec1%10; sec_time6=duan_masec2/10;/小數(shù)位 sec_time7=duan_masec2%10;/小數(shù)位display(sec_time);if(esc=1) left=0;run=0;sec1=0; sec2=0;esc=0;/*鬧鐘設(shè)置*/void set_clock(void)unsigned char i,j; display(times);if(lr=0)ud=&G;/指針指向Gif(lr=1)ud=&H;if(lr=3)ud=&I;if(lr=4)ud
14、=&J;if(lr=6)ud=&K;if(lr=7)ud=&L;timeslr=duan_ma*ud;/*ud即是ud所指變量的當(dāng)前值if(ok=1)hour_c=G*10+H;minute_c=I*10+J;second_c=K*10+L;if(c=4)c=0;else c+;set=0;ud=0;lr=0;right=0;left=0;ok=0;set_c=1;/*校時(shí)函數(shù)*/void adjust_times(void)if(ok=0)display(days);if(lr=0)ud=&A;if(lr=1)ud=&B;if(lr=3)ud=&
15、;C;if(lr=4)ud=&D;if(lr=6)ud=&E;if(lr=7)ud=&F;dayslr=duan_ma*ud;if(ok=1)display(times);if(lr=0)ud=&G;if(lr=1)ud=&H;if(lr=3)ud=&I;if(lr=4)ud=&J;if(lr=6)ud=&K;if(lr=7)ud=&L;timeslr=duan_ma*ud;if(esc=1&ok=1)year=2000+A*10+B;month=C*10+D;day=E*10+F;hour=G*10+H;minu
16、te=I*10+J;second=K*10+L;ok=0;esc=0;lr=0;ud=0;adjust=0;T1=100;adjust_t=1;/*時(shí)間處理函數(shù)*/void time_process(void) if(second>=60) /秒到60,分鐘加1 second=0; minute+; if(minute>=60)/分鐘到60,小時(shí)加1 minute=0; hour+; if(hour>=24)/小時(shí)到24,回零 hour=0; leapyear(year);/閏、平年計(jì)算if(day>=month_daymonth-1)/是否到了每月的最后一天 day=
17、1;if(month>=12) month=1; year+; else month+;else day+; /*時(shí)間數(shù)據(jù)的轉(zhuǎn)換*/void times_bi_duan_ma(unsigned char hour,unsigned char minute,unsigned char second)G=hour/10;H=hour%10;I=minute/10;J=minute%10;K=second/10;L=second%10; times0=duan_maG; /時(shí)/數(shù)據(jù)的轉(zhuǎn)換,因我們采用數(shù)碼管09的顯示,將數(shù)據(jù)分開 times1=duan_maH; times2=0x40; /加入
18、"-" times3=duan_maI;/分 times4=duan_maJ; times5=0x40; times6=duan_maK;/秒 times7=duan_maL; /*日期數(shù)據(jù)的轉(zhuǎn)換*/ void days_bi_duan_ma(int year,unsigned char month,unsigned char day) A=(year%100)/10);B=(year%100)%10); C=month/10;D=month%10; E=day/10;F=day%10; days0=duan_maA;/年 days1=duan_maB; days2=0x4
19、0; days3=duan_maC;/月 days4=duan_maD; days5=0x40; days6=duan_maE;/日 days7=duan_maF; /*時(shí)間顯示函數(shù)*/void display(unsigned char time8)unsigned char a=0,i;while(a<8)PB_ODR=0x00;/確保清除之前的數(shù)據(jù),防止重影duan=1;duan=0;if(set=1|adjust=1)&a=lr&T1<=50)PB_ODR=0xff;/指針?biāo)傅奈婚W爍elsePB_ODR=wei_maa;wei=1;wei=0; PB_OD
20、R=timea+; duan=1; duan=0; for(i=100;i>0;i-);/延時(shí)a=0;/*查看/刪除鬧鐘函數(shù)*/void clock_display(void)unsigned char a=0,i;times_bi_duan_ma(hour_lr,minute_lr,second_lr);display(times);if(esc=1)esc=0;for(i=0;i<8;i+)hour_lr=0; minute_lr=0; second_lr=lr+1; if(T3=0)right=0;/5s內(nèi)鍵盤無(wú)輸入,切換到原來(lái)的顯示模式/*鍵盤掃描函數(shù)*/void keys
21、can(void)T2=241;/延時(shí)241ms,消抖if(PD_IDR&0x01)=0x00)/加或設(shè)置鬧鐘按鍵if(set=1|adjust=1)/鬧鐘或校時(shí)模式下if(*ud=9)*ud=0;else(*ud)+;/ud所指的變量加1else /正常顯示模式下 set=1; esc=0;ok=0; else if(PD_IDR&0x02)=0x00)/減或調(diào)整時(shí)間if(set=1|adjust=1)/鬧鐘或校時(shí)模式下if(*ud=0)*ud=9;else(*ud)-;/ud所指的變量減1else /正常顯示模式下 adjust=1;esc=0;ok=0;else if(P
22、D_IDR&0x04)=0x00)/左移/查看鬧鐘if(set=1|adjust=1)/鬧鐘或校時(shí)模式下lr-;if(lr=255)lr=7; else if(lr=5)lr=4;/跳過(guò)第3和6個(gè)數(shù)碼管 else if(lr=2)lr=1;else if(right=1)/查看鬧鐘模式下T3=5000; if(lr=0)lr=4;else lr-;else if(left=1)run=run1;/為1時(shí)秒表開始計(jì)時(shí)else left=1;esc=0;ok=0;else if(PD_IDR&0x08)=0x00)/右移/查看鬧鐘if(set=1|adjust=1)/鬧鐘或校時(shí)模式
23、下lr+;if(lr=8)lr=0;/跳過(guò)第3和6個(gè)數(shù)碼管 else if(lr=2)lr=3;else if(lr=5)lr=6;else if(right=1)/查看鬧鐘模式下T3=5000; if(lr=4)lr=0;else lr+;else right=1;T3=5000;esc=0;ok=0;else if(PD_IDR&0x10)=0x00)/確定off=0;/退出省電模式 tab=tab1;if(ok=0)ok=1;else if(ok=1&adjust=1)esc=1;else if(PD_IDR&0x20)=0x00)/取消刪除或進(jìn)入省電模式if(a
24、djust=1|set=1)set=0; ok=0; lr=0; ud=0; adjust=0;set_c=1; adjust_t=1; check_clock=1; else if(set=0&adjust=0&left=0&right=0) off=1;ok=0;else esc=1;else 1;調(diào)試過(guò)程因?yàn)榇舜纬绦虮容^大,實(shí)現(xiàn)的功能比較多,所以從一開始我便一個(gè)功能一個(gè)功能的做,邊做邊調(diào)試,做完一個(gè)功能之后才做下一個(gè)。第一次做數(shù)碼管顯示的時(shí)候就出現(xiàn)問(wèn)題,8個(gè)數(shù)碼管一直顯示亂碼。當(dāng)時(shí)我就把程序用原來(lái)的動(dòng)態(tài)顯示改為靜態(tài)顯示,可是還是不行。于是我就再把8個(gè)數(shù)碼管同時(shí)顯示改為一個(gè)數(shù)碼管顯示,這下就可以了。然后我又再把顯示的位數(shù)慢慢增加,當(dāng)增加到第5位的時(shí)候發(fā)現(xiàn),亂碼又來(lái)了,之后我又改用其他引腳,發(fā)現(xiàn)原來(lái)之前寫的程序時(shí)沒(méi)有錯(cuò)的,是因?yàn)樾酒囊粋€(gè)引腳出問(wèn)題了,不知道為什么,那個(gè)引腳總是高電平。所以才導(dǎo)致了之前的亂碼一直出來(lái)。數(shù)碼管調(diào)試好之后,其他的程序調(diào)試起來(lái)就順利多了,在用到蜂鳴器的時(shí)候還遇到了一個(gè)問(wèn)題。因?yàn)橹罢n程設(shè)計(jì)做蜂鳴器電路的時(shí)候都是做
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商品賒銷合同范例
- 與政府簽訂合同范本
- 吳江區(qū)勞務(wù)派遣合同范本
- 商務(wù)模特合同范本
- 陶行知課題申報(bào)書
- 課題申報(bào)書實(shí)踐反思
- 單位租賃房產(chǎn)合同范本
- 品牌與宣傳合同范本
- 商品買賣購(gòu)銷合同范本
- 企業(yè)合作聯(lián)盟合同范本
- 2025年包頭輕工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)新版
- 2025年懷化師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫(kù)帶答案
- 2025年湖北幼兒師范高等專科學(xué)校單招職業(yè)技能測(cè)試題庫(kù)含答案
- 2025年廣東生態(tài)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)完美版
- 模具轉(zhuǎn)移合同協(xié)議書
- 政治-貴州省貴陽(yáng)市2025年高三年級(jí)適應(yīng)性考試(一)(貴陽(yáng)一模)試題和答案
- 公司副總經(jīng)理英文簡(jiǎn)歷
- DeepSeek學(xué)習(xí)科普專題
- 2025浙江杭州地鐵運(yùn)營(yíng)分公司校園招聘665人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025四川省小金縣事業(yè)單位招聘362人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025春季學(xué)期少先隊(duì)工作安排表
評(píng)論
0/150
提交評(píng)論