單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告_第1頁
單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告_第2頁
單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告_第3頁
單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告_第4頁
單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.單片機(jī)萬年歷實(shí)訓(xùn)報(bào)告系 部:電氣自動(dòng)化系班 級(jí):13電信2班姓 名:周祝福指導(dǎo)老師:黃麗英、侯聰玲實(shí)訓(xùn)時(shí)間:2015年1月19日~23日精選word范本!.用AT89C51與LCD1602設(shè)計(jì)的可調(diào)式電子日歷時(shí)鐘一、總體設(shè)計(jì)1.1、設(shè)計(jì)目的為鞏固所學(xué)的單片機(jī)知識(shí),把所學(xué)理論運(yùn)用到實(shí)踐中,用LCD1602與AT89C51設(shè)計(jì)可調(diào)式電子日歷時(shí)鐘。1.2、設(shè)計(jì)要求(1)顯示:年、月、日、時(shí)、分、秒和星期;(2)設(shè)置年、月、日、時(shí)、分、秒和星期的初始狀態(tài) ;(3)能夠用4個(gè)按鍵調(diào)整日歷時(shí)鐘的 年、月、日、時(shí)、分、秒和星期 ;完成可調(diào)式電子日歷時(shí)鐘的硬件和軟件的設(shè)計(jì),包括單片機(jī)的相關(guān)內(nèi)容;日歷時(shí)鐘模塊的設(shè)計(jì),液晶顯示模塊的設(shè)計(jì),按鍵模塊的設(shè)計(jì)??刂瞥绦虻木帉懙取?.3、系統(tǒng)基本方案選擇和論證1.3.1、單片機(jī)芯片的選擇方案方案一:采用89C51芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容。方案二:采用STC12C5A60S2系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。但造價(jià)較高。精選word范本!.1.3.2、顯示模塊選擇方案和論證:方案一:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用顯示數(shù)字顯得太浪費(fèi) ,且價(jià)格也相對(duì)較高。所以不用此種作為顯示。方案二:采用LED數(shù)碼管動(dòng)態(tài)掃描,雖然LED數(shù)碼管價(jià)格適中,但要顯示多個(gè)數(shù)字所需要的個(gè)數(shù)偏多,功耗較大,顯示出來的只是拼音,而不是漢字。所以也不用此種作為顯示。方案三:采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量字符,且視覺效果較好,外形美觀。LCD1602可實(shí)現(xiàn)顯示2行十六個(gè)字符。1.3.4、電路設(shè)計(jì)最終方案決定綜上各方案所述,對(duì)此次作品的方案選定:采用80C51作為主控制系統(tǒng);LCD1602液晶帶漢字庫顯示屏作為顯示部分。二、硬件設(shè)計(jì)2.1、電路設(shè)計(jì)模塊圖如圖LCD162塊按AT89C51 鍵控制模精選word范本!.2.3、用proteus 仿真軟件仿真并抓圖。精選word范本!.三、軟件設(shè)計(jì)3.1、畫出各個(gè)函數(shù)流程圖。3.1.1、LCD1602液晶顯示控制流程圖如圖入口對(duì)1602初始化寫入顯示設(shè)置命令延時(shí)一段時(shí)間檢查忙標(biāo)志是BF=7>?設(shè)置字符顯示位置延時(shí)一段時(shí)間向1602中寫入數(shù)據(jù)LCD顯示內(nèi)容返回主程序精選word范本!.3.1.2、調(diào)時(shí)函數(shù)控制流程如圖開始控制鍵有效,調(diào)整年 控制鍵有效,調(diào)整月等待按鍵程序 等待按鍵程序加有效 減有效 加有效 減有效年加1 年減1 月加1 月減1控制鍵有效,調(diào)整日 控制鍵有效,調(diào)整星期等待按鍵程序 等待按鍵程序加有效 減有效 加有效 減有效日加1 日減1 星期加 1 星期減 1控制鍵有效,調(diào)整時(shí) 控制鍵有效,調(diào)整分等待按鍵程序 等待按鍵程序加有效 減有效 加有效 減有效時(shí)加1 時(shí)減1 分加1 分減1按鍵有效跳出調(diào)時(shí)程序,進(jìn)入主循環(huán)精選word范本!.實(shí)訓(xùn)心得:通過為期一周的單片機(jī)實(shí)訓(xùn),是我們對(duì)這門課有了許多新的了解,彌補(bǔ)了在課堂上學(xué)習(xí)的不足。相信這對(duì)我們以后的學(xué)習(xí)和工作都會(huì)有很大的幫助。我們一定要在最短的時(shí)間里對(duì)這些不足加以改正!在試訓(xùn)中有苦有甜,當(dāng)我們?yōu)橐粋€(gè)很難攻破的程序找出路時(shí),心情煩躁,感覺自己很不可理喻,當(dāng)程序一點(diǎn)一點(diǎn)編好后,自己從心底感覺到一點(diǎn)小小的安慰,看著自己的成果。感覺很欣慰??偠灾?單片機(jī)課程設(shè)計(jì)對(duì)于我們有很大的幫助,我們從中受益匪淺。程序代碼。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintuchara,count,S1num,xqnum;ucharyue,ri,shi,fen,miao;uintnian;sbitlcdrs=P2^5;sbitlcdrw=P2^4;sbitlcden=P2^3;sbitS1=P3^0; //定義鍵--進(jìn)入設(shè)置sbitS2=P3^1; //定義鍵--增大sbitS3=P3^2; //定義鍵--減小sbitS4=P3^3; //定義鍵--退出設(shè)置ucharcodetable0[]="2015-01-11SUN";ucharcodetable1[]="00:00:00";ucharcodexingqi[][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/**************************************************1602液晶顯示器模塊*************************************************/精選word范本!.voidwrite_com(ucharcom) //液晶寫指令{lcdrw=0;lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_data(uchardat) //液晶寫數(shù)據(jù){lcdrw=0;lcdrs=1;P0=dat;delay(5);lcden=1;delay(5);lcden=0;}/********************************************年月日寫入 1602函數(shù)********************************************/voidwrite_sfm(ucharadd,uchardat) //寫時(shí)分秒函數(shù){ucharshi,ge;shi=dat/10;ge=dat%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}voidwrite_yr(ucharadd,uchardat) //寫月日函數(shù){ucharshi,ge;shi=dat/10;ge=dat%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}voidwrite_nian(ucharadd,uintdat) //寫年函數(shù){精選word范本!.uintqian,bai,shi,ge;qian=dat/1000;bai=dat%1000/100;shi=dat%100/10;ge=dat%10;write_com(0x80+add);write_data(0x30+qian);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);}/***************************************************1602初始化***************************************************/voidinit_lcd() //液晶初始化{lcden=0;nian=2015;yue=1;ri=11;shi=0; //初始shi、fen、miaofen=0;miao=0;write_com(0x38); //設(shè)置16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)口write_com(0x0c); //設(shè)置開顯示,不顯示光標(biāo)write_com(0x06); //寫一個(gè)字符后地址指針加 1write_com(0x01); //顯示清0,數(shù)據(jù)指針清 0}voidinit() //初始化函數(shù){init_lcd(); //液晶初始化write_com(0x80); //設(shè)置顯示初始坐標(biāo)for(a=0;a<14;a++) //顯示年月日初始值{write_data(table0[a]);delay(5);}write_com(0x80+0x40); //設(shè)置顯示初始坐標(biāo)for(a=0;a<8;a++) //顯示時(shí)分秒初始值{write_data(table1[a]);精選word范本!.delay(5);}write_nian(0,nian);write_sfm(6,miao); //分別將shi、fen、miao送去液晶顯示write_sfm(3,fen);write_sfm(0,shi);count=0;xqnum=0;S1num=0; //初始化全局變量 countTMOD=0x01; //設(shè)置定時(shí)器 0工作模式1TH0=(65535-50000)/256; //定時(shí)器裝初始值TL0=(65535-50000)%256;EA=1; //開總中斷ET0=1; //開定時(shí)器 0中斷TR0=1; //啟動(dòng)定時(shí)器 0}/**************************************************獨(dú)立鍵盤*************************************************/voidkeyscan(){if(S1==0){delay(5); //確認(rèn)定義鍵被按下if(S1==0){S1num++; //定義鍵S1按下次數(shù)記錄while(!S1); //釋放按鍵確認(rèn)if(S1num==1) //S1按下一次時(shí){TR0=0; //關(guān)閉定時(shí)器write_com(0xc0+7); //光標(biāo)定位到秒位置write_com(0x0f); //光標(biāo)閃爍}if(S1num==2) //S1按下兩次時(shí){write_com(0xc0+4); //光標(biāo)定位到分位置}if(S1num==3) //S1按下三次時(shí){精選word范本!.write_com(0xc0+1); //光標(biāo)定位到時(shí)位置}if(S1num==4) //S1按下四次時(shí){write_com(0x80+13); //光標(biāo)定位到星期位置}if(S1num==5) //S1按下五次時(shí){write_com(0x80+9); //光標(biāo)定位到日位置}if(S1num==6) //S1按下六次時(shí){write_com(0x80+6); //光標(biāo)定位到月位置}if(S1num==7) //S1按下七次時(shí){write_com(0x80+3); //光標(biāo)定位到年位置}if(S1num==8) //S1按下八次時(shí){S1num=0; //S1記錄按鍵次數(shù)清零TR0=1; //開啟定時(shí)器write_com(0x0c); //取消光標(biāo)閃爍}}}if(S1num!=0) //只有定義鍵按下后 S2、S3、S4才有效{if(S2==0){delay(5); //防抖if(S2==0) //確認(rèn)按鍵被按下{while(!S2); //釋放按鍵確認(rèn)if(S1num==1) //S1按下一次時(shí){miao++; //調(diào)整秒加 1if(miao==60) //滿60清零miao=0;write_sfm(6,miao); //每調(diào)節(jié)一次送液晶顯示一次write_com(0x80+0x40+6); //顯示位置重新回到調(diào)節(jié)處}if(S1num==2) //S1按下兩次時(shí){精選word范本!.fen++; //調(diào)整分加 1if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);}if(S1num==3) //S1按下三次時(shí){shi++; //調(diào)整時(shí)加 1if(shi==24)shi=0;write_com(0x80+0x40);write_sfm(0,shi);}if(S1num==4) //星期加調(diào)整{xqnum++;if(xqnum==7)xqnum=0;write_com(0x80+0x0b);for(a=0;a<3;a++){write_data(xingqi[xqnum][a]);delay(5);}}if(S1num==5) //日加調(diào)整{ri++;if(yue==2){if(nian%400==0){if(ri==30){ri=1;}}if(nian%400!=0){if(ri==29){ri=1;}精選word范本!.}}elseif(yue<=7){if(yue%2==0&yue!=2){if(ri==31){ri=1;}}elseif(yue%2!=0&yue!=2){if(ri==32){ri=1;}}}elseif(yue>=8){if(yue%2==0){if(ri==32){ri=1;}}elseif(yue%2!=0){if(ri==31){ri=1;}}}write_yr(8,ri);}if(S1num==6) //月加調(diào)整{yue++;if(yue==13)yue=1;write_yr(5,yue);精選word范本!.}if(S1num==7) //年加調(diào)整{nian++;if(nian==2019)nian=2014;write_nian(0,nian);}}}if(S3==0){delay(5);if(S3==0) //確認(rèn)按鍵被按下{while(!S3);if(S1num==1){miao--; //調(diào)整秒減 1if(miao==-1) //減到00后再減重新設(shè)置為 59miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);}if(S1num==2){fen--; //調(diào)整分減 1if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);}if(S1num==3){shi--; //調(diào)整時(shí)減 1if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40);}if(S1num==4){xqnum--; //調(diào)整星期減一if(xqnum==-1)精選word范本!.xqnum=6;write_com(0x80+0x0b);for(a=0;a<3;a++){write_data(xingqi[xqnum][a]);delay(5);}}if(S1num==5) //調(diào)整日{(diào)ri--;if(yue==2){if(nian%400==0){if(ri==0){ri=29;}}if(nian%400!=0){if(ri==0){ri=28;}}}elseif(yue<=7){if(yue%2==0&yue!=2){if(ri==0){ri=30;}}elseif(yue%2!=0&yue!=2){if(ri==0){ri=31;}}精選word范本!.}elseif(yue>=8){if(yue%2==0){if(ri==0){ri=31;}}elseif(yue%2!=0){if(ri==0){ri=30;}}}write_yr(8,ri);}if(S1num==6) //調(diào)整月{yue--;if(yue==0)yue=12;write_yr(5,yue);}if(S1num==7) //調(diào)整年{nian--;if(nian==2013)nian=2018;write_nian(0,nian);}}}if(S4==0) //退出設(shè)置、開啟中斷{delay(5);if(S4==0){S1num=0;TR0=1;write_com(0x0c);精選word范本!.}}}}/**************************************************定時(shí)器0*************************************************/voidtimer0()interrupt1 //定時(shí)器0中斷服務(wù)程序{TH0=(65535-50000)/256; //重裝定時(shí)器初始值TL0=(65535-50000)%256;count++; //中斷次數(shù)累加if(count==20) //20次50毫秒即一秒{count=0;miao++;if(miao==60) //秒加到60時(shí)分進(jìn)位{miao=0;fen++;if(fen==60) //分加到60時(shí)時(shí)進(jìn)位{fen=0;shi++;if(shi==24) //時(shí)加到24時(shí)清0{shi=0;xqnum++;ri++;if(yue==2) //如果是二月{if(nian%400==0) //閏年判斷{if(ri==30){ri=1;yue++;write_yr(5,yue);}}if(nian%400!=0) //平年判斷{精選word范本!.if(ri==

溫馨提示

  • 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)論