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

標(biāo)題: 單片機(jī)可設(shè)置時(shí)間定時(shí)器設(shè)計(jì)報(bào)告 [打印本頁]

作者: 51黑ren    時(shí)間: 2015-12-23 01:27
標(biāo)題: 單片機(jī)可設(shè)置時(shí)間定時(shí)器設(shè)計(jì)報(bào)告
電子設(shè)計(jì)報(bào)告


     
   題目:基于STC11F02E單片機(jī)的可設(shè)置時(shí)間定時(shí)器設(shè)計(jì)
  專業(yè):電子信息工程
   姓名:張海波
   學(xué)號(hào):141308333  

                      2015年6月25日
     
              目錄
  
前言(學(xué)習(xí)單片機(jī)的歷程)..........................................................1  
一.緒論..........................................................................................3
1.1 設(shè)計(jì)概述...................................................................................3
1.2 設(shè)計(jì)原因....................................................................................3
硬件...........................................................................................4
2.1 元件介紹....................................................................................4
2.1.1 蜂鳴器.....................................................................................4
2.1.2 繼電器.....................................................................................5
2.1.3 數(shù)碼管.....................................................................................5
2.2芯片簡介.....................................................................................7
2.2.1 STC11F02E單片機(jī)..................................................................7
2.2.2 74HC573鎖存器介紹..............................................................8
2.3 制作過程...................................................................................10
2.4 功能操作...................................................................................12
2.5 電路描述...................................................................................13
軟件..........................................................................................14
3.1 程序設(shè)計(jì)流程圖.......................................................................14
3.2 程序代碼...................................................................................15
四.整個(gè)過程遇到的問題和經(jīng)驗(yàn)總結(jié)..........................................21

                前言

不知不覺上大學(xué)已經(jīng)差不多一年了。這么長時(shí)間,我對(duì)大學(xué)有了更深的了解,深刻的認(rèn)識(shí)到大學(xué)的高等教育跟以前的中學(xué)小學(xué)上課有著很大的不同。大學(xué)有著前所未有的自由度,在這自由的時(shí)光里,我們就可以在更大程度上支配我們的時(shí)間。因此在我的世界觀里,大學(xué)是一個(gè)想學(xué)什么就學(xué)什么的地方。因?yàn)槲覀冊(cè)谛迣I(yè)課程的同時(shí),我們也有時(shí)間來學(xué)習(xí)我們的興趣課程。對(duì)于我來說,單片機(jī)是我們大三的一門課程。而且在我認(rèn)識(shí)它的過程中,發(fā)現(xiàn)它正是我感興趣的東西。那時(shí)候我加入了我們學(xué)校航空工程系的飛行器創(chuàng)新實(shí)驗(yàn)室。由于我是唯一一個(gè)電子類專業(yè)的成員,所以我在實(shí)驗(yàn)室將來的主要任務(wù)就是為旋翼飛行器的主控制單元——單片機(jī)編寫程序。所以負(fù)責(zé)這一塊的學(xué)長希望我能夠盡早掌握單片機(jī)的原理及應(yīng)用,早日投入到旋翼機(jī)的設(shè)計(jì)工作中。學(xué)長給我手機(jī)里傳了一本有關(guān)單片機(jī)學(xué)習(xí)的資料,在此之前我是從來沒有聽說過單片機(jī)這個(gè)名詞的。聽過學(xué)長的簡單介紹之后,發(fā)現(xiàn)單片機(jī)真是一種很有意思的東西,你給它輸入程序后,它會(huì)按照你的意愿去做,好像是你養(yǎng)的一只高智商寵物一樣。你怎么說,它就怎么做,不過我得學(xué)會(huì)用它能夠聽得懂的語言——機(jī)器語言跟它交流。這就涉及到KEIL軟件的使用和C程序設(shè)計(jì)問題。因此寒假期間我在家先看了一下C程序方面的簡單知識(shí),就開始了單片機(jī)的學(xué)習(xí)。寒假期間先后學(xué)習(xí)了KEIL軟件的使用,簡單的編程語句,數(shù)碼管顯示原理和數(shù)碼管動(dòng)靜態(tài)顯示,鍵盤檢測原理和其作用,A/D,D/A工作原理,中斷的概念,單片機(jī)內(nèi)部定時(shí)器原理及應(yīng)用。這時(shí)候我是很有成就感,當(dāng)時(shí)唯一想做的就是買一塊和那本書配套的單片機(jī)學(xué)習(xí)板,在其上進(jìn)行編程控制。大一下學(xué)期一開學(xué)我就網(wǎng)購了一塊那本書的配套單片機(jī)學(xué)習(xí)板,買回來之后我就迫不及待的在我的筆記本上裝上了相關(guān)的軟件,要說之前的都是理論學(xué)習(xí),現(xiàn)在終于可以開始進(jìn)行實(shí)踐編程了。當(dāng)我第一次把我寫好的C程序代碼轉(zhuǎn)換為HEX文件,燒寫進(jìn)單片機(jī),板子上的發(fā)光管按照我的意愿亮起來時(shí)。心中是萬分喜悅,突然感覺那些高大上的高科技原來離我們這么近。那幾天,除了上課,基本上都坐在電腦前邊寫C程序代碼。看著板子上的器件我都基本上可以控制了,我就又想更進(jìn)一步自己動(dòng)手做一些自己的單片機(jī)作品。我在看那本書的配套視頻里聽郭天祥郭老師講:假如你畢業(yè)了到別人公司應(yīng)聘,人家問你會(huì)單片機(jī)嗎?你說會(huì)。那你都做過些什么東西呢?然后你吭哧半天說不出一個(gè)作品,人家肯定不會(huì)看好你。聽了這樣的話我做東西的想法更加強(qiáng)烈了。接著我就按著書中提及到的東西買了很多各種各樣的洞洞板和其它元件,還有就是各種工具:電烙鐵、焊錫、吸錫器之類的。準(zhǔn)備做一個(gè)最簡單單片機(jī)最小系統(tǒng),經(jīng)歷了數(shù)次失敗之后我終于做好了我的第一個(gè)單片機(jī)作品——單片機(jī)最小系統(tǒng)。后來又做了一個(gè)紅綠燈模型,這個(gè)定時(shí)器是我的第三個(gè)單片機(jī)作品。下面介紹這個(gè)可設(shè)置時(shí)間定時(shí)器。
               一 緒論
1.1設(shè)計(jì)概述
     這是一個(gè)基于STC11F02E單片機(jī)的可設(shè)置時(shí)間定時(shí)器。以STC11F02E單片機(jī)為中心控制單元,外擴(kuò)兩個(gè)獨(dú)立按鍵作為時(shí)間輸入設(shè)備,一個(gè)蜂鳴器和一個(gè)LED作為聲光示警設(shè)備,一個(gè)四位共陰數(shù)碼管配合一個(gè)74HC573鎖存器執(zhí)行時(shí)間顯示任務(wù),一個(gè)繼電器作為最終執(zhí)行終端。這個(gè)定時(shí)器的功能:輸入一個(gè)小于等于99分鐘59秒的時(shí)間,開始倒計(jì)時(shí),時(shí)間到后,繼電器閉合。這個(gè)定時(shí)器可以作為各種電壓、電流較小的用電器(電流1A,交流電壓120V,直流電壓30V)的定時(shí)開關(guān)。

1.2 設(shè)計(jì)原因
我高中時(shí)候就想做一個(gè)定時(shí)炸彈,那時(shí)候簡單的了解了三極管的接法和作用,后來就用一個(gè)三極管,一個(gè)電子表,一個(gè)去了玻璃殼的燈珠(燈絲)設(shè)想了一個(gè)定時(shí)炸彈,經(jīng)過了好多次失敗后,我就沒有再做。后來我查資料,才發(fā)現(xiàn)三極管的應(yīng)用遠(yuǎn)沒有那么簡單(我對(duì)三極管的學(xué)習(xí)從來沒有放棄,這學(xué)期剛開始的時(shí)候我除了學(xué)習(xí)單片機(jī),還著重看了有關(guān)三極管方面的知識(shí),現(xiàn)在已經(jīng)對(duì)三極管已經(jīng)有了一定的了解,具體到其內(nèi)部各區(qū)兩種載流子的流動(dòng))。因此,我就放棄了。在一個(gè)月前突然想起了那時(shí)候的定時(shí)炸彈,一直對(duì)它不甘心,如今我學(xué)會(huì)了單片機(jī)的應(yīng)用,我想驗(yàn)證一下我學(xué)習(xí)單片機(jī)的成果,再說假如成功了,也算實(shí)現(xiàn)了我的一個(gè)愿望吧。再有就是,廣到制造工業(yè)、軍工領(lǐng)域,狹到玩具、家用電器,定時(shí)器應(yīng)該都能發(fā)揮一定作用,所以我這個(gè)定時(shí)器還是有一定用途的。


                二 硬件
2.1 元件介紹
2.1.1蜂鳴器
   蜂鳴器分為有源蜂鳴器和無源蜂鳴器兩種 (外觀如圖a、b所示),這里的“源”并不是指電源,而是震蕩源。這也是有源蜂鳴器直接接上額定電源(新的蜂鳴器在標(biāo)簽上都有注明)就可連續(xù)發(fā)聲而無源蜂鳴器則和電磁揚(yáng)聲器一樣,需要接在音頻輸出電路中才能發(fā)聲的原因。
  
       a有源蜂鳴器                         b無源蜂鳴器  
   一般來說,有源蜂鳴器比較貴一些,因?yàn)槔锩娑鄠(gè)震蕩電路。當(dāng)然不是有源蜂鳴器就比無源蜂鳴器要好,而是要看應(yīng)用場合了,有源蜂鳴器內(nèi)部帶震蕩源,所以只要一通電就會(huì)叫,這種蜂鳴器多適用于提示或報(bào)警,而無源蜂鳴器則一般適用于需要發(fā)出不同音調(diào)聲音的地方,即音樂或其它有音調(diào)變化的聲音。這個(gè)定時(shí)器上的蜂鳴器是聲音示警用的,所以用的是有源蜂鳴器。
2.1.2繼電器
繼電器是具有隔離功能的自動(dòng)開關(guān)元件,廣泛應(yīng)用于遙控、遙測、通訊、自動(dòng)控制、機(jī)電一體化及電力電子設(shè)備中,是最重要的控制元件之一。我覺得它的基本原理無非就是中學(xué)時(shí)候?qū)W的電磁鐵的應(yīng)用。

                            實(shí)物圖
2.1.3 數(shù)碼管
     數(shù)碼管,我們可能在不只一處見到過它。價(jià)格便宜,使用簡單,在各種儀表及家電上有著廣泛的應(yīng)用。比如,空調(diào),熱水器,萬年歷,冰箱上都能看到它的影子。它能夠顯示不同的數(shù)字,來告訴我們當(dāng)前室內(nèi)溫度,現(xiàn)在的時(shí)間,飯卡內(nèi)的余額等等。如下圖所示,這是我們經(jīng)常見到的七段顯示數(shù)碼管。

從圖中,我們可以看得出來,它可以顯示兩個(gè)個(gè)數(shù)字,稱之為二位數(shù)碼管,相應(yīng)的有一位、三位、四位的,這是從位數(shù)上分。從其內(nèi)部構(gòu)造上分,可為兩種:共陰數(shù)碼管和共陽數(shù)碼管。

說到內(nèi)部結(jié)構(gòu),只有我們了結(jié)了其內(nèi)部結(jié)構(gòu),我們才能知曉其顯示原理。參照上圖,其實(shí),從圖中a看出,一個(gè)八段數(shù)碼管其實(shí)是八個(gè)發(fā)光二極管并聯(lián)組合的,這八個(gè)發(fā)光二極管的連接方式有兩種,如圖b、c。b圖是共陰式連接,c圖是共陽式連接。分別對(duì)應(yīng)的實(shí)物就是上邊所說的共陰數(shù)碼管和共陽數(shù)碼管。欲使其顯示出某個(gè)數(shù)字,則只需點(diǎn)亮相應(yīng)的發(fā)光二極管即可。比如說,你想讓其顯示出阿拉伯?dāng)?shù)字“3”,就可以將發(fā)光二極管a.b.g.c.d點(diǎn)亮即可。數(shù)字的顯示都是變化的,所以一般來講數(shù)碼管大多都需單片機(jī)之類的中央控制單元來控制其顯示數(shù)字。圖a中那個(gè)一位數(shù)碼管有十個(gè)管腳,那么這十個(gè)管腳在數(shù)碼管內(nèi)部都是連接的什么呢?通過上邊的介紹,我們知道了數(shù)碼管的內(nèi)部構(gòu)造其實(shí)是幾個(gè)LED成數(shù)字狀排列的,連接方式是并聯(lián)連接(如圖b、c)。在圖中,我們看到的線頭其實(shí)就是數(shù)碼管引出的管腳。一般來說一位數(shù)碼管一般都是引出來十個(gè)管腳,有兩個(gè)管腳(gnd)是一樣的,就是說兩個(gè)管腳其實(shí)就是一根分出了兩支。這個(gè)數(shù)碼管是共陰數(shù)碼管,因?yàn)槠涔捕藰?biāo)注的是gnd。其他八個(gè)管腳就分別是八個(gè)發(fā)光二極管的陽極,這個(gè)gnd叫做數(shù)碼管的位選端,那八個(gè)陽極叫做數(shù)碼管的段選端。上邊說到數(shù)碼管顯示數(shù)字的方法,知道內(nèi)部結(jié)構(gòu)后,具體講,假如欲使數(shù)碼管顯示一個(gè)“3”,那么我們就將位選管腳接負(fù)極,段選管腳abgcd都接正極,最終就會(huì)在數(shù)碼管上顯示出來一個(gè)數(shù)字“3”,共陽數(shù)碼管同理。上邊介紹的是一位數(shù)碼管,二位,多位數(shù)碼管也都大同小異。只不過比一位數(shù)碼管多了幾個(gè)位選端而已。

2.2芯片簡介
2.2.1 STC11F02E單片機(jī)
     單片機(jī)有成千上萬種,說實(shí)話,我目前接觸過的單片機(jī)型號(hào)無非就三種89C52RC、89C51RC、11F02E,其實(shí)用起來都一樣,都是51內(nèi)核的單片機(jī)。只是某些功能上會(huì)略有差異,比如說89C51RC和89C52RC不一樣在一個(gè)“1”,一個(gè)“2”上,這個(gè)“1”代表的是其芯片內(nèi)部儲(chǔ)存空間是4K,“2”是8K。后邊的“RC”代表STC單片機(jī)內(nèi)部RAM(隨機(jī)讀寫存儲(chǔ)器)為512B,有的后邊不是“RC”而是“RD+”表示內(nèi)部RAM為1280B。以上兩種單片機(jī)都是40管腳的。其體積相對(duì)都比11F02E要大,本定時(shí)器用的是20管腳的單片機(jī)11F02E單片機(jī),因?yàn)樗w積較小,且IO口剛好夠用 ,適合在較小的板子上集成,能滿足成品體積盡量小的要求。這種單片機(jī)只有兩組IO口,P1口,P3口。但是其內(nèi)核和其他兩個(gè)一樣有4組IO口,只是引出來的只有兩組罷了。還有之前有一點(diǎn)我不知道的就是,11F02E內(nèi)部自帶時(shí)鐘電路。我的程序?qū)懞煤鬅M(jìn)單片機(jī)時(shí),驚奇的發(fā)現(xiàn)定時(shí)器倒計(jì)時(shí)的速度并不是每秒減一,后來才知道原來我是用的其內(nèi)部的時(shí)鐘電路而不是外部晶振。后來在網(wǎng)友的幫助下,才知道像這種自帶內(nèi)部時(shí)鐘電路的單片機(jī),在用下載器往單片機(jī)內(nèi)燒寫程序時(shí)需要進(jìn)行相關(guān)設(shè)置。
  

2.2.2 74HC573鎖存器
下圖是74HC573鎖存器的實(shí)物圖:

從圖中可以看出,這個(gè)芯片是一個(gè)20腳的芯片。每個(gè)芯片都有每個(gè)芯片的作用,就比如單片機(jī)可以作為中央控制單元。那么這個(gè)鎖存器在這個(gè)定時(shí)器上起一個(gè)什么作用呢?“鎖存器”三字里邊注意這個(gè)“鎖”字。鎖的是什么,鎖的是數(shù)據(jù)。下面看它的引腳圖和真值表。

總共是二十個(gè)管腳,Vcc、GND分別是該芯片的正極和地(負(fù)極)管腳,基本上每個(gè)芯片上都有這兩個(gè)管腳。OE的專業(yè)術(shù)語為三態(tài)允許控制端(低電平有效),通常叫做輸出允許端。LE叫做鎖存控制端。1D~8D為數(shù)據(jù)輸入端,1Q~8Q為數(shù)據(jù)輸出端。
上面,我們了解了鎖存器的管腳的定義,下面就介紹其“鎖”的作用。真值表中L是低電平,H是高電平,Q0是上次的電平狀態(tài),X是任意電平,Z是高阻態(tài),也就是既不是高電平也不是低電平,而它的輸出狀態(tài)與它相連接的其他器件(在這里與鎖存器相連接的是單片機(jī)的IO口)的電平狀態(tài)來決定。看真值表,當(dāng)OE管腳為高電平時(shí)LE管腳和D管腳不論是什么電平狀態(tài),數(shù)據(jù)輸出管腳Q的電平狀態(tài)都為高阻態(tài),即鎖存器不起任何作用,相當(dāng)于導(dǎo)線。所以,一般都要使OE端置低電平或直接接地。在OE為低電平的前提下,若LE端為低電平,數(shù)據(jù)輸入端D不論是高還是低,數(shù)據(jù)輸出端Q將保持上次的電平狀態(tài)。既只要LE端電平保持低電平不曾改變,無論數(shù)據(jù)輸入端的電平狀態(tài)如何改變,數(shù)據(jù)輸出端Q的電平狀態(tài)將保持不變,通俗地講,就是將數(shù)據(jù)輸出端的輸出的數(shù)據(jù)給鎖住了不能改變。若想把“數(shù)據(jù)鎖”打開換另外一組輸出數(shù)據(jù),直接將LE端置高即可。LE置高,置高期間將想要輸出的數(shù)據(jù)直接送入數(shù)據(jù)輸入端D,再將LE置低,數(shù)據(jù)就又被鎖住。此時(shí)數(shù)據(jù)輸出端輸出的數(shù)據(jù)就是在“上鎖”之前數(shù)據(jù)輸入端輸入的數(shù)據(jù)。該組數(shù)據(jù)在“上鎖(LE為低電平時(shí))”后不隨數(shù)據(jù)輸入端輸入的數(shù)據(jù)的改變而改變。綜上所述,鎖存器的作用就是鎖存一個(gè)字節(jié)(8位(Q1~Q8))的數(shù)據(jù)。它的應(yīng)用一般都是為了節(jié)約IO口。但在本處的作用并不是為了節(jié)約IO 口,而是放大電流,這是鎖存器的第二個(gè)作用。因?yàn)閱纹瑱C(jī)的輸出電流是不足以驅(qū)動(dòng)發(fā)光二極管,所以在單片機(jī)驅(qū)動(dòng)數(shù)碼管時(shí),需要在單片機(jī)和數(shù)碼管之間加上電流放大器件,像實(shí)現(xiàn)單片機(jī)電流放大驅(qū)動(dòng)數(shù)碼管一般都采用三極管,但是為了簡單起見我還是選擇了鎖存器。

2.3 制作過程
“凡事預(yù)則立,不預(yù)則廢”。這句話很有道理,在做每一件事之前,沒有充足的準(zhǔn)備是不行的。我在焊接這個(gè)定時(shí)器之前,我也是斟酌再三,先是預(yù)算了一下所需元件的種類和數(shù)量,確定焊接這些東西所占面積最大可能是多少,確定了使用萬用板的規(guī)格是5*7cm的。然后將洞洞板上的每一個(gè)孔都在紙上排列出來,再將每個(gè)元件的管腳布局和數(shù)量一一陳列出來,在紙上將各元件進(jìn)行一次模擬焊接,最終做到跳線的數(shù)量盡可能的少。最后確定下最終方案。確定下來之后,就開始焊接。焊接完成后,往單片機(jī)里燒寫一些簡單的試驗(yàn)性程序,上電觀察硬件的運(yùn)行情況。運(yùn)行不正常,開始查找硬件問題,找到問題后,調(diào)整原來方案繼續(xù)檢查。最終硬件沒問題后,開始結(jié)合最終定形的硬件編寫程序。編寫程序前,以數(shù)碼管和單片機(jī)的連接情況為依據(jù)為數(shù)碼管顯示進(jìn)行編碼,進(jìn)而確定數(shù)碼管的顯示數(shù)組。再在草紙上大致規(guī)劃一下整個(gè)程序的結(jié)構(gòu)框圖,使程序模塊化,化整為零,使其結(jié)構(gòu)更清晰,減小程序編寫的繁瑣程度。完成后,開始用KEIL軟件編程,每一個(gè)模塊完成后都要在硬件上試驗(yàn)一下,若有問題,繼續(xù)調(diào)試,運(yùn)行情況和預(yù)想一致后就可以進(jìn)入下一個(gè)模塊的編寫。最終逐個(gè)擊破,完成整個(gè)程序的編寫。現(xiàn)在硬件軟件結(jié)合,這個(gè)板子就成了有“靈魂”的硬件了,而不是一塊洞洞板和一個(gè)蜂鳴器,兩塊芯片,兩個(gè)按鈕因?yàn)楹稿a而粘連在一塊的不知名的東西了。它的名字叫做可設(shè)置時(shí)間定時(shí)器。通俗的講,這是幾個(gè)各自有自己特殊功能的東西以某種連接方式連接到一起形成的集合。在我告訴它使命之后,它就按照我的命令工作的機(jī)器。
2.4 功能操作
   它的名字叫做“可設(shè)置時(shí)間定時(shí)器”,顧名思義,它是用來定時(shí)的,且定時(shí)時(shí)間是可以人為設(shè)置的。
            
         定時(shí)器實(shí)物圖
具體操作方法:插上5V電源后,按下總開關(guān),此時(shí)數(shù)碼管顯示如右圖所示。 此時(shí),使用者就可以開始設(shè)置定時(shí)時(shí)間了,先按一次換位按鍵,數(shù)碼管顯示如下圖所示。
  顯示正常,這時(shí)就可以開始設(shè)置定時(shí)時(shí)間分鐘的十位數(shù)字,按下一次加數(shù)鍵,十位數(shù)字加一(第四位顯示和第一位相同),到數(shù)字9后歸零。若分鐘十位數(shù)字設(shè)置完畢或不需要設(shè)置,直接按換位鍵選中下一位同第一位那樣進(jìn)行分鐘個(gè)位數(shù)字設(shè)置,然后進(jìn)行秒鐘十位數(shù)字設(shè)置,最后進(jìn)行最后一位設(shè)置,若現(xiàn)在覺得前邊三位數(shù)字設(shè)置有不妥之處,可再次按下?lián)Q位鍵便可再次回到第一位設(shè)置環(huán)節(jié)。需要注意的是,四位必須全部設(shè)置后才可以開始倒計(jì)時(shí),也就是說,在開始倒計(jì)時(shí)的前一步一定是設(shè)置第四位數(shù)字環(huán)節(jié)。一切設(shè)置妥當(dāng)之后,就可以啟動(dòng)倒計(jì)時(shí)了。啟動(dòng)的方式是:先按住換位鍵不放,然后按下加數(shù)鍵,此時(shí)加數(shù)鍵松開之后,倒計(jì)時(shí)就開始了。

2.5 電路描述
由于目前我還沒有掌握任何一個(gè)軟件來畫電路圖,所以我只能把我的電路描述一下了。以單片機(jī)為中心,從鎖存器開始,鎖存器Vcc端和LE端接正極,OE和GND接地,1D接P1.7,2D接P1.6,3D接P1.5,4D接P1.4,5D接P1.3,6D接P1.2,7D接P1.1,8D接P1.0;Q1~Q8分別接四位共陰數(shù)碼管的8個(gè)段選;一位位選接P3.7,二位位選接P3.5,三位位選接P3.2,四位位選接P3.3;繼電器(繼電器的開關(guān)公共端引出2根排針,常閉端引出4根排針,常開端引出1根排針)的線圈端串聯(lián)一個(gè)1K電阻一端接Vcc,另一端接單片機(jī)的P3.4,蜂鳴器陽極接Vcc,陰極直接接單片機(jī)的P3.0,發(fā)光二極管的陽極接Vcc陰極串聯(lián)一個(gè)1K電阻然后接到單片機(jī)的P3.0(所以定時(shí)器工作時(shí)蜂鳴器響和二極管亮一直是同步的)。復(fù)位電路和時(shí)鐘電路(晶振11.0592MHZ,兩個(gè)起振電容用的是30PF瓷片電容)都是很典型的電路,就不再介紹了。

              三 軟件
3.1 程序設(shè)計(jì)流程

               原始顯示(“————”)
                                    選定位別
輸入時(shí)間時(shí)時(shí)顯示     輸入設(shè)定時(shí)間   等待     加數(shù)
                                    換位      時(shí)時(shí)顯示
                   啟動(dòng)倒計(jì)時(shí)       數(shù)碼管動(dòng)態(tài)顯示
              時(shí)間到后做出最終動(dòng)作
3.2  C程序代碼

#include <reg52.h>
sbit key1=P3^0;
sbit key2=P3^1;
sbit go=P3^4;
int numt,fenshi=0,fenge=0,miaoshi=0,miaoge=0,a=0;
unsigned char code table[]={0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb};
unsigned char code table1[]={0xfe,0x26,0xbd,0xaf,0x67,0xcf,0xdf,0xa6,0xff,0xef};
sbit wela1=P3^7;
sbit wela2=P3^5;
sbit wela3=P3^2;
sbit wela4=P3^3;
void delayms(int xms)//定義延時(shí)函數(shù)
{
  int x,y;
  for(x=xms;x>0;x--)
   for(y=110;y>0;y--);  
}
void initial()//定時(shí)器初始化
{
  TMOD=0x01;
  EA=1;
  ET0=1;
  TH0=(65536-45872)/256;
  TL0=(65536-45872)%256;
}
void main()
{
   initial();
   while(1)//等待換位鍵按下否則數(shù)碼管保持初始顯示----   
   {
      P1=0x01;//初始顯示----  
      wela1=wela2=wela3=wela4=0;
      if(key1==0)
      {
         delayms(10);
         if(key1==0)
             while(!key1);
             goto k0;//開始選中第一位   
      }
   }
   //輸入設(shè)定時(shí)間并時(shí)時(shí)顯示   
k0:   while(1)//選中第一位  
         {  
            if(key1==0)//檢測是否換下一位  
                 {   
                           delayms(10);
                               if(key1==0)
                   while(!key1);
                   goto k1;
                     }
                 wela1=0; wela2=wela4=wela3=1;
                 P1=table[fenshi];
                 delayms(5);
                 wela1=1;wela4=wela3=wela2=0;
                 P1=0x01;
             delayms(5);
             if(key2==0)
                         {
                delayms(10);
               if(key2==0)
                                  {   
                    fenshi++;//歸零  
                        if(fenshi==10)
                    fenshi=0;
                }
                while(!key2);
             }
            
            
         } //while終止括號(hào)  
k1: while(1)//選中第二位
   {
      if(key1==0)//檢測是否換下一位  
                 {   
                           delayms(10);
                               if(key1==0)
                   while(!key1);
                               goto k2;//換下一位
                     }
       wela1=0; wela2=1;wela3=1;wela4=1;
           P1=table[fenshi];
           delayms(5);
       wela2=0;wela3=wela4=wela1=1;
       P1=table1[fenge];
       delayms(5);
           wela1=wela2=1;wela3=wela4=0;
           P1=0x01;
       if(key2==0)
                         {
                delayms(10);
               if(key2==0)
                                  {   
                    fenge++;//歸零  
                        if(fenge==10)
                    fenge=0;
                }
                while(!key2);
             }
   }//while終止括號(hào)  
k2:while(1)//選中第三位  
   {
      if(key1==0)//檢測是否換下一位  
                 {   
                           delayms(10);
                               if(key1==0)
                   while(!key1);
                               goto k3;//換下一位
                     }
       wela1=0; wela2=1;wela3=1;wela4=1;
           P1=table[fenshi];
           delayms(5);
       wela2=0;wela3=wela4=wela1=1;
       P1=table1[fenge];
       delayms(5);
           wela1=wela2=1;wela3=0;wela4=1;
           P1=table[miaoshi];
       delayms(5);      
       wela1=wela2=wela3=1;wela4=0;
       P1=0x01;
       if(key2==0)
                         {
                delayms(10);
               if(key2==0)
                                  {   
                    miaoshi++;//歸零  
                        if(miaoshi==6)
                    miaoshi=0;
                }
                while(!key2);
             }
   }//while終止括號(hào)
k3:while(1)//選中第四位  
   {
      if(key1==0)//檢測是否做出開始倒計(jì)時(shí)動(dòng)作  
                 {   
                           delayms(10);
                               if(key1==0)
                   {
                       while(!key1);
                       if(key2==0)
                       {
                                 delayms(15);
                          if(key2==0)
                          goto k4;//程序跳到倒計(jì)時(shí)狀態(tài)區(qū)  
                       }
                                       goto k0;//回去重新設(shè)置倒計(jì)時(shí)時(shí)間  
                   }
                     }
       wela1=0; wela2=1;wela3=1;wela4=1;
           P1=table[fenshi];
           delayms(5);
       wela2=0;wela3=wela4=wela1=1;
       P1=table1[fenge];
       delayms(5);   
           wela1=wela2=1;wela3=0;wela4=1;
           P1=table[miaoshi];
       delayms(5);  
       wela1=wela2=wela3=1;wela4=0;
       P1=table[miaoge];
       delayms(10);
       if(key2==0)
       {
               delayms(10);
               if(key2==0)
                                  {   
                    miaoge++;//歸零  
                        if(miaoge==10)
                    miaoge=0;
                }
                while(!key2);
       }
    if(key1==0&&key2==0)
    {
       delayms(15);
       if(key1==0&&key2==0)
       while(!key1);
           goto k4;
    }
   }//while終止括號(hào)  
k4:  while(1)//開始進(jìn)入倒計(jì)時(shí)狀態(tài)  
     {
         TR0=1;//開總中斷

         wela1=0;wela2=wela3=wela4=1;//數(shù)碼動(dòng)態(tài)顯示倒計(jì)時(shí)分鐘秒鐘  
         P1=table[fenshi];
         delayms(5);
         wela2=0;wela1=wela3=wela4=1;//分鐘和秒鐘之間的點(diǎn)閃爍  
         if(numt>=0&&numt<=10)
             P1=table1[fenge];
         else
         P1=table[fenge];
         delayms(5);
         wela3=0;wela2=wela1=wela4=1;
         P1=table[miaoshi];
         delayms(5);
         wela4=0;wela2=wela1=wela3=1;
         P1=table[miaoge];
         delayms(5);
         if(fenshi==0&&fenge==0&&(miaoshi<1||miaoshi==1&&miaoge==0))//判斷是否到達(dá)倒計(jì)時(shí)十秒內(nèi)  
         a=1;
         if(a==1&&numt%5==0)
         key1=0;
         else key1=1;

         if(a==0&&numt>=0&&numt<=3)//蜂鳴器每秒響一次   
         key1=0;
        
         if(miaoge==-1)//各位之間進(jìn)制規(guī)則設(shè)定  
         {
            miaoge=9;
            miaoshi--;
         }
         
         if(miaoshi==-1)
         {
            miaoshi=5;
            fenge--;
         }

         if(fenge==-1)
         {
            fenge=9;
            fenshi--;
         }
      
         

         if(fenshi==0&&fenge==0&&miaoshi==0&&miaoge==0)//判斷是否到定時(shí)時(shí)間  
         {  
           go=0;//繼電器閉合
           while(1);//一切都結(jié)束了  
         }
        
     }
}
void T0time() interrupt 1//中斷服務(wù)函數(shù)  
{
  TH0=(65536-45872)/256;
  TL0=(65536-45872)%256;
  numt++;
  if(numt==20)
    {
        numt=0;
        miaoge--;
    }
}      

    我覺得程序是整個(gè)過程中最困難的地方,在做這個(gè)之前我甚至覺得,我還沒有這個(gè)能力去寫這個(gè)定時(shí)程序。看來我錯(cuò)了,有的東西看起來很難,其實(shí)實(shí)踐過程是“車到山前必有路”,只要有恒心有毅力有信心,那都不是事兒!

                  

   四.整個(gè)過程遇到的問題和經(jīng)驗(yàn)總結(jié)
         
   1、有關(guān)內(nèi)部自帶時(shí)鐘電路單片機(jī)使用外部晶振問題:可以將外部晶振接上,在下載器里選擇下次上電使用外部晶振還是內(nèi)部RC。若選擇內(nèi)部RC,外部晶振是不起作用的,也不會(huì)有什么影響。 但請(qǐng)注意,若正在使用內(nèi)部RC但下載程序時(shí)選擇了下次啟動(dòng)使用外部晶振,而你又沒有外部晶振,那你除非焊上外部晶振,否則你單片機(jī)一旦斷電,下次再上電就這個(gè)單片機(jī)就廢了。
                                   







    2、STC11F02E單片機(jī)的串口引腳在連接其他部件的同時(shí)是燒不進(jìn)去程序的。
   3、STC11F02E單片機(jī)的P3.6管腳(同時(shí)也是復(fù)位管腳)不能接其他部件,接其他部件時(shí)候,要置高電平,否則會(huì)復(fù)位,導(dǎo)致程序不正常執(zhí)行。

          復(fù)位管腳





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩欧美国产成人一区二区 | 国产精品免费一区二区三区 | 自拍偷拍第一页 | 久久精品欧美一区二区三区麻豆 | 中文字幕在线观看国产 | 久久狠狠 | 狠狠综合久久av一区二区老牛 | 欧美精品一区在线发布 | 亚洲日本国产 | 午夜在线免费观看视频 | 91视频在线 | 亚洲一级毛片 | av中文字幕在线观看 | 国产精品久久久久久久久久 | 在线观看欧美日韩视频 | 久草视频网站 | 久久噜| 亚洲乱码一区二区三区在线观看 | 久久噜| av网址在线播放 | 91视频播放 | jizz亚洲人| 精品熟人一区二区三区四区 | 91在线网站 | 亚洲第一成人av | 日韩精品成人网 | 亚洲成人精 | 国产精品影视在线观看 | 九色91视频 | 毛片的网址 | 国产一区二区久久 | av手机免费在线观看 | 在线视频成人 | 亚洲激情av | 久久久久亚洲精品 | 天堂网avav| 亚洲国产精品一区二区第一页 | 91久久北条麻妃一区二区三区 | 综合久久久 | 视频国产一区 | 免费观看一级特黄欧美大片 |