單片機電子時鐘課程設計報告_第1頁
單片機電子時鐘課程設計報告_第2頁
單片機電子時鐘課程設計報告_第3頁
單片機電子時鐘課程設計報告_第4頁
單片機電子時鐘課程設計報告_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一部分設計任務和要求單片機課程設計內容…………………2單片機課程設計要求…………………2系統(tǒng)運行流程…………2第二部分設計方案總體設計方案說明……………………2系統(tǒng)方框圖……………3系統(tǒng)流程圖……………3第三部分主要器材及基本簡介主要器材………………4主要器材簡介…………4第四部分系統(tǒng)硬件設計最小系統(tǒng)LCD顯示電路鍵盤輸入電路…………7蜂鳴器和LED燈電路 7第五部分仿真電路圖與仿真結果………………8第六部分課程設計總結…………8第七部分參考文獻………………9附錄A實物圖附錄B系統(tǒng)源程序第一部分設計任務和要求單片機課程設計內容利用STC89C51單片機和LCD1602電子顯示屏實現電子時鐘,可由按鍵進行調時和12/24小時切換。單片機課程設計要求1.能實現年、月、日、星期、時、分、秒的顯示;2.能實現調時功能;3.能實現12/24小時制切換;4.能實現8:00—22:00整點報時功能。系統(tǒng)運行流程程序首先進行初始化,在主程序的循環(huán)程序中首先調用數據處理程序,然后調用顯示程序,在判斷是否有按鍵按下。若有按鍵按下則轉到相應的功能程序執(zhí)行,沒有按鍵按下則調用時間程序。若沒到則循環(huán)執(zhí)行。計時中斷服務程序完成秒的計時及向分鐘、小時的進位和星期、年、月、日的進位。調時閃爍中斷服務程序用于被調單元的閃爍顯示。調時程序用于調整分鐘、小時、星期、日、月、年,主要由主函數組成通過對相關子程序的調用,如圖所示。實現了對時間的設置和修改、LCD顯示數值等主要功能。相關的調整是靠對功能鍵的判斷來實現的。第二部分設計方案總體設計方案說明1.程序設計及調試根據單片機課程設計內容和要求,完成Protues仿真電路的設計和用Keil軟件編寫程序,并進行仿真模擬調試。2.硬件焊接及調試根據仿真電路圖完成電路板的焊接,并進行軟、硬件的調試,只到達到預期目的。3.后期處理對設計過程進行總結,完成設計報告。單片機系統(tǒng)方框圖單片機系統(tǒng)流程圖鍵盤掃描流程圖主流程圖count=20?分二6cl?打開定時器T。分加1,秒清零秒加1時加count=20?分二6cl?打開定時器T。分加1,秒清零秒加1時加1,分清零建期置1星期加1月加1,天置1天加1年加1,月置口笄清零時鐘流程圖」一Pl.D UCC'Pl.l PO.O」一Pl.D UCC'Pl.l PO.OPL2 PO.LPI3 PO.2PI4 PO3PIS P04戶1.巾 加5PIT FO6RSWFT P07P3.MLXD EAJVPPP31/7JX'PS.lSlTfl 串P土的Tl P27P3J/T0 P2.6P3.5/T1 P2.5PS.sSvR 國.4PS.Zftb P25J4TAL1 P2.2XTAL3 P2IVSS P1Q2如3然上375美e骼7SI8339.嬖—1U311]和工2S—121314151Qr17耳2223寫TC89C51引的圖鐘頻1000第三部分主要器件及簡介主要器件STC89c51單片機;LCD1602液晶顯示屏;主要器件簡介STC89c51單片機簡介STC89C51是采用8051核的ISP(InSystemProgramming)在系統(tǒng)可編程芯片,最高工作時率為80MHz,片內含8KBytes的可反復擦寫次的Flash只讀程序存儲器,器件兼容標準MCS-51指令系統(tǒng)及80C51引腳結構,芯片內集成了通用8位中央處理器和ISPFlash存儲單元,具有在系統(tǒng)可編程(ISP)特性,配合PC端的控制程序即可將用戶的程序代碼下載進單片機內部,省去了購買通用編程器,而且速度更快。LCD1602液晶顯示屏簡介LCD1602可以顯示2行16個字符,有8位數據總線DO—D7,和RS、R/W、EN三個控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{節(jié)和背光。LCD1602引腳說明如下表所示:LCD液晶顯示器各引腳功能及結構

編號符號引腳說明編號符號引腳說明1VSS電源地9D2雙向數據2VDD電源正極10D3雙向數據3VL對比度調節(jié)11D4雙向數據4RS數據/命令選擇12D5雙向數據5R/W讀寫/選擇13D6雙向數據6E模塊使能端14D7雙向數據7D0雙向數據15BLK背光源地8D1雙向數據16BLA背光源正極VDD:電源正極,一,通常使用5V電壓;VL:LCD對比度調節(jié)端,電壓調節(jié)范圍為0—5V。接正極時對比度最弱,接地電源時對比度最高,但對比度過高會產生“鬼影”,因此通常使用一個10K的電位器來調整對比度,或者直接串接一個電阻到地;RS:MCU寫入數據或者指令選擇端。MCU要寫入指令時,使RS為低電平;MCU要寫入數據時,使RS為高電平;R/W:讀寫控制端。R/W為高電平時,讀取數據;R/W為低電平時,寫入數據;EN:LCD模塊使能信號控制端。寫數據時,需要下降沿觸發(fā)模塊。D0—D7:8為數據總線,三態(tài)雙向。如果MCU的I/O口資源緊張的話,該模塊也可以只使用4位數據線D4—D7接口傳送數據。A:LED背光正極。需要背光時,A串接一個限流電阻接VDD,K接地。K:LED背光地端。TODD7D6VEED5EMVSSD3D2D1DOERSLCD16O2PQ.7P0.6P0.5P0.4PO.3P0.2P0.1P0.0P3.4P3.5AT85C51—||■LCD與單片機連接圖第四部分系統(tǒng)硬件設計最小系統(tǒng)引腳加可以使晶振,復位時單片機的初始化操作,只要給RST上兩個機器周期以上的高電平信號,就STC89c51單片機復位。本次采用的是12M按鈕復位電路。引腳加可以使晶振,LCD顯示電路LCD顯示屏的DO到D7與單片機P0口相連,LCD顯示屏EN口與單片機口相連,RS與相連。通過滑動變阻器改變LCD顯示屏的顯示對比度。

LCD1RESPACKSF'O.OXADOFO.1XAD1F0.2/AD2FLI.3XAD3LCD1RESPACKSF'O.OXADOFO.1XAD1F0.2/AD2FLI.3XAD3P0.4.-'AD4F'U.5XAD5Pa.6XAD6F10.7XAD7LMOieLI?V1鍵盤輸入電路本次設計采用獨立鍵盤,鍵盤按下時,相應的I/O口電平由高變低,一次檢測按鍵是否被按下。4個獨立按鍵與單片機—口相連。U=iTEW=-<TE?nnuTEXApmU=iTEW=-<TE?nnuTEXApmo蜂鳴器和LED燈電路蜂鳴器的作用為準點報時產生報警聲,LED在秒鐘為偶數時或者功能鍵被按下時亮。蜂鳴器與單片機口相連,LED燈與單片機口相連。P2.3-OSPEAKERP2.3-OSPEAKER第五部分仿真電路圖與仿真結果用Keil和Protues進行仿真調試,仿真結果完全達到預期目的。金:J盤看盤盤第六部分課程設計總結本次單片機課程設計,在我和金:J盤看盤盤第六部分課程設計總結本次單片機課程設計,在我和我的搭檔陳雅琴默契配鍬及鄒老師的指導和同學的幫助下順利完蝴設計過程中,從仿真電路的設計,源程序的書寫和修改以及實物電路的焊接中都遇到了不少問題,但在我們的共同努力下解決了,并且從中學到了不少知識。我們在設計過程中還不斷提出自己的疑點以及新的想法,聯系實際應用,將課本上學習的東西運用到實際中,這些都令我們受益匪淺。課程設計需要很大的耐心,尤其是遇到困難的時候,這也是對我們的考驗。在設計過程中,我們遇到問題不是感到急躁,而是耐心地尋找解決的辦法,與老師、同學進行交流討論,尋求最佳的解決辦法??傊?,在此次的課程設計中,我們不僅動手、動腦,也學會了不少東西,同時,謝謝對我們的設計帶來建議、意見和幫助的老師和同學們!謝謝!第七部分參考文獻《單片機原理及應用(第二版)》 高等教育出版社《新概念51單片機C語言教程》電子工業(yè)出版社附錄A實物圖附錄B系統(tǒng)源程序#include<>#defineucharunsignedchar#defineuintunsignedintsbitlcdrs=P3八5;〃定義1602液晶RS端sbitlcden=P3"4;//定義1602液晶LCDEN端sbits1=P3I0; 〃定義按鍵一功能鍵sbits2=P31;//定義按鍵一增加鍵sbits3=P3"2;//定義按鍵一減小鍵sbits4=P3"3;//定義按鍵一鬧鐘鍵sbitbeep=P2八2;〃定義蜂鳴器端sbitled=P2"3;〃定義LED燈端ucharcount,s1num,s4num;charyear,month,day,week,miao,shi,fen,pshi;ucharcodetable[]="20--";//定義初始上電時液晶默認顯示狀態(tài)voiddelay(uintz)//延時函數{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidzhuanhuan(){if(shi==0)pshi=12;pshi=12;pshi=12;pshi=12;if(shi<=12&&shi>=1)pshi=shi;if(shi>12)pshi=shi-12;}voiddi()//蜂鳴器發(fā)聲函數{beep=0;delay(300);beep=1;delay(300);}voidwrite_com(ucharcom)//液晶寫命令函數lcdrs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_date(uchardate)//液晶寫數據函數{lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void_shi()〃寫"AM"、"PM"函數{if(shi>=12){write_com(0x80+0x40+1);//寫出"PM"write_date('P');write_date('M');}else{write_com(0x80+0x40+1);//寫出"AM"write_date('A');write_date('M');}voidwrite_ymd(ucharadd1,uchardatel)//寫年月日函數{ucharshi,ge;shi二date1/10;//分解一個2位數的十位和個位ge=date1%10;write_com(0x80+add1);//設置顯示位置write_date(0x30+shi);//送去液晶顯示十位write_date(0x30+ge);//送去液晶顯示個位}voidwrite_sfm(ucharadd,uchardate)//寫時分秒函數{ucharshi,ge;shi二date/10;//分解一個2位數的十位和個位ge=date%10;write_com(0x80+0x40+add);//設置顯示位置write_date(0x30+shi);//送去液晶顯示十位write_date(0x30+ge);//送去液晶顯示個位}voidwrite_week(charweek)//寫液晶星期顯示函數{write_com(0x80+12);switch(week){write_date('M');delay(5);write_date('O');delay(5);write_date('N');break;write_date('T');delay(5);write_date('U');delay(5);write_date('E');break;write_date('W');delay(5);write_date('E');delay(5);write_date('E');delay(5);write_date('E');delay(5);write_date('E');delay(5);write_date('D');break;write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;write_date('F');delay(5);write_date('R');delay(5);write_date('I');break;write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;write_date('S');delay(5);write_date('N');break;}}voidwriteym(){day=1;month++;if(month==13){month=1;year++;if(year==100)year=0;write_ymd(3,year);//年若變化則重新寫入write_ymd(6,month);//月若變化則重新寫入}voidinit()//初始化函數{ucharnum;lcden=0;year=13;//初始化種變量值month=6;day=21;week=5;shi=13;fen=59;miao=58;count=0;s1num=0;s4num=0;write_com(0x38);//初始化1602液晶write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//設置顯示初始坐標for(num=0;num<15;num++)//顯示年月日星期{write_date(table[num]);delay(5);}delay(5);write_com(0x80+0x40+6);//寫出時間顯示部分的兩個":"write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':');write_date(':');write_date(':');write_date(':');delay(5);write_week(week);write_ymd(3,year);//分別送去液晶顯示write_ymd(6,month);write_ymd(9,day);write_sfm(10,miao);//分別送去液晶顯示write_sfm(7,fen);write_sfm(4,shi);TMOD=0x01;//設置定時器0工作模式1TH0=(65536-50000)/256;//定時器裝初值TL0=(65536-50000)%256;EA=1;//開總中斷ET0=1;//開定時器0中斷TR0=1;//啟動定時器0if(s1num==2)//if(s1num==2)//第二次按下光標閃爍定位到月位置if(s1num==2)//if(s1num==2)//第二次按下光標閃爍定位到月位置void卜6丫$。@口()//按鍵掃描函數{if(s1==0){delay(5);if(s1==0)//確認功能鍵被按下{s1num++;//功能鍵按下次數記錄while(!s1);//釋放確認if(s1num==1)//第一次被按下時{TR0=0;//關閉定時器write_com(0x80+3);//光標定位到年位置write_com(0x0f);//光標開始閃爍}{{if(s1num==6)//if(s1num==6)//第六次按下光標閃爍定位到分位置{{if(s1num==6)//if(s1num==6)//第六次按下光標閃爍定位到分位置write_com(0x80+6);}if(s1num==3)//第三次按下光標閃爍定位到日位置{write_com(0x80+9);}if(s1num==4)//第四次按下光標閃爍定位到星期位置{write_com(0x80+12);}if(s1num==7)//第七次被按下時光標定位到秒位置{write_com(0x80+0x40+10);}{{{{if(s1num==2)//if(s1num==2)//若功能鍵第二次按下write_com(0x80+0x40+7);}if(s1num==5)//第五次按下光標閃爍定位到時位置{write_com(0x80+0x40+4);}if(s1num==8)//第七次按下{s1num=0;//記錄按鍵數清零write_com(0x0c);//取消光標閃爍TR0=1;//啟動定時器使時鐘開始走}}}if(s1num!=0)//只有功能鍵被按下后,增加和減小鍵才有效if(s2==0){delay(5);if(s2==0)//增加鍵確認被按下{亞g1?(!$2);//按鍵釋放if(s1num==1)//若功能鍵第一次按下{year++;//則調整年加1if(year==100)//若滿100后將清零year=0;write_ymd(3,year);//每調節(jié)一次送液晶顯示一下write_com(0x80+3);//顯示位置重新回到調節(jié)處}month++;//則調整月加1if(month==13)//若滿12后將置一month=1;write_ymd(6,month);//每調節(jié)一次送液晶顯示一下write_com(0x80+6);//顯示位置重新回到調節(jié)處}if(s1num==3)//若功能鍵第三次按下{day++;//則調整日加1if(year%4==0&&month==2){if(day==30)//若滿29后將置一day=1;}if(year%4!=0&&month==2)if(day==29)〃若滿28后將置一day=1;)if(month!=2&&month!=4&&month!=6&&month!=9&&month!=11)(if(day==32)〃若滿31后將置一day=1;)if(month==4||month==6||month==9||month==11)(if(day==31)〃若滿30后將置一day=1;)write_ymd(9,day);;〃每調節(jié)一次送液晶顯示一下write_com(0x80+9);〃顯示位置重新回到調節(jié)處if(s1num==4)//若功能鍵第四次按下{week++;//則調整星期加1if(week==8)//若滿8后將置一week=1;write_week(week);//每調節(jié)一次送液晶顯示一下write_com(0x80+12);//顯示位置重新回到調節(jié)處}if(s1num==7)//若功能鍵第七次按下{miao++;//則調整秒加1if(miao==60)//若滿60后將清零miao=0;write_sfm(10,miao);//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+10);//顯示位置重新回到調節(jié)處if(s4num==0)if(s4num==0)}}if(s4num==0)if(s4num==0)}}}}if(s1num==6)//若功能鍵第二次按下{fen++;//則調整分鐘加1if(fen==60)//若滿60后將清零fen=0;write_sfm(7,fen);//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+7);//顯示位置重新回到調節(jié)處}if(s1num==5)//若功能鍵第五次按下{shi++;if(shi==24)//若滿24后將清零{shi=0;{write_sfm(4,shi);;//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+4);//顯示位置重新回到調節(jié)處}if(s4num==1){zhuanhuan();_shi();write_sfm(4,pshi);;//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+4);//顯示位置重新回到調節(jié)處}}}}{{{{{{if(s3==0){delay(5);if(s3==0)//確認減小鍵被按下{亞g1?(!$3);//按鍵釋放if(s1num==1)//若功能鍵第一次按下{year--;//則調整秒減1if(year==-1)//若減到負數則將其重新設置為99year=99;write_ymd(3,year);//每調節(jié)一次送液晶顯示一下write_com(0x80+3);//顯示位置重新回到調節(jié)處}if(s1num==2)//若功能鍵第二次按下month--;//則調整分鐘減1if(month==0)//若減到負數則將其重新設置為59month=12;write_ymd(6,month);//每調節(jié)一次送液晶顯示一下write_com(0x80+6);//顯示位置重新回到調節(jié)處}if(s1num==3)//若功能鍵第二次按下{day--;//則調整日加1if(year%4==0&&month==2){if(day==0)//若滿29后將置一day=29;}if(year%4!=0&&month==2)}}}}if(day==0)〃若滿28后將置一day=28;)if(month!=2&&month!=4&&month!=6&&month!=9&&month!=11)(if(day==0)〃若滿31后將置一day=31;)if(month==4||month==6||month==9||month==11)(if(day==0)〃若滿30后將置一day=30;)write_ymd(9,day);;〃每調節(jié)一次送液晶顯示一下write_com(0x80+9);〃顯示位置重新回到調節(jié)處if(s1num==4)//若功能鍵第二次按下{week--;//則調整小時減1if(week==0)//若減到負數則將其重新設置為23week=7;write_week(week);//每調節(jié)一次送液晶顯示一下write_com(0x80+12);//顯示位置重新回到調節(jié)處}if(s1num==7)//若功能鍵第一次按下{miao--;//則調整秒減1if(miao==-1)//若減到負數則將其重新設置為59miao=59;write_sfm(10,miao);//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+10);//顯示位置重新回到調節(jié)處if(s4==0)if(s4==0)if(s4==0)if(s4==0)write_sfm(4,shi);;//write_sfm(4,shi);;//每調節(jié)一次送液晶顯示一下if(s1num==6)//若功能鍵第二次按下{fen--;//則調整分鐘減1if(fen==-1)//若減到負數則將其重新設置為59fen=59;write_sfm(7,fen);//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+7);//顯示位置重新回到調節(jié)處}if(s1num==5)//若功能鍵第二次按下{shi--;if(shi==-1)//若滿24后將清零shi=23;if(s4num==0){write_com(0x80+0x40+4);//顯示位置重新回到調節(jié)處}if(s4num==1){zhuanhuan();_shi();write_sfm(4,pshi);;//每調節(jié)一次送液晶顯示一下write_com(0x80+0x40+4);//顯示位置重新回到調節(jié)處}}}}if(s1num==0){delay(5);if(s4==0)//確認功能鍵被按下{s4num++;//功能鍵按下次數記錄while(!s4);//釋放確認if(s4num==1)//第一次被按下時{zhuanhuan();_shi();write_sfm(4,pshi);}if(s4num==2)//第二次按下{s4num=0;//記錄按鍵數清零write_com(0x80+0x40+1);write_date('write_date('');led=0;led=0;write_date('write_date('')

溫馨提示

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

評論

0/150

提交評論