基于單片機的數字時鐘設計實訓報告_第1頁
基于單片機的數字時鐘設計實訓報告_第2頁
基于單片機的數字時鐘設計實訓報告_第3頁
基于單片機的數字時鐘設計實訓報告_第4頁
基于單片機的數字時鐘設計實訓報告_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE15摘要近年來隨著計算機在社會領域的滲透和大規模集成電路的發展,單片機的應用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此特別適合于與控制有關的系統,越來越廣泛地應用于自動控制,智能化儀器,儀表,數據采集,軍工產品以及家用電器等各個領域,單片機往往是作為一個核心部件來使用,在根據具體硬件結構,以及針對具體應用對象特點的軟件結合,以作完善本次做的數字鐘是以單片機(AT89C51)為核心,結合相關的元器件(3個2位共陽數碼管,一個發光二極管和一個蜂鳴器)和應用程序(proteus軟件和KEIL編譯軟件),構成相應的應用系統。關鍵詞:單片機AT89C51共陽數碼管發光二極管蜂鳴器proteus軟件KEIL編譯軟件目錄1.課題設計目的 42.AT89C51的單片機簡介 42.1LED顯示電路 72.2鍵盤控制電路 73.課程設計報告內容 83.1.方案設計要求 83.2系統設計流程圖 83.3繪制數字時鐘電路Protues仿真原理圖 93.4運行程序 104.總結 105.數字時鐘源程序 10-19數字時鐘設計1.課題設計目的數字電子鐘具有走時準確,一鐘多用等特點,在生活中已經得到廣泛的應用本文主要介紹用單片機內部的定時/計數器來實現電子時鐘的方法,本設計由單片機AT89C51芯片和3個兩位一體的共陽極的數碼管為核心,輔以必要的電路,構成了一個單片機數字時鐘。2.AT89C51的單片機簡介(一)AT89C51的介紹AT89C51單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數器和多種功能的I/O接口電路等一臺計算機所需要的基本功能部件,AT89C51單片機內包含下列幾個部件:(1)一個8位CPU;(2)一個片內振蕩器及時鐘電路;(3)4K字節ROM程序存儲器;(4)128字節RAM數據存儲器;(5)兩個16位定時器/計數器;(6)可尋址64K外部數據存儲器和64K外部程序存儲器空間的控制電路;(7)32條可編程的I/O線(四個8位并行I/O端口);(8)一個可編程全雙工串行口;(9)具有五個中斷源、兩個優先級嵌套中斷結構。(二)AT89C51單片機的部分管腳說明:AT89C51單片機采用40條引腳雙列直插式器件,引腳除5V(40腳)和電源地(20腳)外,其功能分為時鐘電路、控制信號、輸入/輸出三大部分,引腳圖如下圖:①Vcc40電源端;GND20接地端。工作電壓為5V。②外接晶振引腳晶振連接的內部、外部方式圖XTAL119、XTAL218:XTAL1是片內振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到XTAL1,而XTAL2懸空。內部方式時,時鐘發生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內選擇。電容取30PF左右。系統的時鐘電路設計是采用的內部方式,即利用芯片內部的振蕩電路。③復位RST9常用復位電路圖在振蕩器運行時,有兩個機器周期(24個振蕩周期)以上的高電平出現在此引腿時,將使單片機復位,只要這個腳保持高電平,51芯片便循環復位。復位后P0-P3口均置1引腳表現為高電平,程序計數器和特殊功能寄存器SFR全部清零。④/EA=131腳當/EA=1時,訪問內部程序存儲器,當PC值超過內ROM范圍時,自動轉執行外部程序存儲器的程序;當/EA=0時,只訪問外部程序存儲器。(三)另外介紹一下輸入輸出引腳(本系統只用到P0、P1、P2口):(1)P0端口[P0.0-P0.7]是一個8位漏極開路型雙向I/O端口,端口置1(對端口寫1)時作高阻抗輸入端。作為輸出口時能驅動8個TTL。對內部Flash程序存儲器編程時,接收指令字節;校驗程序時輸出指令字節,要求外接上拉電阻。在訪問外部程序和外部數據存儲器時,P0口是分時轉換的地址(低8位)/數據總線,訪問期間內部的上拉電阻起作用。(2)P1端口[P1.0-P1.7]是一個帶有內部上拉電阻的8位雙向I/0端口。輸出時可驅動4個TTL。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。對內部Flash程序存儲器編程時,接收低8位地址信息。(3)P2端口[P2.0-P2.7]是一個帶有內部上拉電阻的8位雙向I/0端口。輸出時可驅動4個TTL。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。對內部Flash程序存儲器編程時,接收高8位地址和控制信息。在訪問外部程序和16位外部數據存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數據存儲器時其引腳上的內容在此期間不會改變。2.1LED顯示電路本課程設計用到共陽極數碼管通過其引腳圖,便可順利完成其連接。。2.3鍵盤控制電路通過S1、S2、S3和S4四個按鍵,對時間進行修改和鬧鐘的設置,S0控制鬧鐘的啟動和停止。按下S1鍵顯示鬧鐘,松開后顯示時間;按下S4鍵進入時間修改模式,再按S4鍵時間的時加1,按S2分加1,調整結束后按下S1恢復正常顯示;按下S3鍵進入鬧鐘修改模式,再按S3鍵鬧鐘的時加1,按S2分加1,調整結束后按下S1恢復正常顯示。當用手按下一個鍵時,往往按鍵在閉合位置和斷開位置之間跳幾下才穩定到閉合狀態的情況;在釋放一個鍵時,也會出現類似的情況,這就是抖動。抖動的持續時間隨鍵盤材料和操作員而異,不過通常總是不大于10ms。很容易想到,抖動問題不解決就會引起對閉合鍵的識別。用軟件方法可以很容易地解決抖動問題,這就是通過延遲10ms來等待抖動消失,這之后,再讀入鍵盤碼。3.課程設計報告內容3.1.方案設計要求設計制作一個數字時鐘,要求能實現基本走時,并以數字形式顯示時、分、秒;采用24小時制;能實現校時、校分,定時鬧鐘的功能,也可以添加其他功能.采用單片機最小系統實現功能。優點:電路簡單,能通過程序進行隨機調整并擴展功能,成本低,易于實現。缺點:走時有一定的誤差。經過綜合考慮成本問題以及電路實現問題,選擇第三種方案實現設計要求。3.2系統設計流程圖如下圖所示3.3制數字時鐘電路Protues仿真原理圖通過S1、S2、S3和S4四個按鍵,對時間進行修改和鬧鐘的設置,S0控制鬧鐘的啟動和停止。按下S1鍵顯示鬧鐘,松開后顯示時間;按下S4鍵進入時間修改模式,再按S4鍵時間的時加1,按S2分加1,調整結束后按下S1恢復正常顯示;按下S3鍵進入鬧鐘修改模式,再按S3鍵鬧鐘的時加1,按S2分加1,調整結束后按下S1恢復正常顯示。3.4運行程序4.總結經過這次單片機課程設計實驗,讓我獲得了很多知識,進一步加深了我對AT89C51單片機的掌握,另外也鞏固了我的編程思想和焊接技術.本次的課程設計,讓我發現理論必須用于實踐,否則只是一張白紙。此外只有理論水平提高了,才能更好的運用于實踐。另外,本次課程設計也考驗了我的認真的態度。只有做事擁有認真的態度與科學的方法,才能成功。5.1數字時鐘源程序#include<reg51.h>#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;sbitbeep=P2^3;unsignedcharj,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;ucharshi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;unsignedintpp;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelay(unsignedchari){for(j=i;j>0;j--)for(k=125;k>0;k--);}voiddisplay(ucharshi2,ucharshi1,ucharfen2,ucharfen1,ucharmiao2,ucharmiao1){dula=0;P0=table[shi2];dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;delay(5);P0=table[shi1]|0x80;dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(5);P0=table[fen2];dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(5);P0=table[fen1]|0x80;dula=1;dula=0;P0=0xf7;wela=1;wela=0;delay(5);P0=table[miao2];dula=1;dula=0;P0=0xef;wela=1;wela=0;delay(5);P0=table[miao1];dula=1;dula=0;P0=0xdf;wela=1;wela=0;delay(5);}voidkeyscan0(){P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xbb:ok=0;break;case0x7b:ok=1;break;}}} }voidkeyscan(){{ P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){ temp=P3;switch(temp){case0xee:key=0; wei++;break;case0xde:key=1; wei++;break;case0xbe:key=2; wei++;break;case0x7e:key=3; wei++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4; wei++;break;case0xdd:key=5; wei++;break;case0xbd:key=6; wei++;break;case0x7d:key=7; wei++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xeb:key=8; wei++;break;case0xdb:key=9; wei++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}}}voidmain(){ TMOD=0x01; TH0=(65536-46080)/256;//由于晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。 TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12 ET0=1; EA=1; while(1) { keyscan0(); if(ok==1) { TR0=1; wei=0; if(pp==20) { pp=0; m++; if(m==60) { m=0; f++; if(f==60) { f=0; s++; if(s==24)//為24h一個循環,若要12h,只需在此改為12即可。 { s=0; } }

溫馨提示

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

評論

0/150

提交評論