LCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)_第1頁(yè)
LCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)_第2頁(yè)
LCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)_第3頁(yè)
LCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)_第4頁(yè)
LCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、武漢紡織大學(xué)課程設(shè)計(jì)報(bào)告學(xué)院:電子信息工程學(xué)院班級(jí):電信XX姓名:XXX學(xué)號(hào):20100722指導(dǎo)老師:XXXLCD液晶多功能數(shù)字時(shí)鐘設(shè)計(jì)一.設(shè)計(jì)要求設(shè)計(jì)制作基于LCD液晶顯示屏的,可以調(diào)整的時(shí)鐘系統(tǒng)。1.基本要求(1)采用1602液晶屏顯示顯示時(shí)間。(2)時(shí)間可以顯示為:時(shí)分秒。(3)時(shí)鐘可以通過按鍵進(jìn)行調(diào)節(jié)校正。2.發(fā)揮部分(1)選用12864液晶屏顯示日期和時(shí)鐘。(2)當(dāng)系統(tǒng)斷電后,時(shí)鐘仍然可以保持。(3)可以設(shè)置至少兩個(gè)鬧鈴;設(shè)置溫度上下限,超限可以報(bào)警二原理框圖鍵盤三電路圖設(shè)計(jì)UTC130pFC2-1.0592M30pF、C3彳、10uF(22uF)9口rVCCIRL5xvAyAVC

2、C1K1KRlw-VCCXTAL1P0.0/AD0P0.1/AD1XTAL2P0.2/AD2RSTEA/VPPP0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0/T2PSENP1.1/T2EXALEP1.2P3.0/RxDP1.3P1.4P1.5P3.1/TXDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.5/TLP2.1/A9P3.6/WRP2.2/A10P3.7/RDP2.3/A11VSSP2.4/A12P2.5/A13P2.6/A14P27/A1519TJ5K-2040VDD-VLRS/W-N-0-1-46-7

3、-r+-t-12345678910111213141516345111ppp四主要元件選擇及參數(shù)設(shè)計(jì)單片機(jī)STC89S52U130pF2_LTY30pFJTVCCVCCXTAL1P0.0/AD0P0.1/AD1XTAL2P0.2/AD2RSTEA/VPPPSENP0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0/T2P1.1/T2EXALEP1.2P3.0/RxDP1.3P1.4P1.5P3.1/TXDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.5/TLP2.1/A9P3.6/WRP2.2/A10P3.7/RDP2

4、.3/A11VSSP2.4/A12P2.5/A13P2.6/A14P27/A150310uF(22uF)9n20AT89C52STC89S52是比較常用的52系列單片機(jī)。它的工作電壓是+5v。外圍電路加上12M的晶振,使其正常工作。P2口控制DAC0832。通過對(duì)P2口賦值來改變輸出增益的大小。1602液晶1602顯示容量為16乘2個(gè)字符。工作電壓為+5v。編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2DateI/O2VDD電源正極10D3DateI/O3VL液晶顯示偏壓信號(hào)11D4DateI/O4RS數(shù)據(jù)/命令選擇端12D5DateI/O5R/W讀寫選擇端13D6DateI/O6E使能

5、端14D7DateI/O7D0DateI/O15BLA背光源正極8D1DateI/O16BLK背光源負(fù)極按鍵控制51P1.352P1.453P1.5五軟件編程按照電路圖的設(shè)計(jì)焊接好硬件電路。就開始軟件編程。程序主要分為兩個(gè)部分,即液晶顯示部分和控制按鍵的部分。由于本設(shè)計(jì)采用的是用按鍵分別控制??梢栽谥骱瘮?shù)中調(diào)用一個(gè)鍵盤掃描的函數(shù),當(dāng)相應(yīng)的不同按鍵按下后控制液晶顯示和單片機(jī)P2的輸出,從而控制液晶的顯示。源程序見附錄。本數(shù)字時(shí)鐘共使用了三個(gè)按鍵。第一個(gè)按鍵用于選擇所要調(diào)節(jié)的內(nèi)容(如年、月、日、時(shí)、分、秒),按下不同次數(shù)光標(biāo)分別在要調(diào)節(jié)的對(duì)應(yīng)位置閃爍;第二個(gè)按鍵用于所調(diào)節(jié)的量的增加,按下一次增加一

6、個(gè)單位;第三個(gè)按鍵用于所調(diào)節(jié)量的減少,按一下增加一個(gè)單位。該數(shù)字時(shí)鐘實(shí)現(xiàn)的功能是液晶正常顯示時(shí)分秒,年月日和星期。不僅可以用按鍵調(diào)節(jié)時(shí)分秒,還可以調(diào)節(jié)年月日,并且要保證星期和年月日相對(duì)應(yīng)。在這里需要指出的是由于條件限制(除非有時(shí)鐘芯片實(shí)現(xiàn)萬年歷),不可能保證星期與年月日正確對(duì)應(yīng)),故采程序中用天數(shù)對(duì)7取余數(shù),余1時(shí)為星期一(MON),余2時(shí)為星期二(TUE),依此類推,余0時(shí)為星期天(SUN),當(dāng)天數(shù)到每月最后一天時(shí)繼續(xù)上加不回歸到1,這樣可以保證星期是正確的。具體見程序中注釋。編程思路是,在確定了時(shí)鐘要實(shí)現(xiàn)的功能后按照上述各按鍵所實(shí)現(xiàn)的效果編寫程序。本程序包含液晶寫指令函數(shù)(write_co

7、m()、寫數(shù)據(jù)函數(shù)(write_data()、初始化函數(shù)(init()、寫入時(shí)分秒函數(shù)(write_sfm()、寫入月和日函數(shù)(write_nyr()【別指出,由于年包含四位數(shù)字其寫法與月和日不同,故單獨(dú)設(shè)置一個(gè)寫入年函數(shù)】、寫入星期函數(shù)(write_xq()和鍵盤掃描函數(shù),這些程序圍繞主函數(shù)互相嵌套調(diào)用。六調(diào)試部分本次實(shí)驗(yàn)的調(diào)試部分花了大量的時(shí)間。當(dāng)程序?qū)懞镁幾g通過后,下載到單片機(jī)中,調(diào)試硬件看有無顯示和輸出。調(diào)試主要分為2個(gè)部分。分別是液晶顯示部分,按鍵控制部分。首先是液晶部分,經(jīng)過幾次程序的修改,和對(duì)液晶部分電路的檢測(cè)終于將液晶部分調(diào)出有顯示。然后檢查按鍵部分。首先檢查按鍵的焊接確定無誤

8、后,進(jìn)行按鍵控制,結(jié)果顯示良好。七實(shí)驗(yàn)心得體會(huì)與總結(jié)本次實(shí)驗(yàn)總共做了兩大方面的任務(wù),編程和調(diào)試。在編程過程中必須牢牢把握數(shù)字時(shí)鐘所要實(shí)現(xiàn)的功能,在確定方案的情況下理清思路,認(rèn)真思考如何實(shí)現(xiàn)時(shí)鐘的各種功能。通過編程我認(rèn)識(shí)到一個(gè)合格的單片機(jī)編程人員必須有清晰的思路,要有全身心投入的工作精神。編寫這個(gè)程序我花費(fèi)了將近一天的時(shí)間,耗費(fèi)了不少精力。起初毫無頭緒,通過觀摩哈爾濱工程大學(xué)郭天祥老師的單片機(jī)課程視頻我學(xué)會(huì)了不少編程的技巧,如怎樣使用液晶,怎樣將年月日等字符轉(zhuǎn)換成液晶能顯示的字符,還有就是掌握了定義一個(gè)標(biāo)志變量去對(duì)應(yīng)按鍵按下的次數(shù),根據(jù)按鍵次數(shù)即變量值去實(shí)現(xiàn)不同的功能等等。我在編程過程中使用的是

9、自己購(gòu)買的單片機(jī)開發(fā)板,其液晶的用法(主要是RS、RW,E這些端口的時(shí)序),按鍵與單片機(jī)的接口等與我們自己焊接的單片機(jī)最小系統(tǒng)大有不同,程序在開發(fā)板上調(diào)制成功還要能在我們的單片機(jī)最小系統(tǒng)上工作,這也需要不斷地調(diào)試。在調(diào)試過程中我們發(fā)現(xiàn)了一些問題,一是液晶上在年月日后面空白處出現(xiàn)了亂碼,原因是在初始化函數(shù)中顯示年月日的時(shí)候for語(yǔ)句多執(zhí)行了3次;二是光標(biāo)在按鍵過快時(shí)出現(xiàn)在錯(cuò)誤位置,原因是在第一個(gè)鍵按下七次(此時(shí),時(shí)鐘開始走)時(shí)沒有把光標(biāo)重新定位;三是第一個(gè)按鍵不太靈敏,原因是按鍵在消抖的時(shí)候延時(shí)過長(zhǎng)。通過此次單片機(jī)課程設(shè)計(jì)我掌握了1602液晶的用法,也學(xué)到了很多編程技巧,然而我要想學(xué)好用好單片機(jī)

10、還有很長(zhǎng)的路要走。703AT89C52附錄一實(shí)驗(yàn)電路圖VCCR15XV/1KU1VDDVLRSVCCXTAL1XTAL2P0.0/ADP0.1/ADP0.2/AD:P0.3/AD:P0.4/ADP0.5/AD.P0.6/ADv123456789101112131415169n8R/WENDOD1D2D3D4D5D6P0.7/ADRSTEA/VPPP1.0/T2PSENP1.1/T2E:ALEP1.2P1.3P1.4P3.0/RxDP1.5P3.1/TxDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.52T1P2.1/A9P3.6/WRP2.2/A10P3

11、.7/RDP2.3/A11D7BL+VSS45-d6-h8-k24P2.4/A12P2.5/A13P2.6/A14P2.7/A15S2P1.4P1.5S3.附錄二實(shí)驗(yàn)源程序/由于每個(gè)月日期被規(guī)定為31天,到第32天時(shí)日期變?yōu)?1,星期偏差很大本程序采用天數(shù)對(duì)7取余數(shù),/天數(shù)到每月最后一天后繼續(xù)上加不歸1,減少星期誤差#include#defineucharunsignedchar#defineuintunsignedintsbitRS=P0;sbitRW=Pl;sbitE=P2;sbitsi二P3;sbits2二P4;sbits3二P5;sbits4=P1飛;ucharcodetable=20

12、i0-i2-3iFRI;ucharcodetablei=23:59:50;ucharnum,count,shi=23,fen=59,miao=50;ucharyue=i2,ri=3i;uintnian=20i0;ucharsinum,s2num,xq;voiddelay(ucharz)uintx,y;for(x=z;x0;x-)for(y=ii0;y0;y-);voidwrite_com(ucharcom)/delay(5);/E=0;RS=0;RW=0;P0=com;delay(5);/_nop_();E=0;delay(5);E=i;voidwrite_data(uchardate)/de

13、lay(5);RS=i;/E=0;RW=0;P0=date;/_nop_();delay(5);E=0;delay(5);E=1;/RS=0;voidinit()delay(15);write_com(0 x38);/displaymodewrite_com(0 x08);/displaymodewrite_com(0 x01);/displaymodewrite_com(0 x06);/顯示光標(biāo)移動(dòng)位置write_com(0 x0c);/顯示開及光標(biāo)設(shè)置write_com(0 x01);/顯示清屏write_com(0 x80);write_com(0 x02);for(num=0;num1

14、5;num+)write_data(tablenum);delay(20);write_com(0 x80+0 x41);for(num=0;num11;num+)write_data(table1num);delay(20);TMOD=0 x01;EA=1;ET0=1;TR0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;voidwrite_sfm(ucharadd,uchardate)/寫入時(shí)分秒ucharshi,ge;shi=date/10;ge=date%10;write_com(0 x80+0 x40+add);/地址指向第二行,在第二行

15、寫write_data(0 x30+shi);/write_data(0 x30+ge);voidwrite_nyr(ucharadd,uchardate)/只寫入月和日(月和日均只有十位和個(gè)位,寫法相同)ucharshi,ge;shi=date/10;ge=date%10;write_com(0 x80+add);write_data(0 x30+shi);write_data(0 x30+ge);voidwrite_nian(ucharadd,uintyear)/寫入年uintqian,bai,shi,ge;qian=year/1000;/2413/1000=2(得到千位)bai=(yea

16、r%1000)/100;/(2413%1000)=413413/100=4(得到百位)shi=(year%1000)%100)/10;/413%100=1313/10=1(得到十位)ge=(year%1000)%100)%10;write_com(0 x80+add);/13%10=3(得到個(gè)位)write_data(0 x30+qian);write_data(0 x30+bai);write_data(0 x30+shi);write_data(0 x30+ge);voidwrite_xq1(ucharadd)/星期一write_com(0 x80+add);/write_data(0 x

17、40+0 x0d);/查詢液晶的字符手冊(cè)可知MON(星期一)write_data(0 x40+0 x0f);/這三個(gè)英文字符對(duì)應(yīng)的二進(jìn)制碼write_data(0 x40+0 x0e);/voidwrite_xq2(ucharadd)/星期二write_com(0 x80+add);write_data(0 x54);write_data(0 x55);write_data(0 x45);voidwrite_xq3(ucharadd)/星期三write_com(0 x80+add);write_data(0 x50+4);write_data(0 x40+8);write_data(0 x50

18、+5);voidwrite_xq4(ucharadd)/星期四write_com(0 x80+add);write_data(0 x57);write_data(0 x45);write_data(0 x4e);voidwrite_xq5(ucharadd)/星期五write_com(0 x80+add);write_data(0 x46);write_data(0 x52);write_data(0 x49);voidwrite_xq6(ucharadd)/星期六write_com(0 x80+add);write_data(0 x53);write_data(0 x41);write_da

19、ta(0 x54);voidwrite_xq7(ucharadd)/星期日write_com(0 x80+add);write_data(0 x53);write_data(0 x55);write_data(0 x4e);voidkeyscan()/按鍵控制函數(shù)if(s1=0)/按鍵1delay(5);/按下消抖if(s1=0)s1num+;/s1num1是按鍵1的標(biāo)志變量,表示按鍵1按下的次數(shù)while(!s1);/按鍵彈起時(shí)消抖if(s1num=1)TRO=O;/時(shí)間停止走write_com(0 x80+0 x40+ll);/按鍵1按下時(shí)write_com(OxOf);/光標(biāo)在秒個(gè)位閃爍

20、,調(diào)秒if(s1num=2)write_com(0 x80+0 x40+8);/按鍵1按下第二次,光標(biāo)在分個(gè)位閃爍,調(diào)分if(s1num=3)write_com(0 x80+0 x40+5);/按鍵1按下第三次,光標(biāo)在時(shí)位閃爍,調(diào)時(shí)if(s1num=4)write_com(0 x80+4);/按鍵1按下第四次,光標(biāo)在年位閃爍,調(diào)年if(s1num=5)write_com(0 x80+7);/按鍵1按下第五次,光標(biāo)在月個(gè)位閃爍,調(diào)月if(s1num=6)write_com(0 x80+10);/按鍵1按下第六次,光標(biāo)在日個(gè)位閃爍,調(diào)日if(s1num=7)s1num=0;write_com(0

21、x0c);/光標(biāo)按下第七次,光標(biāo)回到秒個(gè)位,write_com(0 x80+11);/同時(shí)停止閃爍,定時(shí)器開,TR0=1;/時(shí)間開始走.if(s1num!=0)/按鍵按下執(zhí)行以下操作if(s2=0)/按鍵2的作用為按下時(shí)使想要調(diào)整的時(shí)分秒,年月日等數(shù)值增加delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);/刷新屏幕,將新的秒的值顯示出來,其中秒的位置為0X80+0X40+10,從此位置開始寫新的秒值write_com(0 x80+0 x40+11);if(s1num=2)fen+;

22、if(fen=60)fen=0;write_sfm(7,fen);/刷新屏幕,將新的分的值顯示出來,其中分的位置為0X80+0X40+7,從此位置開始寫新的分值write_com(0 x80+0 x40+8);if(s1num=3)shi+;if(shi=24)shi=0;ri+;write_nyr(9,ri);write_sfm(4,shi);/刷新屏幕,將新的時(shí)的值顯示出來,其中時(shí)的位置為0X80+0X40+4,從此位置開始寫新的時(shí)值,write_com(0 x80+7);write_sfm(4,shi);write_com(0 x80+0 x40+5);if(s1num=4)nian+;

23、write_nian(1,nian);/刷新屏幕,將新的年的值顯示出來,其中年的位置為0X80+1,從此位置開始寫新的年值write_com(0 x80+4);if(s1num=5)yue+;if(yue=13)yue=1;write_nyr(6,yue);/刷新屏幕,將新的月的值顯示出來,其中月的位置為0X80+6,從此位置開始寫新的月值write_com(0 x80+7);if(s1num=6)ri+;xq+;if(ri=31)ri=1;write_nyr(9,ri);/刷新屏幕,將新的日的值顯示出來,其中日的位置為0X80+9,從此位置開始寫新的日值write_com(0 x80+10)

24、;if(xq%7=0)write_xq1(12);if(xq%7=1)write_xq2(12);if(xq%7=2)write_xq3(12);if(xq%7=3)write_xq4(12);if(xq%7=4)write_xq5(12);if(xq%7=5)write_xq6(12);if(xq%7=6)write_xq7(12);write_com(0 x80+10);if(s3=0)/按鍵3的作用是按下時(shí)使想要調(diào)整的時(shí)分秒,年月日等數(shù)值減少delay(1);if(s3=0)while(!s3);if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(

25、10,miao);write_com(0 x80+0 x40+11);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0 x80+0 x40+8);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0 x80+0 x40+5);if(s1num=4)nian-;write_nian(1,nian);write_com(0 x80+4);if(s1num=5)yue-;if(yue=0)yue=12;write_nyr(6,yue);write_com(0 x80+7);if(s1num=6)ri-;xq-;if(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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)論