已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)原理及應(yīng)用綜合實(shí)訓(xùn)報(bào)告題目: 電子時鐘的設(shè)計(jì) 院 別: 自動化學(xué)院 專 業(yè): 電氣工程及其自動化 1 姓 名: 笑嘻嘻 學(xué) 號: 36 指導(dǎo)教師: 祁偉 答辯日期: 2011年9月19日 20電子時鐘制作摘 要本實(shí)訓(xùn)借用實(shí)驗(yàn)板的MCS51單片機(jī)定時、中斷功能完成電子時鐘的定時工作,應(yīng)用8051對單片機(jī)I/O口驅(qū)動發(fā)光二極管、LED進(jìn)行電子時鐘時、分、秒顯示。應(yīng)用8051P3口、8255B口完成時間的設(shè)定工作。利用P1口加入華彩設(shè)計(jì),如發(fā)光二極管按鍵指示、時鐘報(bào)時等。再根據(jù)電子時鐘實(shí)際應(yīng)用完成系統(tǒng)總體設(shè)計(jì)。,根據(jù)系統(tǒng)總體設(shè)計(jì)完成編程設(shè)計(jì)工作,最后通電、軟件調(diào)試、運(yùn)行。關(guān)鍵詞:電子時鐘;8051; 8051P3;8255B目錄1電子時鐘的概述12電子時鐘的硬件電路設(shè)計(jì)12.1選用單片機(jī)22.2發(fā)光二極管8字?jǐn)?shù)碼管的顯示32.3單片機(jī)I/O口擴(kuò)展42.4獨(dú)立式按鍵53電子時鐘軟件設(shè)計(jì)部分63.1程序流程圖63.2定時中斷服務(wù)程序流程圖83.3擴(kuò)展功能程序流程84電子時鐘實(shí)用說明94心得體會95附錄10程序代碼101電子時鐘的概述電子時鐘功用,能利用MCS51單片機(jī)定時、中斷功能完成時間的定時工作。整個系統(tǒng)具有參數(shù)設(shè)定、時間運(yùn)行、報(bào)時、查詢當(dāng)前年、月、日等功能。開機(jī)可顯示HELLO-,按某個特定的按鍵后,時鐘還可以開始計(jì)時,還可以通過另一些鍵功能,完成分,時、日、月、年參數(shù)設(shè)定。參數(shù)設(shè)定完后,也可以通過一些鍵繼續(xù)計(jì)時。電子時鐘常顯示的是當(dāng)前的時間,年、月、日還可以通過按幾個特定的鍵切換、查詢, 6位LED顯示查詢的內(nèi)容,如現(xiàn)在的年月日。注意事項(xiàng):時鐘計(jì)時時可進(jìn)行時間查詢,但不能更改參數(shù),若要更改參數(shù),必須先停止時鐘運(yùn)行。2電子時鐘的硬件電路設(shè)計(jì)2.1選用單片機(jī)MCS51系統(tǒng)選用8051單片機(jī),如圖1所示。8051單片機(jī)內(nèi)有4KROM、256字節(jié)RAM,程序存放在4KROM。8051單片機(jī)最小系統(tǒng)組成有:1)時鐘電路:工作時鐘;2)復(fù)位電路,如圖2所示;3)RAM:數(shù)據(jù)存儲4)ROM:程序存儲5)I/O接口:與外界交互 晶振電路如圖3所示。圖3 圖2 圖12.2發(fā)光二極管8字?jǐn)?shù)碼管的顯示LED顯示有靜態(tài)顯示和動態(tài)顯示兩種方式。動態(tài)顯示接口電路簡圖如圖4所示。將各位數(shù)碼管的段并聯(lián)接在一起,由P1口控制(字型口),每一個數(shù)碼管的共陰極(共陽極)接到P2.0、P2.1作為位選信號。雖說要顯示的字型碼通過P1口同時送到了每一個數(shù)碼管,但它們不會同時顯示同一個字符,只有控制共陰極(共陽極)的位選信號有效時,對應(yīng)的數(shù)碼管才會顯示相應(yīng)字符。這種由字型口控制要顯示字符的字形碼,依此循環(huán)選通每位數(shù)碼管的位選信號就得到了動態(tài)顯示效果。它主要是利用人眼的視覺暫留特性及數(shù)碼管得余光特性,看上去似乎是多位數(shù)碼管同時顯示。是當(dāng)顯示位數(shù)較多時,節(jié)省硬件,接口電路簡單,但顯示占用CPU時間。靜態(tài)顯示占用CPU時間短,顯示簡單、穩(wěn)定,但當(dāng)顯示位數(shù)較多時,占用接口資源多。動態(tài)顯示接口電路較簡單,但占用CPU時間,顯示亮度 較靜態(tài)顯示差,一般說,顯示位數(shù)較多時,采用動態(tài)或串并轉(zhuǎn)換;顯示位數(shù)較少時,采用靜態(tài)顯示方式。 圖4靜態(tài)顯示接口電路如圖5所示。選用共陰極LED,將共陰極點(diǎn)連接在一起接地,每一位的段選線與一個8位并行口相連,只要將要 顯示的字符的字型碼送至并行口鎖存, 圖5LED顯示器上便立即顯示出該字符,直到CPU送來一個新的字型碼為止,由于靜態(tài)顯示每位數(shù)碼管均有獨(dú)立的段選碼,耗電量大,硬件多。如要外接6個數(shù)碼管,則需要6個8位并行口。2.3單片機(jī)I/O口擴(kuò)展當(dāng)單片機(jī)構(gòu)成系統(tǒng)時,常常I/O口不夠用,此時可利用MCS51的擴(kuò)展能力,根據(jù)需要擴(kuò)展相應(yīng)接口,如可編程接口芯片8255與MCS51單片機(jī)連接可擴(kuò)展I/O;利用MCS-51單片機(jī)的 串行口擴(kuò)展并行I/O接口。實(shí)驗(yàn)板原理圖的顯示部分就是利用串入/并出技術(shù)實(shí)現(xiàn)2位數(shù)碼管的顯示。2.4獨(dú)立式按鍵 鍵盤是一組按鈕式開關(guān)的集合,常采用軟件來識別。鍵盤的操作步驟:識鍵。判斷是否有鍵按下(鍵入),若有,則需進(jìn)一步譯鍵。譯鍵。在有鍵入的情況下,進(jìn)一步識別是哪一個鍵,以便作進(jìn)一步處理。鍵義分析。根據(jù)識別的結(jié)果,明確相應(yīng)的鍵義。如果是數(shù)字鍵,應(yīng)得出輸出的數(shù)值;如果是功能鍵,則應(yīng)知道具體的操作要求。 鍵盤構(gòu)成:獨(dú)立聯(lián)接式非編碼鍵盤。 特點(diǎn):每個鍵相互獨(dú)立,各自接通一條輸入數(shù)據(jù)線。鍵未按下時,相應(yīng)的數(shù)據(jù)線處于高電平,即為“1”態(tài)。當(dāng)某鍵按下時,該鍵所連之?dāng)?shù)據(jù)線接地,即為“0”態(tài)。獨(dú)立聯(lián)接式編碼鍵盤。 特點(diǎn):在鍵數(shù)較多時,可采用獨(dú)立式編碼鍵盤,由4線-16線編碼電路進(jìn)行編碼。 矩陣聯(lián)接式非編碼。特點(diǎn):先使一行線接地,然后檢查列線。如果某條列線也是低電位,則可判別兩線相交處的某號鍵已按下。假如在掃描時沒有發(fā)現(xiàn)有列線為地電位,則說明此行中無鍵按下。那么可將下一行線接地,如此逐一掃描列線,直到查完最后一行為止。 實(shí)驗(yàn)板中鍵盤電路設(shè)計(jì)可根據(jù)需要組合成獨(dú)立聯(lián)接式非編碼鍵盤及矩陣聯(lián)接式非編碼,見圖6所示。 圖63電子時鐘軟件設(shè)計(jì)部分3.1程序流程圖編寫程序之前先繪制程序流程圖,理清思路,使之能簡明、直觀指示程序流向,且很容易由此編寫出具體的源程序。將程序以模塊方式分割成具有相應(yīng)功能的子程序。根據(jù)系統(tǒng)功能,合理安排主程序任務(wù),中斷服務(wù)程序任務(wù)。圖1-6主程序框圖開始各功能的初始化有按鍵否?顯示HELLO-YNP3.2鍵嗎?時鐘運(yùn)行K12鍵嗎?K13鍵嗎?Y參數(shù)設(shè)定YNN日查詢顯示K14鍵嗎?月查詢顯示K15鍵嗎?年查詢顯示YYYNNN程序設(shè)計(jì)有兩個分支:參數(shù)設(shè)定及時鐘運(yùn)行。靜態(tài)參數(shù)設(shè)定時,定時器關(guān)閉,只完成參數(shù)“加一鍵”的設(shè)定工作。時鐘運(yùn)行時,啟動定時器開始計(jì)時。編寫程序時, 圖7首先理清思路,即通過流程圖確定算法。主程序框圖 如圖7所示。在主程序中,分別初始化了定時器0和外部中斷0。定時器0的中斷服務(wù)程序用于實(shí)現(xiàn)時鐘運(yùn)進(jìn)入中斷圖1-7中斷服務(wù)程序框圖定時初值重置秒到否?NYN秒加1分到否?分加1時到否?時加1日到否?日加1月到否?月加1年到否?年加1Y中斷返回NNNNYYYY行時的秒加1及進(jìn)位功能。外部中斷0的中斷服務(wù)程序使r=1。因此,當(dāng)開始運(yùn)行程序時,r=0,數(shù)碼管顯示HELLO-;當(dāng)P3.2按下時,進(jìn)入外部中斷0中斷服務(wù)程序,使r=1,退出中斷服務(wù)程序后,時鐘開始運(yùn)行;在時鐘 運(yùn)行過程中,如果分別按下K13、K14、K15可設(shè)置時間,查詢年、月、日。3.2定時中斷服務(wù)程序流程圖定時中斷服務(wù)程序流程圖如圖8所示。圖8 圖8圖83.3擴(kuò)展功能程序流程擴(kuò)展功能程序流程如圖9所示。年查詢顯示月查詢顯示日查詢顯示K12或k13?k12或k13?K12或k15?加或減參數(shù)加或減參數(shù)加或減參數(shù)時鐘運(yùn)行P3.2按下圖94電子時鐘實(shí)用說明1、開機(jī)時,顯示HELLO-。2、按下K16鍵,電子時鐘開始運(yùn)行,數(shù)碼管顯示時、分、秒。3、按下K13鍵,進(jìn)入時間參數(shù)設(shè)置,此時可再次通過K13鍵進(jìn)行年、月日、時分的切換,并通過K12、K14可分別對年、月、日、時、分加1、減1,由此完成時間的設(shè)定。4、當(dāng)數(shù)碼管顯示時分秒,可通過K14、K15查詢年、月、日。4心得體會在本次實(shí)驗(yàn)中重新復(fù)習(xí)了單片機(jī)實(shí)驗(yàn)的內(nèi)容,更加深了對程序和項(xiàng)目的訓(xùn)練。雖然開始的時候感覺比較,后來經(jīng)過多天的努力和溫習(xí),終于可以把以前半懂不懂的知識比較完整的拼湊在一起。這次實(shí)驗(yàn)程序的編寫和調(diào)試所花時間比較多,寫報(bào)告的用的時間比較少。對于這次實(shí)驗(yàn)的不足之處還是需要更深刻的檢討,希望以后更加努力。5附錄程序代碼/*/程序名shizhong.C/功能描述:電子時鐘 /硬件電路參看實(shí)驗(yàn)板/*/#include#include#define uchar unsigned char#define uint unsigned int#define COM8255 XBYTE0xffff#define PA8255 XBYTE0Xfffc#define PB8255 XBYTE0Xfffd#define PC8255 XBYTE0Xfffe#define OSC_FREQ /12Mhz#define C1ms (65536 - OSC_FREQ/(/980) /1ms定時 sbit P1_4=P14;/位選控制sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;sbit P2_0=P20; /數(shù)碼管段碼控制 asbit P2_1=P21;sbit P2_2=P22;sbit P2_3=P23;sbit P2_4=P24;sbit P2_5=P25;sbit P2_6=P26;sbit P2_7=P27;/數(shù)碼管段碼控制 dpsbit P3_2=P32; /中斷、返回計(jì)時sbit es=P24; /更新靜態(tài)顯示sbit P1_2=P12;/8255片選P1_2=0sbit P1_1=P11;/8255片選P1_1=1sbit P1_0=P10;/8255片選P1_0=0uchar code hello=0x89,0x86,0xc7,0xc7,0xfc,0x02; /HELLO-uchar code number1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /動態(tài)顯示0-9uchar code number2=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6; /靜態(tài)顯示0-9uchar code number3=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; /動態(tài)顯示0-9 dp點(diǎn)亮uint year=2011,month=9,day=3,hour=15,minute=35,second=25;uint x,y,m,n,i=0,j=0,k=0,r=0;void Timer_1ms(uint _1ms); /延時1msvoid Set_Init_Timer0(); /定時器0初始化函數(shù)void Set_Init_Xint0(); /外部中斷0初始化函數(shù)void Set_Init_8255(); /8255初始化程序void dis_hello();/開機(jī)顯示HELLO-void dis_year();/顯示年void dis_month();void dis_day();void dis_hour();void dis_minute();void dis_second();void undis_second(); /不顯示秒void set_timer(); /設(shè)置時間void dis_year2(); /在查詢狀態(tài)下顯示年void dis_day2(); /在查詢狀態(tài)下顯示日期void main()Set_Init_Xint0();Set_Init_8255();Set_Init_Timer0();doif(r=0)dis_hello();else EX0=0;/外部中斷0 關(guān)中斷dis_hour();dis_minute();dis_second();Set_Init_8255();switch(PB8255) case 0xDF: set_timer();break; /PB=0xDF,K13鍵按下 切換到設(shè)置時間程序case 0xBF: dis_day2();break; /PB=0xBF,K14鍵按下 切換到顯示日期程序case 0x7F: dis_year2();break; /PB=0x7F,K15鍵按下 切換到顯示年的程序while(1);void Timer_1ms(uint _1ms) /延時函數(shù) TMOD =0x11; TR1 = 1; while (_1ms-) TH1 = C1ms/256; TL1 = C1ms%256; while (!TF1); TF1 = 0; TR1 = 0;void Set_Init_Timer0()/定時器0初始化函數(shù)TMOD=0x11; /定時器0,方式一TH0=0x3C;TL0=0xAF; /裝入初值15535 設(shè)成50ms定時器ET0=1;TR0=1;EA=1;void Set_Init_Xint0() /外部中斷0初始化函數(shù)IT0=1; /外部中斷0,邊沿觸發(fā)方式EX0=1; /外部中斷0 開中斷EX1=1;/打開總中斷void dis_hello() /顯示HELLO- P1=0x70; /位選P2=hello0; /數(shù)碼管顯示HTimer_1ms(5);P1=0xb0;P2=hello1;Timer_1ms(5); P1=0xd0;P2=hello2;Timer_1ms(5);P1=0xe0;P2=hello3;Timer_1ms(5);SCON=0x00;es=0;SBUF=hello4;while(!TI)TI=0;SBUF=hello5;while(!TI)TI=0;es=1; /靜態(tài)顯示更新/對year變量通過除法、取余運(yùn)算得到各位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_year() x=year/100;y=x%10; /百位x=x/10; /千位m=year%100;n=m%10; /個位m=m/10; /十位P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number1y;Timer_1ms(5);P1=0xd0;P2=number1m;Timer_1ms(5);P1=0xe0;P2=number1n;Timer_1ms(5);undis_second();/對month變量通過除法、取余運(yùn)算得到十位、個位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_month()x=month/10;y=month%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number1y;Timer_1ms(5);/對day變量通過除法、取余運(yùn)算得到十位、個位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_day()x=day/10;y=day%10;P1=0xd0;P2=number1x;Timer_1ms(5);P1=0xe0;P2=number1y;Timer_1ms(5);undis_second();/對hour變量通過除法、取余運(yùn)算得到十位、個位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_hour()x=hour/10;y=hour%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number3y;Timer_1ms(5);/對minute變量通過除法、取余運(yùn)算得到十位、個位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_minute() uint x,y;x=minute/10;y=minute%10;P1=0xd0;P2=number1x;Timer_1ms(5);P1=0xe0;P2=number1y;Timer_1ms(5);/對second變量通過除法、取余運(yùn)算得到十位、個位的數(shù)值,并送到對應(yīng)的數(shù)碼管上void dis_second() x=second/10;y=second%10;SCON=0x00;es=0;SBUF=number2x;while(!TI)TI=0;SBUF=number2y;while(!TI)TI=0;es=1;/將0x00送到顯示秒的數(shù)碼管上,讓這兩個數(shù)碼管不顯示void undis_second() SCON=0x00;es=0;SBUF=0x00;while(!TI)TI=0;SBUF=0x00;while(!TI)TI=0;es=1;/時間設(shè)置函數(shù),K12對變量加1 K13實(shí)現(xiàn)變量切換(使用goto語句) K14對變量減1 void set_timer() TR0=0; /關(guān)閉定時器0dofor(i=0;i=5;i+)dis_year();undis_second();Timer_1ms(5);Set_Init_8255( );switch(PB8255) case 0xEF: year+;break; /PB=0xEF,K12鍵按下 year加1case 0xBF: year-;break; /PB=0xEF,K14鍵按下 year減1case 0xDF: goto month; break; /PB=0xDF,K13鍵按下切換到設(shè)置月程序 while(1);month:doif(month=13) /判斷進(jìn)位month=1;for(i=0;i=5;i+)dis_month();dis_day();undis_second();Set_Init_8255( );switch(PB8255) case 0xEF: month+;break; /PB=0xEF,K12鍵按下 month加1case 0xBF: month-;break; /PB=0xEF,K14鍵按下 month減1case 0xDF: goto day;break; /PB=0xDF,K13鍵按下 切換到設(shè)置日程序 while(1);day:doif(day=31) /判斷進(jìn)位day=1;for(i=0;i=5;i+)dis_month();dis_day();undis_second();Set_Init_8255( );switch(PB8255) case 0xEF: day+;break; /PB=0xEF,K12鍵按下 day加1case 0xBF: day-;break; /PB=0xEF,K14鍵按下 day減1case 0xDF: goto hour;break; /PB=0xDF,K13鍵按下,切換到設(shè)置時程序 while(1);hour:doif(hour=24) /判斷進(jìn)位 hour=0; for(i=0;i=5;i+) dis_hour(); dis_minute(); dis_second(); Set_Init_8255( );switch(PB8255) case 0xEF: hour+;break; /PB=0xEF,K12鍵按下 hour加1case 0xBF: hour-;break; /PB=0xEF,K14鍵按下 hour減1case 0xDF: goto minute;break; /PB=0xDF,K13鍵按下 切換到設(shè)置分程序 while(1);minute:doif(minute=60) /判斷進(jìn)位minute=0;for(i=
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 限位片課程設(shè)計(jì)
- 虹吸課程設(shè)計(jì)
- 面源污染課程設(shè)計(jì)
- 鏈條輸送機(jī)構(gòu)課程設(shè)計(jì)
- 閥塊課程設(shè)計(jì)
- 齒輪嚙合課程設(shè)計(jì)
- 心理教育課程設(shè)計(jì)研究-洞察分析
- 透視表系列課程設(shè)計(jì)
- 險(xiǎn)灘整治課程設(shè)計(jì)
- 自動擋掛擋教學(xué)課程設(shè)計(jì)
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 納米復(fù)合材料的增韌增能機(jī)制
- 圖書館前臺接待工作總結(jié)
- 衛(wèi)生院藥品管理制度
- 神經(jīng)外科進(jìn)修匯報(bào)課件
- 2024老年人靜脈血栓栓塞癥防治中國專家共識(完整版)
- 騰訊營銷師認(rèn)證考試題庫(附答案)
- 鄰近鐵路營業(yè)線施工安全監(jiān)測技術(shù)規(guī)程 (TB 10314-2021)
- 四年級上冊脫式計(jì)算100題及答案
- 資本市場與財(cái)務(wù)管理
評論
0/150
提交評論