久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7609|回復: 1
打印 上一主題 下一主題
收起左側

單片機電子時鐘-測控技術與儀器專業綜合課程設計報告

[復制鏈接]
跳轉到指定樓層
樓主
ID:314609 發表于 2018-4-23 17:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


            

測控技術與儀器專業

綜合課程設計

電子時鐘的設計

學生姓名
鄒*
學號
311404002029
班級
:測控14-03
指導老師
闞*
完成日期
: 2018.4.23


河南理工大學機械與動力工程學院

0年四月



2014級測控技術與儀器專業綜合課程設計

摘   要

20世紀末,電子技術飛速發展,現代電子產品幾乎滲透到社會各個領域,從而有力地推動了社會生產力的發展和社會信息化程度的提高,同時也進一步提高了現代電子產品性能,加快了電子產品的更新換代節奏。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人們忘記當時時間。

本系統是基于AT89C51單片機的具有準點報時、調時、以及可設鬧鐘功能的簡單數字時鐘系統的設計。以AT89C51為核心控制器,系統分為時鐘模塊、顯示模塊、按鍵模塊及鬧鐘模塊。系統以單片機內部定時器作為時鐘模塊的主要控制模塊,通過頻率計數實現計時功能,采用了8位數碼管來顯示時間,獨立按鍵做為時間調時以及鬧鐘設置按鍵,蜂鳴器作為報時鬧鐘系統。通過Keil軟件C語言程序的編寫、編譯、調試以及硬件單片機的連接,實現了時間顯示(24小時制)、鬧鐘設置、時間調試以及準點報時,可復位的功能。通過運行該電路程序,得出該系統符合實驗設計要求。


ABSTRACT

The end of the 20th century, obtained the rapid development of electronic technology, under the push, the modern electronic products almost permeated all fields of society, vigorously promoted the development of social productivity and the enhancement of social information degree, but also makes the modern electronic products performance further improve, product update rhythm also more faster. Time is always precious to people, and the busyness and complexity of the work make people forget the time.

The system is based on the design of a simple digital clock system with the time, timing and alarm function of the AT89C51 single chip microcomputer. With AT89C51 as the core controller, the system is divided into clock module, display module, key module and alarm module. System with the single chip processor as the main control module of the clock module, internal timer timing functions are implemented by frequency count, used the eight digital tube to display the time, separate button as time and alarm when the regulation of key, buzzer as the time clock system. C language program written by Keil software, compilation, debugging and single chip microcomputer hardware connection, realize the time display (24-hour), setting the alarm clock, time debugging and tell the time on time, can be reset function. By running the circuit program, the system complies with the experimental design requirements.


目  錄

摘  要              I

Abstract              II

1  設計任務書

1.1              涉及專業課程              (1)

1.2              設計任務              (1)

1.3              設計目標              (1)

1.4              本設計的主要功能              (2)

1.5              設計意義              (2)

1.6              本章小結              (2)

2  設計論證及計劃

2.1              方案論證              (3)

2.2              設計原理              (3)

2.3              設計規劃              (8)

2.4              本章小結              (9)

3  硬件設計

3.1              顯示模塊              (10)

3.2              按鍵模塊              (10)

3.3              蜂鳴器模塊              (11)

3.4              核心控制及時間控制模塊              (12)

3.5              本章小結              (13)

4  軟件及編程分析

4.1              主程序流程圖              (14)

4.2              軟件編程及分析              (14)

4.3              實驗結果圖              (16)

4.4              本章小結              (17)

5 總結與展望

5.1              課程設計總結              (18)

5.2              工作展望              (18)

附  錄A 設計程序              (18)

附  錄 B 設計參考資料              (29)


2014級測控技術與儀器專業綜合課程設計1     設計任務書





    •   設計專業課程

本設計主要設計的專業課程有:

1、單片機原理及應用






    •   設計任務

通過軟件程序的編程,硬件電路的調試,實現簡單時鐘系統的設定,使得該系統具有正常走時,能夠正確的顯示時、分、秒;能夠進行調時,修改當前的時間,并且能夠設定鬧鐘,使鬧鐘能夠定時響。首先是時間的調試:若要進行正常的時間調試需要有進入時間的調時試狀態按鍵以及調試是加或者是減的按鍵,即每個狀態需要3個按鍵,共有時、分、秒三個狀態,這樣就一共需要9個按鍵,硬件設計需要的按鍵增多,且加大了軟件編程復雜度。為解決以上問題,可通過同一個按鍵來控制定時器的走與停,以及通過按鍵次數來控制所進入的調試狀態是時、分還是秒。當調試進入某一狀態時,需要分別通過兩個按鍵來控制時間的加與減,而此時的加與減的按鍵相當于是局部變量,可以在三個狀態中分別使用,這樣一共就只需要3個按鍵,大大節省了硬件用量并且簡化了軟件編程。針對此解決方案,設3個按鍵分別為key1、key2和key3,設計為當按鍵key1被按下時,停止走時,進入調時狀態:當key1被按下1次,進行秒的調整;當key1被按下2次,進行分的調整;當key1被按下3次,進行時的調整;當key1被按下4次,停止調時,繼續進行走時。在key1被按下4次以下的情況下,若按下key2鍵,則進行時間加,若按下key3,則進行時間減。其次是鬧鐘設定:基于時間調試的設置思路,同樣將進入鬧鐘狀態以及鬧鐘設定的按鍵分開,考慮到此時鬧鐘設置時,數碼管顯示問題以及定時器走時問題,故將進入鬧鐘的設定狀態和時設定、分設定的按鍵分開,而分和時的設定又都需要時間的加和減,即各需要兩個按鍵,再加上進入鬧鐘設定狀態的一個按鍵,共需要5個按鍵來實現鬧鐘設定。針對此方案,設5個按鍵分別為key0、key4、key5、key6和key7,其中key0為進入鬧鐘狀態按鍵,key4和key6分別為分鐘設定的加和減的按鍵,key5和key7分別為時設定的加和減的按鍵。依照思路可設定為當 key0一直被按住的情況下,此時進入鬧鐘設定狀態,但是定時器仍然在工作。在key0一直被按住的情況下,若key4或key5被按下,則分別進行分和時的累加狀態;若key6和key7被按下,則分別進行分和時的減狀態,當放開key0時,繼續進行走時。若想再次進行鬧鐘的設定,重復上述的步驟,不過當再次按下按鍵 key0時,則顯示上次設置的鬧鐘時間。






    •   設計目標

結合設計任務,本課程設計要求的設計目標如下:

一、完成目標

通過Keil軟件C語言程序的編寫、編譯、調試以及硬件單片機的連接,實現時間顯示(24小時制)、鬧鐘設置、時間調試以及準點報時,可復位的功能,并運行該電路程序,驗證設計的系統是否符合實驗設計要求。

  • 設計技術指標
應用知識: I/O 口應用、數碼顯示、定時 /計數器。





    •   本設計的主要功能

基本要求:設計一時鐘系統,系統具有時鐘功能,能準確顯示時、分、秒。系統還應具有以下功能:

校正功能:能夠修改當前的時間。

擴展部分:具備設定鬧鐘和定時鬧鐘響功能。






    •   設計意義

單片機模塊最常見的是數字鐘,數字鐘是一種用數字電路技術實現時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,所以得到了廣泛的使用。

數字鐘是采用數字電路實現對時、分、秒數字顯示的計時裝置,廣泛用于個人家庭,車站,碼頭,辦公室等公共場所,成為人們日常生活中不可少的必須品。基于51單片的電子時鐘,外圍電路簡單易于實現,性價比高,是實現電子時鐘的不錯選擇。研究電子鐘及擴大其應用,有著非常現實的意義。






    •   本章小結

給出設計電子時鐘的功能需求以及所需的技術指標,通過Keil軟件C語言程序的編寫、編譯、調試以及硬件單片機的連接來實現任務。

2     設計論證及計劃
本章將會結合單片機對核心控制模塊、顯示模塊、按鍵模塊進行方案的選擇。
2.1方案論證
(1)核心控制模塊

方案一:采用FPGA作為核心控制模塊。FPGA具有強大的資源,使用方便靈活,易于進行功能擴展,特別是結合了EDA,可以達到很高的效率。此方案雖然邏輯相對較為簡單,但由于FPGA的價格過高且比較難掌握,對于設計數字時鐘考慮成本和算法問題,本設計將不采用此方案。

方案二:采用AT89C51作為核心控制模塊。此方案中AT89C51單片機的入門學習相對交容易,易于理解,外圍電路比較簡單,成本比較低。基于AT89C51單片機的系統控制靈活,能很好地滿足本課題的基本要求和擴展要求,因此選用該方案。

  • 顯示模塊

方案一:采用LCD1602液晶顯示屏。液晶顯示屏耗電量低、體積小、輻射低。但其使用時受溫度范圍限制,且因是反光式的,在外界光線很明亮的情況下很容易看不清楚。數碼管是 LED發光效果, 液晶是分子偏轉引起的暗影效果,顯示不是很清晰。

方案二:采用LED數碼管顯示。數碼管在低電壓小電流的驅動下就能夠發光,發光響應時間短,高頻性好,單色性好,亮度高,顯示相對而言比較清晰。而且體積小,重量輕,抗沖擊性能好,壽命長,成本低。

  • 按鍵模塊

方案一:采用矩陣按鍵。矩陣按鍵需要通過掃描控制和譯碼,設計時需要有數值移位寄存器。

方案二:采用獨立按鍵。單片機仿真板上有專用獨立按鍵,連接方便,使用簡單。且易于軟件編程,適合本系統的設計。

2.2設計原理

本系統數字時鐘設計原理主要利用AT89C51單片機 ,由單片機的P0口控制數碼管的位顯示,P2口控制數碼管的段顯示,P3口與按鍵相接用于時間校正以及鬧鐘設定。設計的主要方面有計時原理,中斷及定時器原理以及調時方式,按鍵的消抖。

整個系統工作時,秒信號產生器是整個系統的時基信號,它直接決定計時系統的精度, 將標準秒信號送入“秒計數器”,“秒計數器”采用60進制計數器,每累計60秒發出一個“分脈沖”信號,該信號將作為“分計數器”的時鐘脈沖。“分計數器”也采用60進制計數器,每累計60分鐘,發出一個“時脈沖”信號,該信號將被送到“時計數器”。“時計數器”采用 24進制計時器,可實現對一天24小時的累計。顯示電路將“時”、“分”、“秒”計數器的輸出,通過六個七段LED顯示器顯示出來。校時電路是直接加一個脈沖信號到時計數器或者分計數器或者秒計數器來對“時”、“分”、“秒”顯示數字進行校對調整。在本設計中,24小時時鐘顯示、秒表的設計和顯示都是依靠單片機中的定時器完成。定時器T0產生1s的中斷,在中斷程序中完成每一秒數字的變化,并在主程序中動態顯示數字。

典型的8051單片機有5個中斷源(外部中斷0、1,內部定時器中斷0、1,串口中斷),具有兩個中斷優先級。與中斷系統有關的特殊功能寄存器有中斷允許寄存器IE、中斷優先級控制寄存器IP、中斷控制寄存器TCON和SCON中有關位。MCS-51單片機基本的中斷系統結構如下圖所示:

圖2-1 MCS-51的中斷系統

MCS-51的CPU對中斷源的開放或屏蔽,即每一個中斷源是否被允許中斷,是由內部的中斷允許寄存器IE(地址A8H)控制的。IE中具體各位的意義如下,EA:CPU的中斷開放標志。EA=1,CPU開放中斷;EA=0,CPU屏蔽所有的中斷申請。EX0:外部中斷0中斷允許位。 EX0=1,允許中斷:EX0=0,禁止中斷。ET0:T0的溢出中斷允許位。ET0=1,允許T0中斷;ET0=0,禁止T0中斷。EX1:外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。ET1:定時器/計數器T1的溢出中斷允許位。ET1=1,允許 T1中斷;ET1=0禁止T1中斷。ES:串行口中斷允許位。ES=1,允許串行口中斷;ES=0禁止串行口中。

中斷優先級管理寄存器IP(地址8BH):MCS-51有兩個中斷優先級,一個正在被執行的低優先級中斷服務能被高優先級中斷所中斷,但不能被另一個同級的或低優先級中斷源所中斷。CPU的查詢順序是:外部中斷0;定時器T0中斷;外部中斷1;定時器T1中斷;串行口中斷(先外部后內部,先0后1)

中斷服務函數的格式如下所示:

void 函數名 (void) interrupt n using m

{ 函數體語句 }

其中,interrupt和using是為編寫C51中斷服務程序而引入的關鍵字,interrupt表示該函數是一個中斷服務函數,interrupt后的整數n表示該中斷服務函數是對應哪一個中斷源。每個中斷源都有系統指定的中斷編號:

表2-1 中斷編號表

中斷源

外部中斷0

定時器中斷T0

外部中斷1

定時器中斷T1

串行口中斷

中斷編號

0

1

2

3

4

51單片機有三個內部中斷,16位定時器/計數器T0、T1的溢出中斷源和串行口的發送 /接收中斷。對T0和T1中斷,當定時計數回 ,0?溢出時,由硬件自動置位TCON中的TF0或 TF1中斷請求標志位。定時/計數器實際上是一個加1計數器,它可以工作于定時方式,也可以工作于計數方式。兩種工作方式實際上都是對脈沖計數,只不過所計脈沖來源不同。定時器的脈沖是由51單片機的內振蕩器經過12分頻后產生的,故當單片工作于定時狀態時,計數脈沖的最高頻率為f=fosc/12.

51單片機的寄存器有方式控制寄存器TMOD;加法計數寄存器TH0、TH1(高八位),TL0 、TL1(低八位);定時/計數到標志TF0、TF1(中斷控制寄存器TCON);定時/計數器啟停控位TR0、TR1(TCON);定時/計數器中斷允許位ET0、ET1(中斷允許寄存IE);定時/計數器中斷優先級控制位PT0、PT1(中斷優IP)。在定時器工作前,必須將控制命令寫入定時器的控制寄存器,即進行初始化。TMOD的低四位為T0的方式字,高四位為T1的方式字。TMOD不能位尋址,必須整體賦值。TMOD各位的含義如下:

  • 工作方式選擇位M1,M0 :M1,M0 的狀態決定定時器的工作方式:

表2-2 工作方式選擇表

M1

M0

功能說明

0

0

工作方式0(13位方式)

0

1

工作方式1(16位方式)

1

0

工作方式2(8位自動裝入計數初值方式)

1

1

工作方式3(T0為兩個8位方式)

  • 定時和計數方式選擇位C/T。當C/T=1時為計數方式;C/T=0時為定時方式。
  • 門控位GATE。GATE與TR0TR1配合決定定時/計數器的啟停。當GATE=0 時,軟啟動。定時器/計數器的啟停只受定時器運行控制位(TR0、TR1)的控制。當GATE=1 時,軟硬啟動。定時器/計數器的啟停除受TR0、TR1控制外,還受外部引腳(INT0、INT1)輸入電平的控制(為高)。即TR0和INT0控制T0的運行,TR1和INT1控制T1的運行。

MCS-51的定時器有方式0、方式1、方式2 和方式3,這4種工作方式。以方式1為例,當M1M0=01時,定時/計數器工作在方式1。MCS-51單片機定時計數器在方式1時的工作原理如圖所示:

圖2-2 計數/定時器

當C/T=0時,工作在定時器狀態,由振蕩器經12分頻后輸入,否則由T1端輸入。在定時時,對工作頻率的12分頻進行計數,先記入TL后記入TH,直到溢出為止,根據TL、TH內的初值不同可以定出不同的時間;在計數工作方式時,對T0(T1)引腳的輸入脈沖進行計數,將計數值記入TL、TH。當定時/計數溢出時,會引起中斷。計數初值與定時時間的關系為:T=12×(T_all–a)/fosc定時間隔為T,計數初值為a。所以有計數初值a=–T×fosc/12,THx=a/256,TLx=a%256。定時器均有一個最大定時時間,對于長時間的定時需要,可以將定時間隔為固定的較小時間,通過另設一全局變量ah1用于計數,累加固定的較小定時時間來進行。

使用MCS-51單片機的定時/計數器的步驟:
  • 設定TMOD,確定工作狀態(用作定時器/計數器)、工作方式、控制方式。
  • 設置合適的計數初值,以產生期望的定時間隔由于定時/計數器在方式0、方式1和方式2時的最大計數間隔取決于使用的晶振頻率fosc,如下表所示,當需要的定時間隔較大時,要采用適當的方法,即將定時間隔分段處理。
  • 確定定時/計數器工作于查詢方式還是中斷方式,若工作于中斷方式,則在初始化時開放定時/計數器的中斷及總中斷:ET0=1,EA=1。
中斷服務函數:

void T0_srv (void) interrupt 1 using 1

{                             TL0 = a % 256 ;

TH0 = a / 256 ;

中斷服務程序段 }

  • 啟動定時器: TR0(TR1)= 1。

時間調整有多種方式:一、可以直接進入相關狀態進行有關操作,二、將調整分兩步,先進入狀態,然后執行操作,這兩步分別由兩個鍵控制。 方式一比較直接,設計思想也比較簡單。但是,這種方式存在操作時間和控制鍵數目的矛盾。如果用比較少的鍵,那么可能會在進入狀態后處于數據調整等待狀態,這樣會影響到顯示的掃描速度。當然在這種方式下,還可以使用多個狀態鍵,每個狀態鍵,完成一個對應數據的調整。如果采用二的方式,就不會出現這種情況。因為狀態的調整,與狀態的操作可以分別由兩個鍵控制,其狀態的調整數可以多達 256個(理論上),操作的完成是這樣的,一鍵控制狀態的調整,一鍵控制數據的調整。以上兩種方式的實現都可以采用查詢和中斷的方式。兩種方式必須注意的問題是兩者進行相關操作的過程不能太長否則會影響顯示的掃描。基于本系統的設置,將時間調整分為狀態調整和數據調整兩部分,每次進入中斷只執行一次操作,然后返回,這樣,就不必讓中斷處于調整等待狀態,可以使中斷的耗時很小。將定時器中斷的優先級設置為最高級,那么中斷的方式和查詢的方式一樣不會影響到時鐘的記數。

通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產生這種現象而作的措施就是按鍵消抖。按鍵消抖的方式有硬件和軟件消抖,本系統采用軟件消抖。軟件消抖有定時器定時,和利用延時子程序的方式。一,定時器定時消抖可以不影響顯示模塊掃描速度,其實現方法是:設置標志位,在定時器中斷中將其置位,然后在程序中查詢。將其中斷優先級設置為低于時鐘定時中斷,那么它就可以完全不影響時鐘定時。二,在采用延時子程序時,如果顯示模塊的掃描速度本來就不是很快,此時可能會影響到顯示的效果,一般情況下,每秒的掃描次數不應小于50次,否則,數碼的顯示會出現閃爍的情況。因此,延時子程序的延時時間應該小于20毫秒,如果采用定時器定時的方式,延時時間不影響時鐘。如果,設計時采用的是中斷的方式來完成有關操作,同樣可以采用軟件的方式來消抖,其處理思想是:中斷不能連續執行,兩次之間有一定的時間間隔。

2.3設計規劃
課程設計總圖規劃如圖2-3所示:






圖2-3 課程設計規劃

  • 對電子時鐘設計的總體進行分析和規劃。
  • 根據流程圖設計硬件原理圖,然后焊接電路板。
  • 根據原理圖各個端口的設置,規劃電子時鐘程序,編寫程序。
  • 將程序燒進芯片,再將芯片與電路板連接,調試。
  • 觀察實驗現象,記錄數據,分析得出結果。

2.4本章小結

確定了模塊的選擇,明白了設計的計時原理,中斷及定時器原理以及調時方式、按鍵的消抖。

3 硬件設計

硬件電路的設計包括核心時間控制模塊、顯示模塊、按鍵模塊,以及鬧鐘的蜂鳴器模塊。

3.1顯示模塊

通過外部連線將P0線接到J16,使得P0口控制數碼管的位顯示,將P2線接到J12,使得P2口控制數碼管的段顯示。

數碼管顯示原理圖如下所示:

圖3-1 數碼管顯示原理圖
3.2按鍵模塊

使用8路獨立按鍵,通過改變排線連接,可以實現按鈕的普通輸入和中斷輸入通過外部接線,將P3口與JP5相連,實現由P3口控制時間調試和鬧鐘設定的按鈕連接。

按鍵原理圖如圖3-2所示:
圖3-2按鍵原理圖
3.3蜂鳴器模塊

通過單片機的內部設定,將 P1.5口作為蜂鳴器的控制端口,通過跳帽連接J8口,使得蜂鳴器可以工作,再由軟件程序編寫,使得蜂鳴器能夠在特定的時刻響。

蜂鳴器原理圖如圖3-3所示:

圖3-3 蜂鳴器原理圖
3.4核心控制以及時間控制模塊

首先RST保持兩個機器周期以上的高電平時自動復位1、上電復位:上電瞬間,電容充電電流最大,電容相當于短路,RST端為高電平,自動復位;電容兩端的電壓達到電源電壓時,電容充電電流為零,電容相當于開路,RST端為低電平,程序正常運行。2、手動復位:首先經過上電復位,當按下按鍵時,RST直接與VCC相連,為高電平形成復位,同時電解電容被短路放電;按鍵松開時,VCC對電容充電,充電電流在電阻上,RST依然為高電平,仍然是復位,充電完成后,電容相當于開路,RST為低電平,正常工作。復位電路圖如圖3-4所示:

單片機工作時,是一條一條地從RoM中取指令,然后一步一步地執行。單片機訪問一次存儲器的時間,稱之為一個機器周期,這是一個時間基準。—個機器周期包括12個時鐘周期。如果一個單片機選擇了12MHz晶振,它的時鐘周期是1/12us,它的一個機器周期是12&TImes;(1/12)us,也就是1us。晶振連接圖如圖3-5所示:

P0口作為 I/O 口輸出的時候時 輸出低電平為 0 輸出高電平為高組態(并非 5V,相當于懸空狀態)。也就是說 P0 口不能真正的輸出高電平,給所接的負載提供電流,因此必須接上拉電阻(一電阻連接到 VCC),由電源通過這個上拉電阻給負載提供電流。口外接上拉電阻如圖3-6所示:

                                                   
圖3-4  復位電路                                            圖3-5 晶振連接
圖3-6 口外接上拉電阻圖
單片機的核心控制模塊由儲存器結構、中斷資源、IO接口等組成。如圖3-7所示:
圖3-7  單片機核心控制模塊原理圖
3.5本章小結

給出時間控制模塊、顯示模塊、按鍵模塊,以及鬧鐘的蜂鳴器模塊,保證設計的進一步進行。

4軟件及編程分析
4.1主程序流程圖
  • 在4位數碼管上顯示當前時間,計時格式為時時分分
  • 由LED閃爍做秒顯示。
  • 利用按鍵可以對時間及鬧鐘進行設置,并可顯示鬧鈴時間。當鬧鈴時間到蜂鳴器發出聲響,按停止鍵可使鬧鈴聲停止。

圖4-1所示為程序流程圖:

圖4-1  程序設計流程圖

4.2軟件編程及分析

本系統的編程環境為keil uvision2,依照流程圖編寫程序并進行程序的編譯,燒錄軟件使用PZISP將程序燒錄進硬件中,軟件得編譯結果及燒錄結果分別如圖4-2和4-3所示:

圖4-2  編譯結果圖

圖4-3  燒錄結果圖

編寫具體程序見附錄所示,以下給出部分主要程序的分析說明:

(1)按鍵消抖

按鍵抖動會引起一次按鍵被誤讀多次。為確保CPU對鍵的一次閉合僅作一次處理,必須去除鍵抖動。抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms ,通過delay函數的延時作用,在按鍵被按下時,延時一段時間,確定按鍵是否真的被按下,如果是就執行程序,達到了消除按鍵的抖動的目的,程序如下:

if(key1==0)                                           //按鍵被按下

{                             delay(10);                            //延時

if(key1==0)               //判斷按鍵是否被按下

{

while(!key1); //進一步確認按鍵被按下

}                            }

(2)初始化程序

開中斷并選擇定時器:

void init()

{

TMOD=0x01;                                           //選擇定時器工作方式為 1

TH0=(65536-50000)/256;               //寫入計數初值,設定 t=50ms

TL0=(65536-50000)%256;

EA=1;                                                         //開總中斷

ET0=1;                                                         //允許定時器中斷

TR0=1;                                                         //啟動定時器

}

4.3實驗結果圖

硬件的位選、段選,以及按鍵的連線如圖4-4和4-5所示:

圖4-4  正常走時圖

當按下按鍵0,并且一直按著時,進入鬧鐘的設定狀態,開始的時候顯示為 00—00—00

圖4-5  進入鬧鐘狀態圖

4.4本章小結

完成了程序的編輯與燒錄,我體會到了自己所學的知識是遠遠不夠,需要學習的知識還有很多。同時此系統的設計提高了我的動手能力,為將來的學習和工作奠定了良好的基礎。




5總結與展望
5.1課程設計總結

課程設計主要完成內容如下:

設計了時鐘系統,系統具有時鐘功能,能準確顯示時、分、秒。同時具備設定鬧鐘和定時鬧鐘響功能,實現了時間顯示(24小時制)、鬧鐘設置、時間調試以及準點報時,可復位的功能,并運行了該電路的程序。

5.2工作展望

從任務要求出發,分析如何實現功能,通過這次課程設計使我對單片機有了深入的認識,特別是對定時中斷方式有了直觀的認識,設計時鐘我使用單片機內部定時/計數器,通過設置定時器產生精確的定時中斷,達到計時的目的。

這個時鐘功能比較單一,還可以進一步的加入功能,在以后的設計中,逐漸增加其他的功能,比如說加溫度檢測,加秒表和顯示日期和星期等來進一步完善這個時鐘。

附 錄 A 設計程序

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code
  5. table[]={0x3f,0x06,0x5b,0x4f,0x66,
  6. 0x6d,0x7d,0x07,0x7f,0x6f};
  7. sbit Bueer=P1^5;
  8. sbit key1=P3^1;
  9. sbit key2=P3^2;
  10. sbit key3=P3^3;
  11. sbit key4=P3^4;
  12. sbit key5=P3^5;
  13. sbit key6=P3^6;
  14. sbit key7=P3^7;
  15. sbit key0=P3^0;
  16. uchar aa,h,m,s,n,i,sec,min,hour
  17. void delay(uint z)
  18. {
  19. uint x,y;
  20. for(x=z;x>0;x--)
  21. for(y=110;y>0;y--);
  22. }
  23. void display()
  24. {
  25. if(key0==1)
  26. {
  27. P2=0xfe;
  28. P0=table[s%10];
  29. delay(1);
  30. P2=0xfd;
  31. P0=table[s/10];
  32. delay(1);
  33. P2=0xfb;
  34. P0=0x40;
  35. delay(1);
  36. P2=0xf7;
  37. P0=table[m%10];
  38. delay(1);
  39. P2=0xef;
  40. P0=table[m/10];
  41. delay(1);
  42. P2=0xdf;
  43. P0=0x40;
  44. delay(1);
  45. P2=0xbf;
  46. P0=table[h%10];
  47. delay(1);
  48. P2=0x7f;
  49. P0=table[h/10];
  50. delay(1);
  51. }
  52. }
  53. void timer0() interrupt 1
  54. {
  55. TH0=(65536-50000)/256;
  56. TL0=(65536-50000)%256;
  57. aa++;
  58. if(aa==20)
  59. {
  60. aa=0;
  61. s++;
  62. if(s==60)
  63. {
  64. s=0;
  65. m++;
  66. if(m==60)
  67. {
  68. m=0;
  69. h++;
  70. if(h==24)
  71. h=0;
  72. }
  73. }
  74. }
  75. }
  76. void keyscan()
  77. {
  78. if(key1==0)
  79. {
  80. delay(10);
  81. if(key1==0)
  82. {
  83. while(!key1);
  84. n++;
  85. TR0=0;
  86. if(n==1)
  87. {
  88. P2=0xfe;
  89. P0=table[s%10];
  90. delay(1);
  91. P2=0xfd;
  92. P0=table[s/10]
  93. delay(1);
  94. }
  95. if(n==2)
  96. {
  97. P2=0xf7;
  98. P0=table[m%10];
  99. delay(1);
  100. P2=0xef;
  101. P0=table[m/10];
  102. Delay(1);
  103. }
  104. if(n==3)
  105. {
  106. P2=0xbf;
  107. P0=table[h%10];
  108. delay(1); P2=0x7f;
  109. P0=table[h/10]; delay(1);
  110. }
  111. if(n==4)
  112. {
  113. TR0=1; n=0; } } }
  114. if(n!=0)
  115. {
  116. if(key2==0)
  117. {
  118. delay(10);
  119. if(key2==0)
  120. {
  121. while(!key2);
  122. if(n==1)
  123. {
  124. s++;
  125. if(s==60)
  126. s=0;
  127. }
  128. if(n==2)
  129. {
  130. m++;
  131. if(m==60)
  132. m=0;
  133. }
  134. if(n==3)
  135. {
  136. h++;
  137. if(h==24)
  138. h=0; } } }
  139. if(key3==0)
  140. {
  141. delay(10);
  142. if(key3==0)
  143. {
  144. while(!key3);
  145. if(n==1)
  146. {
  147. if(s==0)
  148. s=60;
  149. s--;
  150. }
  151. if(n==2)
  152. {
  153. if(m==0)
  154. m=60;
  155. m--;
  156. }
  157. if(n==3)
  158. {
  159. if(h==0)
  160. h=24;
  161. h--; } } } } }
  162. void keyscan2()
  163. {
  164. if(key0==0)
  165. {
  166. P2=0xfe;
  167. P0=table[sec%10];
  168. delay(1);
  169. P2=0xfd;
  170. P0=table[sec/10];
  171. delay(1);
  172. P2=0xfb;
  173. P0=0x40;
  174. delay(1);
  175. P2=0xf7;
  176. P0=table[min%10];
  177. delay(1);
  178. P2=0xef;
  179. P0=table[min/10];
  180. delay(1);
  181. P2=0xdf;
  182. P0=0x40;
  183. delay(1);
  184. P2=0xbf;
  185. P0=table[hour%10];
  186. delay(1);
  187. P2=0x7f;
  188. P0=table[hour/10];
  189. delay(1);
  190. }
  191. if(key4==0)
  192. {
  193. delay(10);
  194. if(key4==0)
  195. {
  196. while(!key4);
  197. {
  198. min++;
  199. if(min==60)
  200. min=0;
  201. }
  202. }
  203. }
  204. if(key5==0)
  205. {
  206. delay(10);
  207. if(key5==0)
  208. {
  209. while(!key5)
  210. {
  211. hour++;
  212. if(hour==24)
  213. hour=0;
  214. }
  215. }
  216. }
  217. if(key6==0)
  218. {
  219. delay(10);
  220. if(key6==0)
  221. {
  222. while(!key6);
  223. {
  224. if(min==0)
  225. min=60;
  226. min--;
  227. }
  228. }
  229. }
  230. if(key7==0)
  231. {
  232. delay(10);
  233. if(key7==0)
  234. {
  235. while(!key7);
  236. {
  237. if(hour==0)
  238. hour=24;
  239. hour--;
  240. }
  241. }
  242. ……………………

  243. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整的Word格式文檔51黑下載地址:
電子時鐘課程設計.doc (2.65 MB, 下載次數: 16)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:150718 發表于 2018-5-11 19:40 | 只看該作者
為啥下載要黑幣,我只有2個。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 西西裸体做爰视频 | 爱操av| 成人av电影在线 | 中文字幕一区二区三区在线观看 | 久久99精品久久久久久 | 日韩欧美中文在线 | 久久免费视频观看 | 在线日韩欧美 | 亚洲一区二区三区免费视频 | 91免费视频| 97久久久久久 | 99国产精品久久久久老师 | 操操日 | 国产成人艳妇aa视频在线 | 狠狠久| 中文一级片 | 亚洲精品中文字幕在线 | 久久草视频 | 综合久久99| 精品一级电影 | a级毛片免费高清视频 | 久久久国产精品 | 国产一区 | 精品1区2区3区4区 | av男人的天堂在线 | 久久精品一区 | 亚洲成人精品久久久 | 成人精品国产免费网站 | 欧美黄色小视频 | 有码在线| 免费一级欧美在线观看视频 | 欧美www在线观看 | 成人午夜免费福利视频 | 天堂在线中文字幕 | 最近免费日本视频在线 | 午夜影院在线观看视频 | 草樱av| 日本中出视频 | 四虎影院在线观看av | 国产精品乱码一二三区的特点 | 国产成人综合网 |