基于單片機(jī)的LCD1602電子時(shí)鐘設(shè)計(jì)_第1頁
基于單片機(jī)的LCD1602電子時(shí)鐘設(shè)計(jì)_第2頁
基于單片機(jī)的LCD1602電子時(shí)鐘設(shè)計(jì)_第3頁
基于單片機(jī)的LCD1602電子時(shí)鐘設(shè)計(jì)_第4頁
基于單片機(jī)的LCD1602電子時(shí)鐘設(shè)計(jì)_第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)介

設(shè)計(jì)說明書內(nèi)容.0、P1.1、P1.2作為L(zhǎng)CD1602的RS、RW、E控制線。顯示電路如圖3所示:圖3:液晶顯示電路3.4時(shí)間調(diào)整電路該電路設(shè)計(jì)有三個(gè)輕觸式按鍵,分別命名為:模式設(shè)定鍵S1、加調(diào)整鍵S2、減調(diào)整鍵S3。由P2.0口外接S1,P2.1外接S2,P2.2外接S3,P2.3作為公共端。按一下S1,調(diào)整光標(biāo)開始出現(xiàn)在秒位,再按一下S1光標(biāo)移動(dòng)到分,按一下光標(biāo)移動(dòng)一個(gè)校準(zhǔn)位直到年位。S2實(shí)現(xiàn)調(diào)整加1功能,S3實(shí)現(xiàn)調(diào)整減1功能。時(shí)間調(diào)整電路如圖4所示:圖4:鍵盤電路3.5復(fù)位電路及晶振電路該電路采用按鍵復(fù)位,有一個(gè)22uF的電容、一個(gè)按鍵S4、一個(gè)10K的電阻和一個(gè)220Ω的電阻構(gòu)成。在產(chǎn)品工作期間出現(xiàn)錯(cuò)誤或死機(jī)現(xiàn)象可采用手動(dòng)復(fù)位,即按下S4,此時(shí)無論電路處于何種狀態(tài),電路都會(huì)恢復(fù)到初始狀態(tài)的顯示。晶振電路可以給單片機(jī)提供所需要的時(shí)鐘頻率,主要由晶振這個(gè)元件固定的精確的頻率來實(shí)現(xiàn)。復(fù)位電路及晶振電路如圖5所示:圖5復(fù)位電路及晶振電路系統(tǒng)軟件設(shè)計(jì)軟件系統(tǒng)分四個(gè)部分:主函數(shù)程序部分,鍵盤掃描部分,定時(shí)器中斷部分,LCD初始化部分。各部分程序流程圖如下所示:4.1主函數(shù)程序流程圖開始定時(shí)器的選擇、工作模式設(shè)定、給定時(shí)器賦值定時(shí)器的選擇、工作模式設(shè)定、給定時(shí)器賦值開中斷開中斷啟動(dòng)定時(shí)器調(diào)用LCD初始化子程序調(diào)用LCD初始化子程序調(diào)用鍵盤掃描子程序調(diào)用鍵盤掃描子程序圖6主函數(shù)流程圖4.2鍵盤掃描子程序流程圖開始開始判斷S1是判斷S1是否按下NOYES計(jì)算S1按下次數(shù)計(jì)算S1按下次數(shù)并執(zhí)行相應(yīng)指令判斷S2是否按下判斷S2是否按下判斷S3是否按下NONOYESYES計(jì)算S3按下次數(shù)并執(zhí)行相應(yīng)操作計(jì)算S3按下次數(shù)并執(zhí)行相應(yīng)操作計(jì)算S2按下次數(shù)并執(zhí)行相應(yīng)操作結(jié)束結(jié)束圖7鍵盤掃描程序流程圖4.3定時(shí)器中斷子程序流程圖開始開始給定時(shí)器再次賦值給定時(shí)器再次賦值判斷是判斷是否計(jì)滿18次NO秒加1,判斷是否等于60YES秒加1,判斷是否等于60返回返回NO分加1,秒置0,判斷分是否等于60YES分加1,秒置0,判斷分是否等于60NOYES時(shí)加1,分置0,判斷時(shí)是否等于24時(shí)加1,分置0,判斷時(shí)是否等于24NO執(zhí)行年、月、日、時(shí)、分、秒的顯示執(zhí)行年、月、日、時(shí)、分、秒的顯示日加1,時(shí)置0,判斷該年是否為閏年YES日加1,時(shí)置0,判斷該年是否為閏年年加1,月置1,判斷年是否為100YES年加1,月置1,判斷年是否為100NOYES判斷日是否到月底判斷日是否到月底NONO月加1,日置1,判斷月是否等于13YES月加1,日置1,判斷月是否等于13NOYES4.3LCD初始化程序流程圖開始開始RW和E都置零RW和E都置零設(shè)置點(diǎn)陣8位數(shù)據(jù)接口,兩行顯示設(shè)置點(diǎn)陣8位數(shù)據(jù)接口,兩行顯示開顯示,不顯示光標(biāo)開顯示,不顯示光標(biāo)地址指針加一地址指針加一畫面不移動(dòng)刷新,全部清零刷新,全部清零給地址,表示從給地址,表示從第一行開始寫顯示第一行數(shù)據(jù)顯示第一行數(shù)據(jù)給第二行地址給第二行地址顯示第二行數(shù)據(jù)返回返回圖9LCD初始化流程圖設(shè)計(jì)結(jié)果分析5.1硬件分析該設(shè)計(jì)電路系統(tǒng)較大,電路系統(tǒng)中只要出于一處的錯(cuò)誤,則會(huì)對(duì)檢測(cè)造成很大的不便,而且電路的交線較多。另外,買來的元器件要先進(jìn)行檢測(cè),如果有壞的器件要進(jìn)行更換,還有就是要注意元器件的正確放置與安裝以及布線的合理,便于成品電路的檢測(cè)與維護(hù)。為了減少?gòu)?fù)雜度,可用Proteus軟件進(jìn)行仿真,按照電路原理圖在Proteus中選擇元器件并連接,把生產(chǎn)的HEX文件燒入到單片機(jī)內(nèi)部進(jìn)行仿真,若出現(xiàn)錯(cuò)誤及時(shí)更改。在本設(shè)計(jì)中遇到了很多的問題?;叵脒@些問題,其實(shí)只要認(rèn)真思考許多都是可以避免的,以下為主要的問題:(1):在Proteus仿真中提示出錯(cuò),沒有仿真結(jié)果。在Proteus中仿真中,提示出現(xiàn)了R1(R2)錯(cuò)誤,經(jīng)過仔細(xì)排查,發(fā)現(xiàn)有兩個(gè)電阻命名,是R1,兩個(gè)電阻命名是R2。修改后就沒有出現(xiàn)錯(cuò)誤。(2):在Proteus仿真中,LCD不顯示在硬件設(shè)計(jì)上需要用P0口來對(duì)LCD進(jìn)行指令的讀寫和數(shù)據(jù)的輸入,由于沒有在P0口接上拉電阻,LCD屏就一直不顯示。最終將在查閱課本時(shí)想起P0做輸出口使用時(shí)外部必須接10KΩ的上拉電阻,接上后LCD就正常顯示了。5.2軟件分析該設(shè)計(jì)的功能雖然比較簡(jiǎn)單,但程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了許多問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終在KEIL調(diào)試成功,解決了軟件問題。在軟件的調(diào)試過程中主要遇到的問題如下:(1):燒入程序后,秒、分、時(shí)、年能正常工作,但是日、月出錯(cuò)當(dāng)秒等于60時(shí)顯示為00,范圍是0~59;當(dāng)分等于60時(shí)顯示00,范圍是0~59;當(dāng)時(shí)等于24時(shí)顯示00,范圍是0~23;年等于100是顯示00,范圍是00~99;日和月的顯示都不包括0,當(dāng)由于軟件出錯(cuò),顯示時(shí)出現(xiàn)了,經(jīng)過改寫最終全能正常顯示。(2:):不能正常區(qū)分閏年和平年,每月都是31天閏年和平年的2月份分別是29天和28天,1、3、5、7、8、10、12月份顯示范圍是0~31,4、6、9、11月份顯示范圍是0~30。剛開始不能區(qū)分,最后經(jīng)過修改能區(qū)分顯示。設(shè)計(jì)體會(huì)通過這次單片機(jī)課程設(shè)計(jì),發(fā)現(xiàn)了自身所學(xué)知識(shí)存在許多的不足和問題,同時(shí)也學(xué)到了不少東西,提高了動(dòng)手實(shí)踐的能力。在整個(gè)設(shè)計(jì)過程中,從設(shè)計(jì)方案的確定,到具體電路在Proteus中的設(shè)計(jì),最后到總體電路的聯(lián)接構(gòu)建以及程序的編寫燒制,特別是程序的編寫,要求對(duì)LCD1602的初始化操作、指令和數(shù)據(jù)的操作都需要很熟悉。在設(shè)計(jì)過程中碰到實(shí)在不能解決的問題,就問老師或是和同學(xué)交流,把問題徹底搞清楚并加以掌握。盡管在這次設(shè)計(jì)中遇到了許多難題,但也都一一得以解決。比如程序編寫中,由于思路不清晰,開始時(shí)遇到了許多的問題,經(jīng)過靜下心來思考,和同學(xué)們的共同討論,理清了思路,反而得心應(yīng)手;在硬件方面雖然沒有遇到什么大問題,但從中也學(xué)到了許多知識(shí)。通過此次設(shè)計(jì),也使我知道了做任何事都要有一顆平常心,不要想著走捷徑,一步一個(gè)腳印,把每一步都認(rèn)認(rèn)真真做好了,才能取得最后的成功,同時(shí)也鍛煉了我的耐心,做什么事都要有耐心,不要遇到困難就退縮,而是要靜下心來去尋找解決的辦法否則很難有最后的成功。在此過程中更要注重自主學(xué)習(xí),發(fā)揮自己的主觀能動(dòng)性。總之,這次課設(shè)是我的又一次全新的嘗試,也是一個(gè)小小的成功,更是一次很好的鍛煉,讓我有了全方位的提高和進(jìn)步。七、proteus仿真圖圖(10)仿真主界面圖(11)調(diào)節(jié)分界面圖(12)調(diào)節(jié)月界面圖(13)調(diào)節(jié)年界面八、參考文獻(xiàn)[1]周國(guó)運(yùn)。單片機(jī)原理及應(yīng)用(C語言版)。北京:中國(guó)水利水電出版社,2009[2]張齊、朱寧西。單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)。北京:電子工業(yè)出版社,2009[3]汪道輝。單片機(jī)系統(tǒng)設(shè)計(jì)與實(shí)踐。北京:電子工業(yè)出版社,2006[4]楊子文。單片機(jī)原理及應(yīng)用。西安:西安電子科技大學(xué)出版社,2006九、程序附錄: #include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definedatasendP0sbitlcden=P1^2;//LCD使能端sbitlcdrs=P1^0;//LCD數(shù)據(jù)/指令(H/L)選擇端sbitlcdrw=P1^1;ucharmytable0[]="Nanyangligong";ucharmytable1[]="liuhaiyanDIY!!";ucharcodeline0[]="2010-12-01";//初始化顯示ucharcodeline1[]="00:00:00";ucharcodemonth0[]={31,28,31,30,31,30,31,31,30,31,30,31};//平年月ucharcodemonth1[]={31,29,31,30,31,30,31,31,30,31,30,31};//閏年月ucharcount,hour,minute,second,year=1,month=1,date=1;uchars1num;//s1num:定義功能鍵按下次數(shù)變量voiddelay(unsignedintz)//延時(shí)子函數(shù)z*1ms{ unsignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidwrite_com(unsignedcharc)//寫命令子函數(shù){ lcdrs=0;//低電平選擇為寫指令 lcden=0; datasend=c;//把指令寫入P0口 delay(5); lcden=1;//開使能 delay(5);//讀取指令 lcden=0;//關(guān)閉使能 }voidwrite_data(unsignedchard)//寫數(shù)據(jù)子函數(shù){ lcdrs=1;//高電平選擇為寫數(shù)據(jù) datasend=d;//把數(shù)據(jù)寫入P0口 delay(5); lcden=1;//開使能 delay(5);//讀取數(shù)據(jù) lcden=0; //關(guān)閉使能}voidwrite_hms(ucharadd,uchardat)//時(shí)分秒寫函數(shù)add:輸入位置設(shè)置變量dat:輸入時(shí)分秒數(shù)據(jù){ ucharsw,gw;//定義十位,個(gè)位變量 sw=dat/10; gw=dat%10; write_com(0x80+0x40+add);//從第二行(add)位開始寫數(shù)據(jù) write_data(0x30+sw);//寫入十位 write_data(0x30+gw);//寫入個(gè)位}voidwrite_ymd(ucharadd,uchardat)//年月日寫函數(shù)add:輸入位置設(shè)置變量dat:輸入時(shí)分秒數(shù)據(jù){ ucharsw,gw;//定義十位,個(gè)位變量 sw=dat/10; gw=dat%10; write_com(0x80+add);//從第一行(add)位開始寫數(shù)據(jù) write_data(0x30+sw);//寫入十位 write_data(0x30+gw);//寫入個(gè)位}voidt0()interrupt1//定時(shí)器0中斷子程序{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++;}voidgethms()//時(shí)分秒處理子程序{ second++; if(second==60) { second=0; minute++; if(minute==60) { minute=0; hour++; if(hour==24) { hour=0; date++; } write_hms(2,hour);//時(shí)輸出顯示 } write_hms(5,minute);//分輸出顯示 } write_hms(8,second);//秒輸出顯示}voidgetymd()//年月日處理子程序{ if(year%4==0) { if(date==month1[month-1]+1) { date=1; month++; if(month==13) { month=1; year++; if(year==100) { year=1; } write_ymd(4,year); } write_ymd(7,month); } write_ymd(10,date); }else { if(date==month0[month-1]+1) { date=1; month++; if(month==13) { month=1; year++; if(year==100) { year=1; } write_ymd(4,year); } write_ymd(7,month); } write_ymd(10,date); } }voidkey_process()//按鍵掃描子程序{ if(P2==0xf6)//功能鍵 delay(25); if(P2==0xf6)//功能鍵按下 { while(P2==0xf6);//松手檢測(cè) s1num++;//功能鍵按下計(jì)數(shù) TR0=0;//T0定時(shí)停止,進(jìn)入時(shí)間調(diào)整 switch(s1num) { case1:write_com(0x80+0x40+0x09);break;//光標(biāo)閃爍位定為秒個(gè)位 case2:write_com(0x80+0x40+0x06);break;//光標(biāo)閃爍位定為分個(gè)位 case3:write_com(0x80+0x40+0x03);break;//光標(biāo)閃爍位定為時(shí)個(gè)位 case4:write_com(0x80+0x0b);break;//光標(biāo)閃爍位定為日個(gè)位 case5:write_com(0x80+0x08);break;//光標(biāo)閃爍位定為月個(gè)位 case6:write_com(0x80+0x05); break; //光標(biāo)閃爍位定為年個(gè)位 } write_com(0x0f);//光標(biāo)閃爍 if(s1num==7) { s1num=0;//按鍵計(jì)數(shù)復(fù)位 write_com(0x0c);//光標(biāo)停止閃爍 TR0=1;//重新啟動(dòng)定時(shí)器 } } if(P2==0xee)//時(shí)分秒+1模塊 { delay(25); if(P2==0xee) { while(P2==0xee); switch(s1num) { case1: second++;//秒+ if(second==60)second=0;//復(fù)位 write_hms(8,second);//秒輸出顯示 write_com(0x80+0x40+0x09);//光標(biāo)閃爍位定為秒個(gè)位 break; case2: minute++; if(minute==60)minute=0;//復(fù)位 write_hms(5,minute);//分輸出顯示 write_com(0x80+0x40+0x06);//光標(biāo)閃爍位定為分個(gè)位 break; case3: hour++; if(hour==24)hour=0;//復(fù)位 write_hms(2,hour);//時(shí)輸出顯示 write_com(0x80+0x40+0x03);//光標(biāo)閃爍位定為時(shí)個(gè)位 break; case4: date++;//日+ if(year%4==0)//平閏年判斷 { if(date==month1[month-1]+1) { date=1; } } else { if(date==month0[month-1]+1) { date=1; } } write_ymd(10,date);//日輸出顯示 write_com(0x80+0x0b);//光標(biāo)閃爍位定為日個(gè)位 break; case5: month++;//月+ if(month==13)month=1; if(year%4==0)//判斷日和月的配對(duì)關(guān)系 { if(date>month1[month-1])date=month1[month-1]; } else { if(date>month0[month-1])date=month0[month-1]; } write_ymd(10,date);//日輸出顯示 write_ymd(7,month);//月輸出顯示 write_com(0x80+0x08);//光標(biāo)閃爍位定為月個(gè)位 break; case6: year++;//年+ if(year==100)year=1;//復(fù)位 write_ymd(4,year);//年輸出顯示 write_com(0x80+0x05);//光標(biāo)閃爍位定為年個(gè)位 break; } } } if(P2==0xde)//時(shí)分秒-1模塊 { delay(5); if(P2==0xde) { while(P2==0xde); switch(s1num) { case1: second--;//秒- if(second==255)second=59;//復(fù)位 write_hms(8,second);//秒輸出顯示 write_com(0x80+0x40+0x09);//光標(biāo)閃爍位定為秒個(gè)位 break; case2: minute--; if(minute==255)minute=59;//復(fù)位 write_hms(5,minute);//分輸出顯示 write_com(0x80+0x40+0x06);//光標(biāo)閃爍位定為分個(gè)位 break; case3: hour--; if(hour==255)hour=23;//復(fù)位 write_hms(2,hour);//時(shí)輸出顯示 write_com(0x80+0x40+0x03);//光標(biāo)閃爍位定為時(shí)個(gè)位 break; case4: date--;//日- if(year%4==0) { if(date==0) { date=month1[month-1]; } } else { if(date==0) { date=month0[month-1]; } } write_ymd(10,date);//日輸出顯示 write_com(0x80+0x0b);//光標(biāo)閃爍位定為日個(gè)位 break; case5: month--;//月- if(month==0)month=12; if(year%4==0)//判斷日和月的配對(duì)關(guān)系 { if(date>month1[month-1])date=month1[month-1]; } else { if(date>month0[month-1])date=month0[month-1]; } write_ymd(10,date);//日輸出顯示 write_ymd(7,month);//月輸出顯示 write_com(0x80+0x08);//光標(biāo)閃爍位定為月個(gè)位 break; case6: year--;//年- if(year==1)year=99;//復(fù)位 write_ymd(4,year);//年輸出顯示 write_com(0x80+0x05);//光標(biāo)閃爍位定為年個(gè)位 break; } } }}voidinitialize()//LCD初始化函數(shù){ ucharnu

溫馨提示

  • 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論