單片機萬年歷實訓(xùn)綜合報告_第1頁
單片機萬年歷實訓(xùn)綜合報告_第2頁
單片機萬年歷實訓(xùn)綜合報告_第3頁
單片機萬年歷實訓(xùn)綜合報告_第4頁
單片機萬年歷實訓(xùn)綜合報告_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機萬年歷實訓(xùn)匯報 系部:電氣自動化系班級:13電信2班姓名:周祝福指導(dǎo)老師:黃麗英、侯聰玲實訓(xùn)時間:1月19日~23日用AT89C51和LCD1602設(shè)計可調(diào)式電子日歷時鐘一、總體設(shè)計1.1、設(shè)計目標為鞏固所學(xué)單片機知識,把所學(xué)理論利用到實踐中,用LCD1602和AT89C51設(shè)計可調(diào)式電子日歷時鐘。1.2、設(shè)計要求(1)顯示:年、月、日、時、分、秒和星期;(2)設(shè)置年、月、日、時、分、秒和星期初始狀態(tài);(3)能夠用4個按鍵調(diào)整日歷時鐘年、月、日、時、分、秒和星期;完成可調(diào)式電子日歷時鐘硬件和軟件設(shè)計,包含單片機相關(guān)內(nèi)容;日歷時鐘模塊設(shè)計,液晶顯示模塊設(shè)計,按鍵模塊設(shè)計??刂瞥绦蚓帉懙?。1.3、系統(tǒng)基礎(chǔ)方案選擇和論證1.3.1、單片機芯片選擇方案方案一:采取89C51芯片作為硬件關(guān)鍵,采取FlashROM,內(nèi)部含有4KBROM存放空間,能于3V超低壓工作,而且和MCS-51系列單片機完全兼容。方案二:采取STC12C5A60S2系列單片機是宏晶科技生產(chǎn)單時鐘/機器周期(1T)單片機,是高速/低功耗/超強抗干擾新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機控制,強干擾場所。1.3.2、顯示模塊選擇方案和論證:方案一:采取點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列發(fā)光二極管組成,對于顯示文字比較適合,如采取顯示數(shù)字顯得太浪費,且價格也相對較高。所以不用此種作為顯示。方案二:采取LED數(shù)碼管動態(tài)掃描,即使LED數(shù)碼管價格適中,但要顯示多個數(shù)字所需要個數(shù)偏多,功耗較大,顯示出來只是拼音,而不是漢字。所以也不用此種作為顯示。方案三:采取LCD液晶顯示器,液晶顯示器顯示功效強大,可顯示大量字符,且視覺效果很好,外形美觀。LCD1602可實現(xiàn)顯示2行十六個字符。1.3.4、電路設(shè)計最終方案決定綜上各方案所述,對此次作品方案選定:采取80C51作為主控制系統(tǒng);LCD1602液晶帶漢字庫顯示器作為顯示部分。二、硬件設(shè)計2.1、電路設(shè)計模塊圖圖AT89CAT89C51LCD162按鍵控制模塊2.3、用proteus仿真軟件仿真并抓圖。三、軟件設(shè)計3.1、畫出各個函數(shù)步驟圖。3.1.1、LCD1602液晶顯示控制步驟圖圖3.1.2、調(diào)時函數(shù)控制步驟圖實訓(xùn)心得:經(jīng)過為期一周單片機實訓(xùn),是我們對這門課有了很多新了解,填補了在課堂上學(xué)習不足。相信這對我們以后學(xué)習和工作全部會有很大幫助。我們一定要在最短時間里對這些不足加以更正!在試訓(xùn)中有苦有甜,當我們?yōu)橐粋€極難攻破程序找出路時,心情煩躁,感覺自己很不可理喻,當程序一點一點編好后,自己從心底感覺到一點小小撫慰,看著自己結(jié)果。感覺很欣慰。總而言之,單片機課程設(shè)計對于我們有很大幫助,我們從中受益匪淺。程序代碼。#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; //定義鍵--進入設(shè)置sbitS2=P3^1; //定義鍵--增大sbitS3=P3^2; //定義鍵--減小sbitS4=P3^3; //定義鍵--退出設(shè)置ucharcodetable0[]="-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液晶顯示器模塊*************************************************/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ù){ 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ù){ 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=; yue=1; ri=11; shi=0; //初始shi、fen、miao fen=0; miao=0; write_com(0x38); //設(shè)置16x2顯示,5x7點陣,8位數(shù)據(jù)口 write_com(0x0c); //設(shè)置開顯示,不顯示光標 write_com(0x06); //寫一個字符后地址指針加1 write_com(0x01); //顯示清0,數(shù)據(jù)指針清0}voidinit() //初始化函數(shù){ init_lcd(); //液晶初始化 write_com(0x80); //設(shè)置顯示初始坐標 for(a=0;a<14;a++) //顯示年月日初始值 { write_data(table0[a]); delay(5); } write_com(0x80+0x40); //設(shè)置顯示初始坐標 for(a=0;a<8;a++) //顯示時分秒初始值 { write_data(table1[a]); 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; //初始化全局變量count TMOD=0x01; //設(shè)置定時器0工作模式1 TH0=(65535-50000)/256; //定時器裝初始值 TL0=(65535-50000)%256; EA=1; //開總中止 ET0=1; //開定時器0中止 TR0=1; //開啟定時器0}/**************************************************獨立鍵盤*************************************************/voidkeyscan(){ if(S1==0) { delay(5); //確定定義鍵被按下 if(S1==0) { S1num++; //定義鍵S1按下次數(shù)統(tǒng)計 while(!S1); //釋放按鍵確定 if(S1num==1) //S1按下一次時 { TR0=0; //關(guān)閉定時器 write_com(0xc0+7); //光標定位到秒位置 write_com(0x0f); //光標閃爍 } if(S1num==2) //S1按下兩次時 { write_com(0xc0+4); //光標定位到分位置 } if(S1num==3) //S1按下三次時 { write_com(0xc0+1); //光標定位到時位置 } if(S1num==4) //S1按下四次時 { write_com(0x80+13); //光標定位到星期位置 } if(S1num==5) //S1按下五次時 { write_com(0x80+9); //光標定位到日位置 } if(S1num==6) //S1按下六次時 { write_com(0x80+6); //光標定位到月位置 } if(S1num==7) //S1按下七次時 { write_com(0x80+3); //光標定位到年位置 } if(S1num==8) //S1按下八次時 { S1num=0; //S1統(tǒng)計按鍵次數(shù)清零 TR0=1; //開啟定時器 write_com(0x0c); //取消光標閃爍 } } } if(S1num!=0) //只有定義鍵按下后S2、S3、S4才有效 { if(S2==0) { delay(5); //防抖 if(S2==0) //確定按鍵被按下 { while(!S2); //釋放按鍵確定 if(S1num==1) //S1按下一次時 { miao++; //調(diào)整秒加1 if(miao==60) //滿60清零 miao=0; write_sfm(6,miao); //每調(diào)整一次送液晶顯示一次 write_com(0x80+0x40+6); //顯示位置重新回到調(diào)整處 } if(S1num==2) //S1按下兩次時 { fen++; //調(diào)整分加1 if(fen==60) fen=0; write_sfm(3,fen); write_com(0x80+0x40+3); } if(S1num==3) //S1按下三次時 { shi++; //調(diào)整時加1 if(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; } } } 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); } if(S1num==7) //年加調(diào)整 { nian++; if(nian==) nian=; write_nian(0,nian); } } } if(S3==0) { delay(5); if(S3==0) //確定按鍵被按下 { while(!S3); if(S1num==1) { miao--; //調(diào)整秒減1 if(miao==-1) //減到00后再減重新設(shè)置為59 miao=59; write_sfm(6,miao); write_com(0x80+0x40+6); } if(S1num==2) { fen--; //調(diào)整分減1 if(fen==-1) fen=59; write_sfm(3,fen); write_com(0x80+0x40+3); } if(S1num==3) { shi--; //調(diào)整時減1 if(shi==-1) shi=23; write_sfm(0,shi); write_com(0x80+0x40); } if(S1num==4) { xqnum--; //調(diào)整星期減一 if(xqnum==-1) xqnum=6; 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==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; } } } 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==) nian=; write_nian(0,nian); } } } if(S4==0) //退出設(shè)置、開啟中止 { delay(5); if(S4==0) { S1num=0; TR0=1; write_com(0x0c); } } }}/**************************************************定時器0*************************************************/voidtimer0()interrupt1 //定時器0中止服務(wù)程序{ TH0=(65535-50000)/256; //重裝定時器初始值 TL0=(65535-50000)%256; count++; //中止次數(shù)累加 if(count==20) //20次50毫秒即一秒 { count=0; miao++; if(miao==60) //秒加到60時分進位 { miao=0; fen++; if(fen==60) //分加到60時時進位 { fen=0; shi++; if(shi==24) //時加到24時清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) //平年判定 { if(ri==29) { ri=1; yue++; write_yr(5,yue); } } } elseif(yue<=7&yue!=2) //一月到七月 { if(yue%2==0) //偶數(shù)月(除二月) { if(ri==31) { ri=1; yue++; } } elseif(yue%2!=0

溫馨提示

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

評論

0/150

提交評論