單片機時鐘秒表課程設計報告_第1頁
單片機時鐘秒表課程設計報告_第2頁
單片機時鐘秒表課程設計報告_第3頁
單片機時鐘秒表課程設計報告_第4頁
單片機時鐘秒表課程設計報告_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、單片機的時鐘設計 小組成員:班級: 課程老師: 目錄一、硬件結構3 1硬件原理3 1 89C52 3 1.1硬件原理3 1.2 主要功能特性31.3 管腳說明41.4振蕩器特性51.5結構特點 52、數碼管 62.1數碼管分類62.2數碼管結構 72.3驅動方式83、排阻93.1排阻的作用93.2排阻引腳說明94、晶振104.1晶振構成104.2工作原理 114.3功能作用11二、 軟件結構概述121、顯示子程序122、鍵盤掃描子程序133、中斷程序16 4、流程圖 18三、調試過程20四、心得體會22五、參考文獻23六、硬件電路圖23七、程序清單25一、 硬件結構概述1、 89C52 1.1

2、硬件原理 89C52是INTEL公司MCS-51系列單片機中基本的產品,它采用ATMEL公司可靠的CMOS工藝技術制造的高性能8位單片機,屬于標準的MCS-51的HCMOS產品。它結合了CMOS的高速和高密度技術及CMOS的低功耗特征,它基于標準的MCS-51單片機體系結構和指令系統,屬于89C51增強型單片機版本,集成了時鐘輸出和向上或向下計數器等更多的功能,適合于類似馬達控制等應用場合。89C52內置8位中央處理單元、256字節內部數據存儲器RAM、8k片內程序存儲器(ROM)32個雙向輸入/輸出(I/O)口、3個16位定時/計數器和5個兩級中斷結構,一個全雙工串行通信口,片內時鐘振蕩電路

3、。此外,89C52還可工作于低功耗模式,可通過兩種軟件選擇空閑和掉電模式。在空閑模式下凍結CPU而RAM定時器、串行口和中斷系統維持其功能。掉電模式下,保存RAM數據,時鐘振蕩停止,同時停止芯片內其它功能。89C52有PDIP(40pin)和PLCC(44pin)兩種封裝形式。 1.2 主要功能特性 標準MCS-51內核和指令系統 32個雙向I/O口 3個16位可編程定時/計數器 向上或向下定時計數器 6個中斷源 全雙工串行通信口 空閑和掉電節省模式 片內8kROM(可擴充64kB外部存儲器) 256x8bit內部RAM(可擴充64kB外部存儲器) 時鐘頻率3.5-12/24/33MHz 改進

4、型快速編程脈沖算法 5.0V工作電壓 布爾處理器 4層優先級中斷結構 兼容TTL和CMOS邏輯電平 PDIP(40)和PLCC(44)封裝形式幀錯誤偵測自動地址識別 1.3 管腳說明 VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8個TTL門電流。當P0口的管腳第一次寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4個

5、TTL門電流。P1口管腳寫入“1”后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功

6、能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口作為AT89C51的一些特殊功能口,管腳 備選功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(計時器0外部輸入) P3.5 T1(計時器1外部輸入) P3.6 /WR(外部數據存儲器寫選通

7、) P3.7 /RD(外部數據存儲器讀選通) RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。 在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起用。另外,該引腳被略微拉高。如果微處理器在外部執行狀

8、態ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。/EA / VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。1.4振蕩器特性 外接石英晶體或者陶瓷諧振器

9、以及電容C1、C2接在放大器的反饋回路(AT89C52內部有一個用于構成內部振蕩器的高增益反相放大電路,XTAL1、XTAL2分別是該放大器的輸入和輸出端)中構成并聯振蕩電路。 為了使裝置能夠被外部時鐘信號激活,XATL1應該有效,而XTAL2應該被懸空。由于輸入到內部的時鐘信號電路通過了一個二分頻的信號,外部信號的工作周期比沒有別的要求,但是最大值和最小值的大小可以在數據表上觀察出來。 當正常工作時,外部振蕩器可以計算出XTAL1上的電容,最大可達到100pF。這是由于振蕩器電容和反饋電容之間的相互作用。當外部信號是標準高電平或者低電平時,電容不會超過20pF.1.5結構特點 n 互補高性能

10、金屬氧化物半導體結構可擦可 編程只讀存儲器/只讀存儲器/中央處理器 n 12/24/33MHz操作 n 三個16位的定時器/計數器 n 可編程的時鐘輸出 n Up/Down定時器/計數器 n 三級程序鎖定系統 n 8K/16K/32K片內程序存儲器 n 256字節片內RAM n 改進的快速脈沖編程算法 n 布爾處理器 n 32根可編程的輸入/輸出線 n 六個中斷源 n 可編程的串行通道帶有:幀錯誤檢測 自動地址識別 n TTL和CMOS兼容邏輯電平 n 64K片外程序存儲空間 n 64K片外數據存儲空間 n MCS51單片機可兼容指令集 n 閑置節能和掉電模式 n ONCE(On-Circui

11、t仿真)模式 n 四級中斷優先級 n 擴展溫度范圍(40到85)2、 數碼管2.1數碼管分類 數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極管單元(多一個小數點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數碼管; 按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數

12、碼管,共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。2.2數碼管結構 led數碼管(LED Segment Displays)是由多個發光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加一個小數點,還有一種是類似于3位“+1”型。位數有半位,1,2,3,4,5,6,8,10位等等.,led數碼管根據LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬件

13、電路有差異外,編程方法也是不同的。圖2是共陰和共陽極數碼管的內部電路,它們的發光原理是一樣的,只是它們的電源極性不同而已。顏色有紅,綠,藍,黃等幾種。led數碼管廣泛用于儀表,時鐘,車站,家電等場合。選用時要注意產品尺寸顏色,功耗,亮度,波長等。2.3驅動方式 靜態顯示驅動 靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數碼管靜態顯示則需要58=40根I/O端口來驅動,要知道一個89S51單片機可用的I/O端口才32個呢:),實際

14、應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。 動態顯示驅動數碼管動態顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃a,b,c,d,e,f,g,dp的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是哪個數碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。

15、在輪流顯示過程中,每位數碼管的點亮時間為12ms,由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低。3、 排阻3.1排阻的作用 內存芯片下方均勻分布的“芝麻粒”,實際上是位于內存顆粒和金手指之間的“排阻”。排阻,是一排電阻的簡稱。我們知道,內存在處理、傳輸數據時會產生大小不一的工作電流。而在內存顆粒走線的必經之處安裝一排電阻,則能夠幫助內存起到穩壓作用,讓內存工作更穩定。從而提升內存的穩定性,增強內存使用壽命。內存右邊角上

16、的“小綠豆”,我們一般稱之為SPD。SPD是一存儲體,它存儲了廠商對內存的詳細配置信息:如內存的工作電壓,位寬,操作時序等。每次開機后自檢時,系統都會首先讀取內存SPD中的相關信息,來自動配置硬件資源,以避免出錯。上拉、限流。和普通電阻一樣,相比而言簡化了PCB的設計、安裝,減小空間,保證焊接質量。3.2排阻引腳說明 1與a 2與b 3與c 4 與d之間的電阻都是10歐,與其它的管腳沒有任何關系就是一排電阻,做在了一個原件上 有的還有一個公腳,就是為了方便使用,拿萬用表量一下就會發現所有腳對公共腳的阻值均是標稱值,除公共腳外其它任意兩腳阻值是標稱值的兩倍,很明顯任意兩腳通過公共腳腳串聯的嘛!用

17、在有很多上下拉電阻的場合應用特方便,比如并行通訊線上,還節省空間。4、 晶振 4.1晶振構成 石英晶體振蕩器是利用石英晶體(二氧化硅的結晶體)的壓電效應制成的一種諧振器件,它的基本構成大致是:從一塊石英晶體上按一定方位角切下薄片(簡稱為晶片,它可以是正方形、矩形或圓形等),在它的兩個對應面上涂敷銀層作為電極,在每個電極上各焊一根引線接到管腳 上,再加上封裝外殼就構成了石英晶體諧振器,簡稱為石英晶體或晶體、晶振;而在封裝內部添加IC組成振蕩電路的晶體元件稱為晶體振蕩器。其產品一般用金屬外殼封裝,也有用玻璃殼、陶瓷或塑料封裝的。 4.2工作原理 計算機都有個計時電路,盡管一般使用“時鐘”這個詞來表

18、示這些設備,但它們實際上并不是通常意義的時鐘,把它們稱為計時器(timer)可能更恰當一點。計算機的計時器通常是一個精密加工過的石英晶體,石英晶體在其張力限度內以一定的頻率振蕩,這種頻率取決于晶體本身如何切割及其受到張力的大小。有兩個寄存器與每個石英晶體相關聯,一個計數器(counter)和一個保持寄存器(holdingregister)。石英晶體的每次振蕩使計數器減1。當計數器減為0時,產生一個中斷,計數器從保持計數器中重新裝入初始值。這種方法使得對一個計時器進行編程,令其每秒產生60次中斷(或者以任何其它希望的頻率產生中斷)成為可能。每次中斷稱為一個時鐘嘀嗒(clocktick)。 晶振在

19、電氣上可以等效成一個電容和一個電阻并聯再串聯一個電容的二端網絡,電工學上這個網絡有兩個諧振點,以頻率的高低分其中較低的頻率為串聯諧振,較高的頻率為并聯諧振。由于晶體自身的特性致使這兩個頻率的距離相當的接近,在這個極窄的頻率范圍內,晶振等效為一個電感,所以只要晶振的兩端并聯上合適的電容它就會組成并聯諧振電路。這個并聯諧振電路加到一個負反饋電路中就可以構成正弦波振蕩電路,由于晶振等效為電感的頻率范圍很窄,所以即使其他元件的參數變化很大,這個振蕩器的頻率也不會有很大的變化。晶振有一個重要的參數,那就是負載電容值,選擇與負載電容值相等的并聯電容,就可以得到晶振標稱的諧振頻率。一般的晶振振蕩電路都是在一

20、個反相放大器(注意是放大器不是反相器)的兩端接入晶振,再有兩個電容分別接到晶振的兩端,每個電容的另一端再接到地,這兩個電容串聯的容量值就應該等于負載電容,請注意一般IC的引腳都有等效輸入電容,這個不能忽略。一般的晶振的負載電容為15p或12.5p,如果再考慮元件引腳的等效輸入電容,則兩個22p的電容構成晶振的振蕩電路就是比較好的選擇。4.3功能作用 晶振在應用具體起到的作用,微控制器的時鐘源可以分為兩類:基于機械諧振器件的時鐘源,如晶振、陶瓷諧振槽路;RC(電阻、電容)振蕩器。一種是皮爾斯振蕩器配置,適用于晶振和陶瓷諧振槽路。另一種為簡單的分立RC振蕩器。基于晶振與陶瓷諧振槽路的振蕩器通常能提

21、供非常高的初始精度和較低的溫度系數。RC振蕩器能夠快速啟動,成本也比較低,但通常在整個溫度和工作電源電壓范圍內精度較差,會在標稱輸出頻率的5%至50%范圍內變化。但其性能受環境條件和電路元件選擇的影響。需認真對待振蕩器電路的元件選擇和線路板布局。在使用時,陶瓷諧振槽路和相應的負載電容必須根據特定的邏輯系列進行優化。具有高Q值的晶振對放大器的選擇并不敏感,但在過驅動時很容易產生頻率漂移(甚至可能損壞)。影響振蕩器工作的環境因素有:電磁干擾(EMI)、機械震動與沖擊、濕度和溫度。這些因素會增大輸出頻率的變化,增加不穩定性,并且在有些情況下,還會造成振蕩器停振。上述大部分問題都可以通過使用振蕩器模塊

22、避免。這些模塊自帶振蕩器、提供低阻方波輸出,并且能夠在一定條件下保證運行。最常用的兩種類型是晶振模塊和集成RC振蕩器(硅振蕩器)。晶振模塊提供與分立晶振相同的精度。硅振蕩器的精度要比分立RC振蕩器高,多數情況下能夠提供與陶瓷諧振槽路相當的精度。 選擇振蕩器時還需要考慮功耗。分立振蕩器的功耗主要由反饋放大器的電源電流以及電路內部的電容值所決定。CMOS放大器功耗與工作頻率成正比,可以表示為功率耗散電容值。比如,HC04反相器門電路的功率耗散電容值是90pF。在4MHz、5V電源下工作時,相當于1.8mA的電源電流。再加上20pF的晶振負載電容,整個電源電流為2.2mA。陶瓷諧振槽路一般具有較大的

23、負載電容,相應地也需要更多的電流。相比之下,晶振模塊一般需要電源電流為10mA 60mA。硅振蕩器的電源電流取決于其類型與功能,范圍可以從低頻(固定)器件的幾個微安到可編程器件的幾個毫安。一種低功率的硅振蕩器,如MAX7375,工作在4MHz時只需不到2mA的電流。在特定的應用場合優化時鐘源需要綜合考慮以下一些因素:精度、成本、功耗以及環境需求。二、 軟件結構概述1顯示子程序 1.1顯示函數 display() void display()uchar i;for(i=0;i=1)while(!k2);k2_flag+;if(k2_flag=2)k2_flag=0;TR1=k2_flag;if(

24、k2=0&set_flag=1)while(!k2);switch (k1_flag)case 1:hour+;if(hour=24)hour=0;break;case 2:minute+;if(minute=60)minute=0;break;case 3:second+;if(second=60)second=0;break;K2鍵在秒表時為計數的開始與停止,在時鐘里作為加一功能鍵,在區分是秒表還是時鐘方面,選擇了一個標志位choose_flag來區分當其大于1時就表示為秒表模式,當其為0時表示為時鐘模式,choose_flag的值是根據切換鍵來決定的。當進入秒表時,K2每按一下都會改變k

25、2_flag的狀態,k2_flag也決定著時鐘是停是走,當進入時鐘時由k1_flag的狀態決定哪一環節被加,而實現加的就是K2影響k2_flag的結果。 2.3 K3鍵的掃描 if(k3=0)delay_ms(10);if(k3=0&choose_flag=1)while(!k3);H=0;L=0;M=0;TR1=0;if(k3=0&set_flag=1)while(!k3);switch (k1_flag)case 1:if(hour=0)hour=24;hour-;break;case 2:if(minute=0)minute=60;minute-;break;case 3:if(seco

26、nd=0)second=60;second-;break; K3鍵的作用于K2鍵是相對應的。K3鍵在秒表時為計數的清零,在時鐘里作為減一功能鍵,在區分是秒表還是時鐘方面,選擇了一個標志位choose_flag來區分當其大于1時就表示為秒表模式,當其為0時表示為時鐘模式,choose_flag的值是根據切換鍵來決定的。當進入秒表時,K3按一下會使得秒表的計數值被清零,當進入時鐘時由k1_flag的狀態決定哪一環節被加,而實現加的就是K2影響k2_flag的結果。 2.4 K4鍵的掃描 if(k4=0)delay_ms(10);if(set_flag=0&k4=0) while(!k4);star

27、t_flag+;if(start_flag=2) TR1=1; start_flag=0; choose_flag+;if(choose_flag=3)TR0=1;choose_flag=0;if(k4=0&set_flag=1)while(!k4);set_flag=0;k1_flag=0;TR0=1; K4鍵的作用時時鐘、秒表間的切換,當K4被按一下則進入到秒表,進入秒表模式是數碼管的全部內容被清空,等待著啟動,K4再被按一下則啟動秒表,k4被按第三下時秒表又回到時鐘,如上是在沒有處在調節時間的條件下,當時鐘正處在時間調節下時那K4的作用就是將其退到時鐘狀態3、中斷程序 3.1 時鐘中斷程

28、序 void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;t+;if(t=20)t=0;second+;if(second=60)minute+;second=0;if(minute=60)hour+;minute=0;if(hour=24)hour=0;該中斷用的是定時器T0,沒50ms中斷一次,沒中斷20次秒加一,秒加到60后向分進位,即秒清零,分加一,當分加到60后向小時進位,即秒分都清零小時加一。 3.2 秒表中斷程序 void timer1() interrupt 3TH1=(65536-10000)

29、/256;TL1=(65536-10000)%256;n+;if(n=1)n=0;C+;if(C=100)C=0;B+;if(B=100)B=0;A+;if(A=100)A=0;該中斷用到定時器T1,T1每計數10ms則產生一次中斷,秒表里是逢百進位,進位方式與前面相似。開始初始化( 定時器、顯示區、中斷系統、計數單元等)開中斷調用顯示子程序調用鍵盤掃描子程序N有鍵按下?Y關中斷Y秒加1處理秒鍵?NY分加1處理NY小時加1處理分鍵?小時鍵?N圖1 主程序流程圖定時器中斷處理重送初值保護現場計數單元加1N到1秒?秒加1N秒清0、分加1秒到60?N分清0、小時加1分到60?N小時到24?小時清0恢

30、復現場中斷返回圖2 定時器中斷程序流程圖三、 調試過程 3.1 時鐘 3.2 時鐘調時 3.3 秒表3.4 秒表計時四、心得體會 經過一周的課程設計,我收獲頗多,有深刻的心得體會。 實踐讓我們受益匪淺。首先是關于單片機方面的,為了順利完成程序的構成,我們學了一些關于單片機系統開發的C語言知識,最開始從已學過的C語言知識到最后的老師在課堂上補充的關于匯編的C語言,使我們得到了充分的鍛煉。其次,它讓我體會到了什么才是teamwork spirit。一如:兩個人的分工、合作的經驗、團隊意識的提升和協調能力等等,這些都會讓我們終身受益。 通過此次課程設計,使我更加扎實的掌握了有關電子線路單片機方面的知

31、識,因為這次我們不僅寫出了程序,而且還為寫出的程序作出了實物,在設計過程中雖然遇到了一些問題,但經過一次又一次的思考,一遍又一遍的檢查我終于找出了問題所在,也暴露出了前期我在這方面的知識欠缺和經驗不足。實踐才能出真知,實踐才是檢驗真理的唯一標準,唯有通過親自動手制作,才能令我們掌握的知識不再是一些紙上談兵的東西。 在這次的課程設計中,我們遇到了很多困難,過程很艱難,但是我們都克服了,這是對我們自己的肯定。我們不斷發現錯誤,不斷改正,不斷領悟,不斷獲取。我們也曾灰心,也曾茫然,也曾不知所措,從一開始的自信滿滿,到最后的緊張繁雜,所有的這些都令我們回味無窮,這已經成為了我們人生的一個寶藏。我想今后

32、的學習和工作也是這樣的,汗水見證著成功,我想十年過后,但我們都已經走入了社會,在某個陽光明媚的夏日,午后醒來,突然想起大學經歷的時候,最先映入腦海里的就是這門課程吧,就是這些為了一個共同的目標,相互合作,共同奮斗的日子吧。在這次程序設計中我們有許多值得思考的問題,首先、當老師建議作出實物時我和另一個組員猶豫是否作出這個東西,因為想著仿真多簡單啊,但是看到身邊同學毫不猶豫的選擇作出實物來時,我們為我們退而求其次的想法慚愧;其次、在畫板子時我們明顯的發現自己不知從何處下手,在實驗室里呆了一天并且包了夜才漸漸的摸到門路,這時我們才發現這些看似很簡單的東西都是需要許多功夫和辛勞的;最后、在程序方面雖然

33、我們這學期學習的是匯編語言,但是發現自己用匯編實現老師要求的能力遠遠不過,于是轉向用C語言來解決,但是從這個方面來做我們組還是依賴了實驗室的同學很多,我們先是學習他們的程序,消化吸收才有了我們的程序,在這里覺得我們的水平還是太差,也非常感謝那些幫助過我們的同學。五、參考文獻(1)胡漢才 單片機原理及其接口技術(第二版). 北京:清華大學出版社,2004.2(2)徐安等 單片機原理及應用. 北京:北京希望電子出版社,2003.2(3)丁元杰 單片微機原理及應用(第二版). 北京:機械工業出版社,1999.10(4)李建忠 單片機原理及應用. 西安:西安電子科技大學出版社,2002.2(5)徐惠民

34、 單片微型計算機原理、接口及應用(第二版). 北京:北京郵電大學出版社,2000.10(6)閆玉德 MCS-51單片機原理及應用(C語言版). 北京:機械工業出版社(7)何橋等 單片機原理及應用. 北京:中國鐵道出版社,2004.3(8)李群芳 單片機原理、接口及應用嵌入式系統技術基礎. 北京:清華大學出版社,2005.3六、硬件電路圖 七、程序清單#include #include #define uint unsigned int #define uchar unsigned char sbit k1 = P10; /定義按鍵Ksbit k2 = P11;sbit k3 = P12;sbi

35、t k4 = P13;unsigned char LED8=0x00;/數碼管顯示緩沖區unsigned int t; /定時器0單位時間標識值int n; /計數器1單位時間標志值unsigned char a=0,b=0,c=0,d=0,e=0,f=0;/待顯示位置的形參unsigned char hour=23; /定義小時變量并賦初值unsigned char minute=54;/定義分鐘變量并賦初值unsigned char second=50;/定義秒變量并賦初值unsigned char A=0; /百秒、千秒形參unsigned char B=0; /十秒、秒形參unsign

36、ed char C=0; /1/10秒、1/100秒形參unsigned char start_flag=0;/秒表開始計時標志位,為2開始unsigned char k1_flag=0; /調時對象選擇標識:hour,minute,second,循環調節unsigned char k2_flag=1; /秒表暫停標識,為0:暫停,為1:繼續unsigned char set_flag=0; /時間設置標志位,為0:正常走時,為1:停止走時并進入調時狀態unsigned char choose_flag=0; /顯示模式選擇標識。為0:時鐘模式,為1:秒表模式unsigned char wei

37、8=0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef;unsigned char code duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/void delay_ms(uint z); /ms延時函數申明void display(); /緩沖區數值顯示函數申明void disp_time(); /時鐘模式下顯示處理函數申明void system_init(); /初始化TMOD申明void disp_miao(); /秒表模式下顯示處理函數申明void key_scan(); /按鍵檢測、鍵

38、值處理函數申明void key_scan()if(k1=0)delay_ms(10); /去抖if(k1=0)while(!k1); /等待按鍵釋放TR0=0; /調時模式下停止走時set_flag=1; /設置相應標志位k1_flag+;if(k1_flag=4)k1_flag=1;if(k4=0)delay_ms(10);if(set_flag=0&k4=0) /進入秒表模式while(!k4);start_flag+;if(start_flag=2) /進入秒表模式下,全部清空,等待啟動TR1=1; /啟動秒表start_flag=0; choose_flag+;if(choose_flag=3)TR0=1;choose_flag=0;if(k

溫馨提示

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

評論

0/150

提交評論