已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機原理及應用綜合實訓報告題目: 電子時鐘的設計 院 別: 自動化學院 專 業(yè): 電氣工程及其自動化 1 姓 名: 笑嘻嘻 學 號: 36 指導教師: 祁偉 答辯日期: 2011年9月19日 20電子時鐘制作摘 要本實訓借用實驗板的MCS51單片機定時、中斷功能完成電子時鐘的定時工作,應用8051對單片機I/O口驅動發(fā)光二極管、LED進行電子時鐘時、分、秒顯示。應用8051P3口、8255B口完成時間的設定工作。利用P1口加入華彩設計,如發(fā)光二極管按鍵指示、時鐘報時等。再根據電子時鐘實際應用完成系統(tǒng)總體設計。,根據系統(tǒng)總體設計完成編程設計工作,最后通電、軟件調試、運行。關鍵詞:電子時鐘;8051; 8051P3;8255B目錄1電子時鐘的概述12電子時鐘的硬件電路設計12.1選用單片機22.2發(fā)光二極管8字數碼管的顯示32.3單片機I/O口擴展42.4獨立式按鍵53電子時鐘軟件設計部分63.1程序流程圖63.2定時中斷服務程序流程圖83.3擴展功能程序流程84電子時鐘實用說明94心得體會95附錄10程序代碼101電子時鐘的概述電子時鐘功用,能利用MCS51單片機定時、中斷功能完成時間的定時工作。整個系統(tǒng)具有參數設定、時間運行、報時、查詢當前年、月、日等功能。開機可顯示HELLO-,按某個特定的按鍵后,時鐘還可以開始計時,還可以通過另一些鍵功能,完成分,時、日、月、年參數設定。參數設定完后,也可以通過一些鍵繼續(xù)計時。電子時鐘常顯示的是當前的時間,年、月、日還可以通過按幾個特定的鍵切換、查詢, 6位LED顯示查詢的內容,如現在的年月日。注意事項:時鐘計時時可進行時間查詢,但不能更改參數,若要更改參數,必須先停止時鐘運行。2電子時鐘的硬件電路設計2.1選用單片機MCS51系統(tǒng)選用8051單片機,如圖1所示。8051單片機內有4KROM、256字節(jié)RAM,程序存放在4KROM。8051單片機最小系統(tǒng)組成有:1)時鐘電路:工作時鐘;2)復位電路,如圖2所示;3)RAM:數據存儲4)ROM:程序存儲5)I/O接口:與外界交互 晶振電路如圖3所示。圖3 圖2 圖12.2發(fā)光二極管8字數碼管的顯示LED顯示有靜態(tài)顯示和動態(tài)顯示兩種方式。動態(tài)顯示接口電路簡圖如圖4所示。將各位數碼管的段并聯接在一起,由P1口控制(字型口),每一個數碼管的共陰極(共陽極)接到P2.0、P2.1作為位選信號。雖說要顯示的字型碼通過P1口同時送到了每一個數碼管,但它們不會同時顯示同一個字符,只有控制共陰極(共陽極)的位選信號有效時,對應的數碼管才會顯示相應字符。這種由字型口控制要顯示字符的字形碼,依此循環(huán)選通每位數碼管的位選信號就得到了動態(tài)顯示效果。它主要是利用人眼的視覺暫留特性及數碼管得余光特性,看上去似乎是多位數碼管同時顯示。是當顯示位數較多時,節(jié)省硬件,接口電路簡單,但顯示占用CPU時間。靜態(tài)顯示占用CPU時間短,顯示簡單、穩(wěn)定,但當顯示位數較多時,占用接口資源多。動態(tài)顯示接口電路較簡單,但占用CPU時間,顯示亮度 較靜態(tài)顯示差,一般說,顯示位數較多時,采用動態(tài)或串并轉換;顯示位數較少時,采用靜態(tài)顯示方式。 圖4靜態(tài)顯示接口電路如圖5所示。選用共陰極LED,將共陰極點連接在一起接地,每一位的段選線與一個8位并行口相連,只要將要 顯示的字符的字型碼送至并行口鎖存, 圖5LED顯示器上便立即顯示出該字符,直到CPU送來一個新的字型碼為止,由于靜態(tài)顯示每位數碼管均有獨立的段選碼,耗電量大,硬件多。如要外接6個數碼管,則需要6個8位并行口。2.3單片機I/O口擴展當單片機構成系統(tǒng)時,常常I/O口不夠用,此時可利用MCS51的擴展能力,根據需要擴展相應接口,如可編程接口芯片8255與MCS51單片機連接可擴展I/O;利用MCS-51單片機的 串行口擴展并行I/O接口。實驗板原理圖的顯示部分就是利用串入/并出技術實現2位數碼管的顯示。2.4獨立式按鍵 鍵盤是一組按鈕式開關的集合,常采用軟件來識別。鍵盤的操作步驟:識鍵。判斷是否有鍵按下(鍵入),若有,則需進一步譯鍵。譯鍵。在有鍵入的情況下,進一步識別是哪一個鍵,以便作進一步處理。鍵義分析。根據識別的結果,明確相應的鍵義。如果是數字鍵,應得出輸出的數值;如果是功能鍵,則應知道具體的操作要求。 鍵盤構成:獨立聯接式非編碼鍵盤。 特點:每個鍵相互獨立,各自接通一條輸入數據線。鍵未按下時,相應的數據線處于高電平,即為“1”態(tài)。當某鍵按下時,該鍵所連之數據線接地,即為“0”態(tài)。獨立聯接式編碼鍵盤。 特點:在鍵數較多時,可采用獨立式編碼鍵盤,由4線-16線編碼電路進行編碼。 矩陣聯接式非編碼。特點:先使一行線接地,然后檢查列線。如果某條列線也是低電位,則可判別兩線相交處的某號鍵已按下。假如在掃描時沒有發(fā)現有列線為地電位,則說明此行中無鍵按下。那么可將下一行線接地,如此逐一掃描列線,直到查完最后一行為止。 實驗板中鍵盤電路設計可根據需要組合成獨立聯接式非編碼鍵盤及矩陣聯接式非編碼,見圖6所示。 圖63電子時鐘軟件設計部分3.1程序流程圖編寫程序之前先繪制程序流程圖,理清思路,使之能簡明、直觀指示程序流向,且很容易由此編寫出具體的源程序。將程序以模塊方式分割成具有相應功能的子程序。根據系統(tǒng)功能,合理安排主程序任務,中斷服務程序任務。圖1-6主程序框圖開始各功能的初始化有按鍵否?顯示HELLO-YNP3.2鍵嗎?時鐘運行K12鍵嗎?K13鍵嗎?Y參數設定YNN日查詢顯示K14鍵嗎?月查詢顯示K15鍵嗎?年查詢顯示YYYNNN程序設計有兩個分支:參數設定及時鐘運行。靜態(tài)參數設定時,定時器關閉,只完成參數“加一鍵”的設定工作。時鐘運行時,啟動定時器開始計時。編寫程序時, 圖7首先理清思路,即通過流程圖確定算法。主程序框圖 如圖7所示。在主程序中,分別初始化了定時器0和外部中斷0。定時器0的中斷服務程序用于實現時鐘運進入中斷圖1-7中斷服務程序框圖定時初值重置秒到否?NYN秒加1分到否?分加1時到否?時加1日到否?日加1月到否?月加1年到否?年加1Y中斷返回NNNNYYYY行時的秒加1及進位功能。外部中斷0的中斷服務程序使r=1。因此,當開始運行程序時,r=0,數碼管顯示HELLO-;當P3.2按下時,進入外部中斷0中斷服務程序,使r=1,退出中斷服務程序后,時鐘開始運行;在時鐘 運行過程中,如果分別按下K13、K14、K15可設置時間,查詢年、月、日。3.2定時中斷服務程序流程圖定時中斷服務程序流程圖如圖8所示。圖8 圖8圖83.3擴展功能程序流程擴展功能程序流程如圖9所示。年查詢顯示月查詢顯示日查詢顯示K12或k13?k12或k13?K12或k15?加或減參數加或減參數加或減參數時鐘運行P3.2按下圖94電子時鐘實用說明1、開機時,顯示HELLO-。2、按下K16鍵,電子時鐘開始運行,數碼管顯示時、分、秒。3、按下K13鍵,進入時間參數設置,此時可再次通過K13鍵進行年、月日、時分的切換,并通過K12、K14可分別對年、月、日、時、分加1、減1,由此完成時間的設定。4、當數碼管顯示時分秒,可通過K14、K15查詢年、月、日。4心得體會在本次實驗中重新復習了單片機實驗的內容,更加深了對程序和項目的訓練。雖然開始的時候感覺比較,后來經過多天的努力和溫習,終于可以把以前半懂不懂的知識比較完整的拼湊在一起。這次實驗程序的編寫和調試所花時間比較多,寫報告的用的時間比較少。對于這次實驗的不足之處還是需要更深刻的檢討,希望以后更加努力。5附錄程序代碼/*/程序名shizhong.C/功能描述:電子時鐘 /硬件電路參看實驗板/*/#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; /數碼管段碼控制 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;/數碼管段碼控制 dpsbit P3_2=P32; /中斷、返回計時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點亮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初始化函數void Set_Init_Xint0(); /外部中斷0初始化函數void Set_Init_8255(); /8255初始化程序void dis_hello();/開機顯示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(); /設置時間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 關中斷dis_hour();dis_minute();dis_second();Set_Init_8255();switch(PB8255) case 0xDF: set_timer();break; /PB=0xDF,K13鍵按下 切換到設置時間程序case 0xBF: dis_day2();break; /PB=0xBF,K14鍵按下 切換到顯示日期程序case 0x7F: dis_year2();break; /PB=0x7F,K15鍵按下 切換到顯示年的程序while(1);void Timer_1ms(uint _1ms) /延時函數 TMOD =0x11; TR1 = 1; while (_1ms-) TH1 = C1ms/256; TL1 = C1ms%256; while (!TF1); TF1 = 0; TR1 = 0;void Set_Init_Timer0()/定時器0初始化函數TMOD=0x11; /定時器0,方式一TH0=0x3C;TL0=0xAF; /裝入初值15535 設成50ms定時器ET0=1;TR0=1;EA=1;void Set_Init_Xint0() /外部中斷0初始化函數IT0=1; /外部中斷0,邊沿觸發(fā)方式EX0=1; /外部中斷0 開中斷EX1=1;/打開總中斷void dis_hello() /顯示HELLO- P1=0x70; /位選P2=hello0; /數碼管顯示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變量通過除法、取余運算得到各位的數值,并送到對應的數碼管上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變量通過除法、取余運算得到十位、個位的數值,并送到對應的數碼管上void dis_month()x=month/10;y=month%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number1y;Timer_1ms(5);/對day變量通過除法、取余運算得到十位、個位的數值,并送到對應的數碼管上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變量通過除法、取余運算得到十位、個位的數值,并送到對應的數碼管上void dis_hour()x=hour/10;y=hour%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number3y;Timer_1ms(5);/對minute變量通過除法、取余運算得到十位、個位的數值,并送到對應的數碼管上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變量通過除法、取余運算得到十位、個位的數值,并送到對應的數碼管上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送到顯示秒的數碼管上,讓這兩個數碼管不顯示void undis_second() SCON=0x00;es=0;SBUF=0x00;while(!TI)TI=0;SBUF=0x00;while(!TI)TI=0;es=1;/時間設置函數,K12對變量加1 K13實現變量切換(使用goto語句) K14對變量減1 void set_timer() TR0=0; /關閉定時器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鍵按下切換到設置月程序 while(1);month:doif(month=13) /判斷進位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鍵按下 切換到設置日程序 while(1);day:doif(day=31) /判斷進位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鍵按下,切換到設置時程序 while(1);hour:doif(hour=24) /判斷進位 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鍵按下 切換到設置分程序 while(1);minute:doif(minute=60) /判斷進位minute=0;for(i=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度車輛掛靠車輛維修保養(yǎng)連鎖經營合同4篇
- 二零二五年度商業(yè)地產承包經營招租協(xié)議8篇
- 二零二五年度無障礙電梯安裝與改造合同4篇
- 2025年綠色廚房建設與管理服務合同范本4篇
- 2025年度個人債權債權轉質合同模板3篇
- 二零二五年度兒童床上用品安全認證采購合同4篇
- 2025年度農家樂旅游紀念品設計與銷售合同2篇
- 2025年度電梯設備租賃及維保一體化服務合同3篇
- 2025年打印機耗材供應與售后服務協(xié)議范本4篇
- 二零二五年度打井作業(yè)安全責任協(xié)議書編制要點3篇
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 油氣行業(yè)人才需求預測-洞察分析
- 《數據采集技術》課件-Scrapy 框架的基本操作
- 2025年河北省單招語文模擬測試二(原卷版)
- 高一化學《活潑的金屬單質-鈉》分層練習含答案解析
- DB34∕T 4010-2021 水利工程外觀質量評定規(guī)程
- 2024年內蒙古中考英語試卷五套合卷附答案
- 四年級上冊脫式計算100題及答案
- 上海市12校2023-2024學年高考生物一模試卷含解析
- 儲能電站火災應急預案演練
- 人教版(新插圖)二年級下冊數學 第4課時用“進一法”和“去尾法”解決簡單的實際問題 教學課件
評論
0/150
提交評論