久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

工業(yè)生產(chǎn)節(jié)能時(shí)控器(轉(zhuǎn)載)

 老黃兄 2014-10-15

4.1  系統(tǒng)功能描述

眾所周知,,現(xiàn)階段我國(guó)的能源缺口十分巨大,但人們的生產(chǎn)及生活又少不了能源,。以電力供求為例,,有些家用電器的耗電量很厲害,,如家庭取暖器、冷暖式空調(diào)等,。有些工廠是名符其實(shí)的耗電大戶,,如電解鋁、電解銅生產(chǎn)廠,,煉鋼廠等,。

如能采取一些合理化的用電方式,則可望能較大幅度地節(jié)能或節(jié)支,。其中的一個(gè)較好方法就是分時(shí)控制作業(yè)?,F(xiàn)階段,不僅工業(yè)用電而且生活用電均采取分時(shí)計(jì)費(fèi)的方法,。如果能將白天用電高峰期開(kāi)動(dòng)的一些設(shè)備改在夜晚用電低谷期使用,,則不僅可大幅減輕電網(wǎng)的負(fù)載,而且還可有效減輕用戶的用電費(fèi)用,。

我們以北京市電采暖低谷用電優(yōu)惠辦法實(shí)施細(xì)則來(lái)看,,電采暖用戶每年從11月1日起至次年3月31日止享受低谷用電優(yōu)惠,低谷優(yōu)惠時(shí)段為晚23:00至次日早7:00,。

同樣,,工業(yè)生產(chǎn)中,低谷用電的用戶也能享受到不少的優(yōu)惠,。

這里介紹的“工業(yè)生產(chǎn)節(jié)能時(shí)控器”就是用來(lái)定時(shí)控制生產(chǎn)設(shè)備工作的一種節(jié)能裝置,。由于其體積小、成本低,,不僅適合嵌入到各種能耗大的工控設(shè)備中進(jìn)行控制,,也適合居民的家用電器節(jié)能控制。節(jié)能節(jié)支的效果顯著,。

“工業(yè)生產(chǎn)節(jié)能時(shí)控器”的核心實(shí)際上是一臺(tái)基于單片機(jī)的數(shù)字電子鐘,,設(shè)有四位LED數(shù)碼管顯示,具有二個(gè)時(shí)間控制點(diǎn)(控制一路負(fù)載的通斷),。因要求其具有低成本及小體積,,因此設(shè)計(jì)時(shí)采用單片的精簡(jiǎn)型、小引腳單片機(jī)AT89C2051來(lái)實(shí)現(xiàn)“工業(yè)生產(chǎn)節(jié)能時(shí)控器”的所有功能,。

4.2  系統(tǒng)方案及電路設(shè)計(jì)

4.2.1  系統(tǒng)方案

工業(yè)生產(chǎn)節(jié)能時(shí)控器(轉(zhuǎn)載) - 海之子 - ★海之子BLOG★圖4-1為“工業(yè)生產(chǎn)節(jié)能時(shí)控器”的系統(tǒng)構(gòu)成方框圖,,由單片機(jī)、按鍵輸入,、數(shù)碼管顯示器,、繼電器、蜂鳴器及電源等6部分組成。

單片機(jī)是整個(gè)系統(tǒng)的核心,,整個(gè)系統(tǒng)的所有運(yùn)行如:產(chǎn)生精確時(shí)鐘及計(jì)時(shí),,LED數(shù)碼管顯示器輸出掃描顯示,,輸出驅(qū)動(dòng)繼電器,、驅(qū)動(dòng)蜂鳴器、掃描按鍵輸入等,,均由單片機(jī)完成,。這里也使用了有口皆碑的小引腳、高性能,、低價(jià)位的精簡(jiǎn)單片機(jī):AT89C2051,。

按鍵輸入電路負(fù)責(zé)輸入單片機(jī)中一系列工作參數(shù)及功能設(shè)定:如進(jìn)行走時(shí)設(shè)置、定時(shí)設(shè)置,、…等,。

LED數(shù)碼管顯示器主要用以顯示走時(shí)及定時(shí)設(shè)置。

LED數(shù)碼管顯示器采用程序動(dòng)態(tài)掃描顯示,,這樣與靜態(tài)顯示相比,,可節(jié)約大量的外部元器件。

電源部分負(fù)責(zé)對(duì)整個(gè)系統(tǒng)供電,,平時(shí)交流電經(jīng)降壓后,,整流、濾波,、穩(wěn)壓成5V直流電源供系統(tǒng)工作,,當(dāng)交流電源斷電時(shí),則由3.6V鎳鉻電池進(jìn)行后備供電,,保持走時(shí)準(zhǔn)確,,但此時(shí)LED數(shù)碼管顯示器關(guān)閉顯示,以降低3.6V鎳鉻電池的消耗,。

工業(yè)生產(chǎn)節(jié)能時(shí)控器(轉(zhuǎn)載) - 海之子 - ★海之子BLOG★圖4-1  工業(yè)生產(chǎn)節(jié)能時(shí)控器方框圖

4.2.2  單片機(jī)計(jì)時(shí)原理

單片機(jī)作精確的電子鐘使用,,其根本原因是利用了單片機(jī)內(nèi)部的一個(gè)16位定時(shí)器(T0或T1),通過(guò)設(shè)置,,使T0(或T1)產(chǎn)生一定時(shí)間(例如100ms)的精確定時(shí)中斷,。另外,還需建立幾個(gè)軟件計(jì)數(shù)器單元(例如deda,,sec,,min,…)進(jìn)行配合,。例如:每次定時(shí)中斷時(shí),,使deda加1,…。當(dāng)deda滿10時(shí)(此時(shí)時(shí)間為1000ms)使sec加1,,同時(shí)清除deda,。當(dāng)sec滿60時(shí)(此時(shí)時(shí)間為60s)使min加1,同時(shí)清除sec,?!@樣即可完成精確計(jì)時(shí)。由于軟件編程的靈活性,,實(shí)際上可隨意做出任意進(jìn)制的正計(jì)時(shí)或倒計(jì)時(shí)電子鐘,。圖4-2為單片機(jī)構(gòu)成電子鐘的原理框圖。

圖4-2  單片機(jī)構(gòu)成電子鐘的原理框圖

4.2.3  LED數(shù)碼管顯示器顯示原理

在單片機(jī)系統(tǒng)中,,經(jīng)常用LED(發(fā)光二極管)數(shù)碼顯示器來(lái)顯示單片機(jī)系統(tǒng)的工作狀態(tài),、運(yùn)算結(jié)果等各種信息,LED數(shù)碼顯示器是單片機(jī)與人對(duì)話的一種重要輸出設(shè)備,。

1.LED數(shù)碼顯示器的構(gòu)造及特點(diǎn)

圖4-3是LED數(shù)碼顯示器的構(gòu)造,。它實(shí)際上是由8個(gè)發(fā)光二極管構(gòu)成,其中7個(gè)發(fā)光二極管排列成“8”字形的筆畫(huà)段,,另一個(gè)發(fā)光二極管為圓點(diǎn)形狀,,安裝在顯示器的右下角作為小數(shù)點(diǎn)使用。通過(guò)發(fā)光二極管亮暗的不同組合,,從而可顯示出0~9的阿拉伯?dāng)?shù)字符號(hào)以及其它能由這些筆畫(huà)段構(gòu)成的各種字符,。

圖4-3   LED數(shù)碼顯示器的構(gòu)造

LED數(shù)碼顯示器的內(nèi)部結(jié)構(gòu)共有兩種不同形式,一種是共陽(yáng)極顯示器,,其內(nèi)部電路見(jiàn)圖4-4,,即8個(gè)發(fā)光二極管的正極全部連接在一起組成公共端,8個(gè)發(fā)光二極管的負(fù)極則各自獨(dú)立引出,。另一種是共陰極顯示器,,其內(nèi)部電路見(jiàn)圖4-5,即8個(gè)發(fā)光二極管的負(fù)極全部連接在一起組成公共端,,8個(gè)發(fā)光二極管的正極則各自獨(dú)立引出,。    

圖4-4   共陽(yáng)極顯示器內(nèi)部電路

圖4-5   共陰極顯示器內(nèi)部電路

從尺寸上分,LED數(shù)碼管的種類很多,,常用的有0.3,、0.5、0.8,、1.0,、1.2、1.5,、1.8,、2.3,、3.0、4.0,、5.0寸等,。一般小于1.0寸的為單管芯,1.2~1.5寸為雙管芯,,1.8寸以上的為3個(gè)以上管芯,。因而它們的供電電壓要求不同,一般每個(gè)管芯的壓降為2V左右,。通常,,0.8寸以下采用5V供電,,1.0~2.3寸采用12V供電,,3.0以上的選擇更高電壓供電。

LED數(shù)碼顯示器中的發(fā)光二極管共有兩種連接方法:

共陽(yáng)極接法,。把發(fā)光二極管的陽(yáng)極連在一起,,使用時(shí)公共陽(yáng)極接+5V,這時(shí)陰極接低電平的段發(fā)光二極管就導(dǎo)通點(diǎn)亮,,而接高電平的則不點(diǎn)亮,。

共陰極接法。把發(fā)光二極管的陰極連在一起,,使用時(shí)公共陰極接地,,這時(shí)陽(yáng)極接高電平的段發(fā)光二極管就導(dǎo)通點(diǎn)亮,而接低電平的則不點(diǎn)亮,。

驅(qū)動(dòng)電路中的限流電阻R,,通常根據(jù)LED的工作電流計(jì)算而得到,R=(Vcc-Vled)/Iled,。式中,,Vcc為電源電壓(+5V),Vled為L(zhǎng)ED壓降(一般取2V左右),,Iled為工作電流(可取1~20mA),。R通常取數(shù)百歐姆。

我們使用的AT89C2051單片機(jī),,其I/O口具有20mA的灌電流輸出能力,,因此可直接驅(qū)動(dòng)共陽(yáng)極的LED數(shù)碼顯示器。

2.LED數(shù)碼管顯示的基本原理

為了顯示數(shù)字或符號(hào),,要為L(zhǎng)ED數(shù)碼顯示器提供代碼,,因?yàn)檫@些代碼是為顯示字形的,因此稱之為字形代碼,。

七段發(fā)光二極管,,再加上一個(gè)小數(shù)點(diǎn)位,共計(jì)8位代碼,由一個(gè)數(shù)據(jù)字節(jié)提供,。各數(shù)據(jù)位的對(duì)應(yīng)關(guān)系如下所示:

數(shù)據(jù)位 D7 D6 D5 D4 D3 D2 D1 D0

顯示段 h(或稱dp) g F e d c b a

LED數(shù)碼顯示器的字形(段)碼表如下所示:

顯示字形 字形碼(共陽(yáng)極) 字形碼(共陰極)

0 C0H 3FH

1 F9H 06H

2 A4H 5BH

3 B0H 4FH

4 99H 66H

5 92H 6DH

6 82H 7DH

7 F8H 07H

8 80H 7FH

9 90H 6FH

A 88H 77H

B 83H 7CH

C C6H 39H

D A1H 5EH

E 86H 79H

F 8EH 71H

熄滅 FFH 00H

4.2.4   LED數(shù)碼顯示器的顯示方法

在單片機(jī)應(yīng)用系統(tǒng)中,,LED數(shù)碼顯示器的顯示方法有兩種:靜態(tài)顯示法和動(dòng)態(tài)掃描顯示法。

1.靜態(tài)顯示法

所謂靜態(tài)顯示,,就是每一個(gè)顯示器各筆畫(huà)段都要獨(dú)占具有鎖存功能的輸出口線,,CPU把欲顯示的字形代碼送到輸出口上,就可以使顯示器顯示出所需的數(shù)字或符號(hào),,此后,,即使CPU不再去訪問(wèn)它,顯示的內(nèi)容也不會(huì)消失(因?yàn)楦鞴P畫(huà)段接口具有鎖存功能),。

靜態(tài)顯示法的優(yōu)點(diǎn)是顯示程序十分簡(jiǎn)單,,顯示亮度大,由于CPU不必經(jīng)常掃描顯示器,,所以節(jié)約了CPU的工作時(shí)間,。但靜態(tài)顯示也有其缺點(diǎn),主要是占用的I/O口線較多,,硬件成本也較高,。所以靜態(tài)顯示法常用在顯示器數(shù)目較少的應(yīng)用系統(tǒng)中。圖4-6為靜態(tài)顯示示意圖,。

圖4-6中由74LS273(8D鎖存器)作擴(kuò)展輸出口,,輸出控制信號(hào)由P2.0和/WR合成,當(dāng)二者同時(shí)為0時(shí),,或門(mén)輸出為0,,將P0口數(shù)據(jù)鎖存到74LS273中,口地址為FEEEH,。輸出口線的低4位和高4位分別接BCD-7段顯示譯碼驅(qū)動(dòng)器74LS47,,它們驅(qū)動(dòng)兩位數(shù)碼管作靜態(tài)的連續(xù)顯示。

圖4-6   靜態(tài)顯示示意圖

2.動(dòng)態(tài)掃描顯示法

動(dòng)態(tài)掃描顯示是單片機(jī)應(yīng)用系統(tǒng)中最常用的顯示方式之一,。它是把所有顯示器的8個(gè)筆畫(huà)段a~h的各同段名端互相并接在一起,,并把它們接到字段輸出口上。為了防止各個(gè)顯示器同時(shí)顯示相同的數(shù)字,,各個(gè)顯示器的公共端COM還要受到另一組信號(hào)控制,,即把它們接到位輸出口上。這樣,,對(duì)于一組LED數(shù)碼顯示器需要由兩組信號(hào)來(lái)控制:一組是字段輸出口輸出的字形代碼,,用來(lái)控制顯示的字形,稱為段碼,;另一組是位輸出口輸出的控制信號(hào),,用來(lái)選擇第幾位顯示器工作,,稱為位碼。在這兩組信號(hào)的控制下,,可以一位一位地輪流點(diǎn)亮各個(gè)顯示器顯示各自的數(shù)碼,,以實(shí)現(xiàn)動(dòng)態(tài)掃描顯示。在輪流點(diǎn)亮一遍的過(guò)程中,,每位顯示器點(diǎn)亮的時(shí)間則是極為短暫的(1~5mS),。由于LED具有余輝特性以及人眼視覺(jué)的惰性,盡管各位顯示器實(shí)際上是分時(shí)斷續(xù)地顯示,,但只要適當(dāng)選取掃描頻率,,給人眼的視覺(jué)印象就會(huì)是在連續(xù)穩(wěn)定地顯示,并不察覺(jué)有閃爍現(xiàn)象,。動(dòng)態(tài)掃描顯示由于各個(gè)數(shù)碼管的字段線是并聯(lián)使用的,,因而大大簡(jiǎn)化了硬件線路。圖4-7為動(dòng)態(tài)顯示示意圖,。

圖4-7  動(dòng)態(tài)顯示示意圖

在實(shí)際的單片機(jī)系統(tǒng)中,,LED顯示程序都是作為一個(gè)子程序供監(jiān)控程序調(diào)用,,因此各位顯示器都掃過(guò)一遍之后,,就返回監(jiān)控程序。返回監(jiān)控程序后,,進(jìn)行一些其它操作,,再調(diào)用顯示掃描程序。通過(guò)這種反復(fù)調(diào)用來(lái)實(shí)現(xiàn)LED數(shù)碼顯示器的動(dòng)態(tài)掃描,。

動(dòng)態(tài)掃描顯示在使用時(shí)必須反復(fù)調(diào)用顯示子程序,,若CPU要進(jìn)行其它操作,那么顯示子程序只能插入循環(huán)程序中,,這往往束縛了CPU的工作,,降低了CPU的工作效率。另外掃描顯示電路中,,顯示器數(shù)目也不宜太多,,一般在12個(gè)以內(nèi),否則會(huì)使人察覺(jué)出顯示器在分時(shí)輪流顯示,。

這兩種顯示方式各有利弊:靜態(tài)顯示法雖然數(shù)據(jù)顯示穩(wěn)定,,占用很少的CPU工作時(shí)間,但每個(gè)顯示單元都需要單獨(dú)的顯示驅(qū)動(dòng)電路,,使用的電路硬件較多,。動(dòng)態(tài)掃描顯示占用的CPU時(shí)間多,但使用的硬件少,,能節(jié)省線路板空間及降低成本,。

動(dòng)態(tài)掃描顯示由于外圍元件少,,節(jié)約了成本,充分發(fā)揮了軟件的優(yōu)勢(shì),,因而在單片機(jī)系統(tǒng)中得到了廣泛的應(yīng)用,。“工業(yè)生產(chǎn)節(jié)能時(shí)控器”也采用動(dòng)態(tài)掃描顯示,。

4.2.5  電路設(shè)計(jì)

“工業(yè)生產(chǎn)節(jié)能時(shí)控器”電路原理見(jiàn)圖4-8,。共有4個(gè)按鍵,即on/off,、up,、left、set,。這幾個(gè)鍵的功能為:               

on/off──定時(shí)1,、2啟動(dòng)/撤消鍵;

up──輸入數(shù)據(jù)遞增鍵,;

left──左移鍵,;

set──工作模式設(shè)定鍵,共可設(shè)定“走時(shí)”,、“調(diào)整走時(shí)時(shí)間”,、“輸入定時(shí)1”、“輸入定時(shí)2” 四個(gè)模式,。

圖4-8  工業(yè)生產(chǎn)節(jié)能時(shí)控器電路圖

“工業(yè)生產(chǎn)節(jié)能時(shí)控器”中,,單片機(jī)AT89C2051只有15條I/O線,由于受I/O線數(shù)量限制,,因此P1口中的Pl.0~P1.3既作為驅(qū)動(dòng)4位LED數(shù)碼管的數(shù)據(jù)輸出一部分,,同時(shí)也用作按鍵的輸入。無(wú)疑,,這種方式大大節(jié)約了硬件的I/O線,,但也給編程者提出了更高的技術(shù)要求。關(guān)于按鍵輸入的工作原理我們?cè)诤竺娴某绦蛟O(shè)計(jì)部分會(huì)加以詳解,。該機(jī)的繼電器觸點(diǎn)負(fù)載電流可達(dá)5A/220V,,如欲控制更大功率的負(fù)載,可外接中間繼電器,、接觸器或固態(tài)繼電器(SSR),。正常工作時(shí)5V電源經(jīng)R1對(duì)3.6V/60mA鎳鉻電池充電,當(dāng)交流電源斷電時(shí),,則由3.6V鎳鉻電池對(duì)單片機(jī)進(jìn)行后備供電,,保持走時(shí)準(zhǔn)確,此時(shí)軟件關(guān)閉LED數(shù)碼管顯示器顯示,,以降低3.6V鎳鉻電池的消耗,。通過(guò)實(shí)際使用,,發(fā)現(xiàn)“工業(yè)生產(chǎn)節(jié)能時(shí)控器”走時(shí)很準(zhǔn),每星期的誤差在10秒之內(nèi),。

4.3  程序設(shè)計(jì)

4.3.1  主程序設(shè)計(jì)

圖4-9為主程序狀態(tài)流程圖,。可見(jiàn)主程序只負(fù)責(zé)進(jìn)行走時(shí)或調(diào)整時(shí)間的運(yùn)算及顯示,,而判斷按鍵輸入則放在Tl定時(shí)中斷 (10ms)服務(wù)子程序中,。T0作為走時(shí)的基準(zhǔn)被設(shè)置為l00ms定時(shí)中斷。這種設(shè)計(jì)的優(yōu)點(diǎn)是大大簡(jiǎn)化了主程序設(shè)計(jì),,并且CPU會(huì)定時(shí)關(guān)心鍵盤(pán),,只要定時(shí)中斷時(shí)間足夠短(如為幾十ms),就不會(huì)漏掉每一次的按鍵輸入,。我們將顯示走時(shí),、顯示調(diào)整走時(shí)、顯示調(diào)整定時(shí)1,、顯示調(diào)整定時(shí)2做成四個(gè)子程序,,分別由set為0、1,、2,、3時(shí)散轉(zhuǎn)后的“顯示走時(shí)并判斷定時(shí)1、2到否程序”,、“顯示調(diào)整走時(shí)程序”,、“顯示調(diào)整定時(shí)1程序”、“顯示調(diào)整定時(shí)2程序”進(jìn)行調(diào)用,。為達(dá)到需輸入的某位顯示最亮(穩(wěn)定顯示),而其它三位顯示較暗 (有閃爍感)的視覺(jué)效顯,,讓三位需顯示較暗的數(shù)碼管每位點(diǎn)亮3ms,,而顯示最亮的那位數(shù)碼管點(diǎn)亮36ms即可。

圖4-9  主程序狀態(tài)流程

4.3.2變量定義及初始化模塊

uchar x[4]; /* 存放走時(shí)的數(shù)組*/

uchar y[4]={0,0,0,0}; /* 存放定時(shí)1的數(shù)組*/

uchar z[4]={0,0,0,0}; /* 存放定時(shí)2的數(shù)組*/

uchar deda=0;    /*100mS計(jì)數(shù)單元清零*/

bit d_05s=0;            /*0.5秒標(biāo)志*/

bit o_f1=0;  /*定時(shí)1啟/停標(biāo)志*/

bit o_f2=0;  /*定時(shí)2啟/停標(biāo)志*/

uchar set=0; /*功能鍵標(biāo)志*/

uchar h=0; //全局變量

uchar n=0;

uchar m=0;

uchar flag; //RAM區(qū)是否受干擾的標(biāo)志

uchar left=0; //左移鍵標(biāo)志

uchar sec=0; //走時(shí)單元sec,、min,、hour初始化

uchar min=0;

uchar hour=0;

uchar min1=0; //定時(shí)1單元min1、hour1初始化

uchar hour1=0;

uchar min2=0; //定時(shí)2單元min1,、hour1初始化

uchar hour2=0;

uchar up=0; //遞增鍵標(biāo)志

bit flag1=0; //繼電器輸出控制的位標(biāo)志,,1時(shí)繼電器吸合,0時(shí)繼電器釋放

/********************************************/

/*定時(shí)器T0初始化*/

void init_timer0()

{

TMOD=0x11; //定時(shí)器T0,、T1方式1

TH0=-(50235/256); //裝載100ms定時(shí)初值

TL0=-(50235%256);

IE=0x8a; //開(kāi)CPU中斷

TR0=1; //啟動(dòng)T0

}

/*定時(shí)器T1初始化*/

void init_timer1()

{

TH1=-(5000/256); ////裝載10ms定時(shí)初值

TL1=-(5000%256);

}

4.3.3  判斷按鍵輸入的T1定時(shí)中斷服務(wù)子程序模塊

因?yàn)椤肮I(yè)生產(chǎn)節(jié)能時(shí)控器”的一個(gè)設(shè)計(jì)難點(diǎn)就是其按鍵輸入部分,,因此這里詳細(xì)分析一下按鍵輸入子程序模塊。

學(xué)習(xí)過(guò)單片機(jī)技術(shù)的人都知道,,單片機(jī)的按鍵輸入一般可分為簡(jiǎn)單的獨(dú)立式按鍵輸入及行列式鍵盤(pán)輸入兩種,。圖4-10為簡(jiǎn)單的獨(dú)立式鍵盤(pán)輸入示意圖,,獨(dú)立式鍵盤(pán)輸入適合于按鍵輸入不多的情況(<5個(gè)按鍵),具有占用口線較少,、軟件編寫(xiě)簡(jiǎn)單容易等特點(diǎn),。

圖4-10  獨(dú)立式鍵盤(pán)輸入示意圖

圖4-11為行列式鍵盤(pán)輸入示意圖,列線接P1.0~P1.3,,行線接P1.4~P1.7,。行列式鍵盤(pán)輸入適合于按鍵輸入多的情況,如有16個(gè)按鍵輸入,,用簡(jiǎn)單按鍵輸人用要占用2個(gè)輸入口(共16位),,而使用行列式鍵盤(pán)輸入只需占用一個(gè)輸入口(8位)。

圖4-11  行列式鍵盤(pán)輸入示意圖

但行列式鍵盤(pán)輸入軟件編寫(xiě)較復(fù)雜,,對(duì)初學(xué)者而言有一定的難度,。在很多狀態(tài)下,按鍵輸人的值要同時(shí)要在LED數(shù)碼管上顯示出來(lái),。如一個(gè)按鍵設(shè)計(jì)為輸入遞增(加法)鍵,,可以設(shè)計(jì)成每點(diǎn)按一下,數(shù)值遞增加l,,同時(shí)在LED數(shù)碼管上顯示出來(lái),;也可設(shè)計(jì)成持續(xù)按下時(shí),數(shù)值以一定時(shí)間間隔(如0.3秒)累加,。但是當(dāng)欲輸入值較大時(shí)(如三位LED數(shù)碼管作輸入顯示時(shí)的輸入值最大為999),,則可能按下鍵的時(shí)間太長(zhǎng)(最長(zhǎng)達(dá)300秒),看來(lái)這種方式只適用于一位或至多兩位數(shù)值(最大99)的輸入,。當(dāng)然你也可多設(shè)幾個(gè)鍵,,每個(gè)鍵只負(fù)責(zé)一位數(shù)值的輸入,但這樣會(huì)占用較多的口線,,浪費(fèi)寶貴的硬件資源,。

大家可能見(jiàn)到過(guò),一些進(jìn)口的溫度控制器(如日本RKC  INSTRUMENT     INC.生  產(chǎn)的REX一C700溫控器)的面板設(shè)計(jì)為:溫度測(cè)量值用4位LED數(shù)碼管顯示,,輸入設(shè)定值顯示也用4位LED數(shù)碼管,,輸入按鍵只有4個(gè),一個(gè)為“模式設(shè)定鍵”,,一個(gè)為“左移鍵”,,另兩個(gè)為“加法鍵”、“減法鍵”,。欲輸入設(shè)定值(溫控值)時(shí),,按一下“模式設(shè)定鍵”,程序進(jìn)入設(shè)定狀態(tài),此時(shí)輸入設(shè)定值顯示的4位LED數(shù)碼管中,,個(gè)位顯示最亮(穩(wěn)定顯示),,而十、百,、千位顯示較暗(有閃爍感),,說(shuō)明可對(duì)個(gè)位進(jìn)行輸入。按下“加法鍵”或“減法鍵”,,即可輸入個(gè)位數(shù)的值,;點(diǎn)按一下“左移鍵”,變?yōu)槭伙@示最亮,,而個(gè),、百、千位顯示較暗,,說(shuō)明可對(duì)十位進(jìn)行輸入,。按下“加法鍵”或“減法鍵”,即可輸入十位數(shù)的值,;……這樣可完成4位數(shù)的輸入,。完成輸入后,再按一下“模式設(shè)定鍵”,,程序即退出設(shè)定狀態(tài),,進(jìn)入工作運(yùn)行。用這種輸入方法,,不僅輸入4位數(shù)用4個(gè)鍵即可,,再多位(5位至24位)的輸入也用這4個(gè)鍵就夠了。

“工業(yè)生產(chǎn)節(jié)能時(shí)控器”就是采用這種按鍵輸入方式設(shè)計(jì)的,。下面為按鍵輸入子程序模塊詳解,。

void zd1(void) interrupt 3  //聲明定時(shí)1中斷函數(shù)

{       //定時(shí)l中斷函數(shù)開(kāi)始

uchar i,j;i=P1;j=P3; /*定義i、j為無(wú)符號(hào)字符型局部變量,,將當(dāng)時(shí)的Pl口,、P3口狀態(tài)送i、j暫存*/

TH1=-(5000/256);

TL1=-(5000%256); //定時(shí)器Tl重新載入10ms初值

if(m==1)n++; /*如變量m等于1,,則變量n遞增。說(shuō)明:m,、n為整個(gè)程序開(kāi)始時(shí)定義的元符號(hào)字符型全局變量*/

if(n>=30){n=0;m=0;} //如變量n大于等于30,,則m、n清零

P3_7=0; //P3.7置0,,準(zhǔn)備讀取按鍵輸入

P1=0xff; //P1口置全1,,準(zhǔn)備讀取按鍵輸入

if(P1!=0xff) //如果P1口不等于全1,說(shuō)明4個(gè)按鍵中有鍵按下

{ //進(jìn)入if(P1!=0xff)語(yǔ)句范圍

if(n==0)m=1; //如果n等于0,,進(jìn)入if(n==0)語(yǔ)句,,m置l

{if(n==1) /*如果n等于1,,迸入if(n==1)語(yǔ)句,同時(shí)進(jìn)行下面的具體判斷按鍵語(yǔ)句,。作用效果為:開(kāi)始時(shí)m,、n均賦0,一旦有鍵按下,,第一次中斷產(chǎn)生時(shí)m賦l,;第二次中斷產(chǎn)生時(shí)n遞增。當(dāng)n等于1時(shí)(第二次中斷產(chǎn)生)進(jìn)入下面的具體判斷按鍵語(yǔ)句,。若持續(xù)按下鍵,,則第三次中斷產(chǎn)生~第三十一次中斷產(chǎn)生時(shí),程序不進(jìn)入具體的判斷按鍵語(yǔ)句過(guò)程(因這時(shí)n不等于1),。由于中斷每10ms產(chǎn)生一次,,這樣可實(shí)現(xiàn)每0.31秒(31x10=0.31秒)進(jìn)行一次加法或移位的操作,與人眼的視覺(jué)特性相吻合,。

{ //進(jìn)入具體判斷按鍵語(yǔ)句范圍*/

if(P1_0==0){set++;left=0;} /*如果P1.0等于0(即電路中的set鍵按下),,變量set遞增,變量left清0,。說(shuō)明:set,、left是為了判斷模式設(shè)定及左移而在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號(hào)字符型全局變量*/

if(set>=4)set=0; /*如果set大于等于4,則set清0,。說(shuō)明:set值只能在0~3間變化,,只有4種工作模式(走時(shí)及輸出控制模式、走時(shí)調(diào)整模式,、定時(shí)l調(diào)整模式,、定時(shí)2調(diào)整模式)*/

if(set==1)flag=0x55; /*在set等于1時(shí),向RAM區(qū)標(biāo)志變量flag寫(xiě)入55H,。說(shuō)明,,flag是在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號(hào)字符型全局變量,用作判斷RAM區(qū)是否受干擾的依據(jù)*/

if(P1_1==0)left++; //如果P1.1等于0(即電路中的left鍵按下),,變量left遞增

if(left>=4)left=0; /*如果left大于等于4,,則left清0。說(shuō)明:left值只能在0~3間 變化,,LED數(shù)碼管只有4位顯示*/

if(P1_2==0){up++; /*如果P1.2等于0(即電路中的up鍵按下),,進(jìn)入if(P1_2==0)語(yǔ)句,變量up遞增,。說(shuō)明:up是為了判斷數(shù)值增量而在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號(hào)字符型全局變量*/

switch(left) //隨即進(jìn)入switch(left)開(kāi)關(guān)語(yǔ)句

{ //switch(left)開(kāi)關(guān)語(yǔ)句開(kāi)始

case 0:{if(up>=10)up=0;}break; /*left值為0時(shí),,如果up大于等于10,則up清0。隨即退出,。說(shuō)明:電子鐘的個(gè)位可在0~9之間調(diào)整*/

case 1:{if(up>=6)up=0;}break; /*left值為1時(shí),,如果up大于等于6,則up清0,。隨即退出,。說(shuō)明:電子鐘的十位可在0~5之間調(diào)整*/

case 2:{if(up>=10)up=0;}break;  /*left值為2時(shí),如果up大于等于10,,則up清0,。隨即退出。說(shuō)明:電子鐘的百位可在0~9之間調(diào)整*/

case 3:{if(up>=3)up=0;}break; /*left值為3時(shí),,如果up大于等于3,,則up清0。隨即退出,。說(shuō)明:電子鐘的千位可在0~2之間調(diào)整*/

default:break; //:若left為其它值,,也退出

} // switch(left)開(kāi)關(guān)語(yǔ)句結(jié)束

} // if(P1_2==0)語(yǔ)句結(jié)束

if(P1_2==0){ /*如果P1.2等于0(即電路中的up鍵按下時(shí)),進(jìn)入if(P1_2==0)語(yǔ)句,,同時(shí)進(jìn)入switch(set)開(kāi)關(guān)語(yǔ)句*/

switch(set) // switch(set)開(kāi)關(guān)語(yǔ)句開(kāi)始

{case 0:break; //set值為0時(shí),,退出

case 1:x[left]=up;break; /*set值為1時(shí),將此時(shí)up值送入X數(shù)組的第len位,。隨即退出,。說(shuō)明:X數(shù)組是顯示走時(shí)緩存區(qū)*/

case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;  /*set值為2時(shí),將此時(shí)up值送入Y數(shù)組的第left位,。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),,則定時(shí)1啟停標(biāo)志位o_f1取反(啟動(dòng)/關(guān)閉)。隨即退出,。說(shuō)明:Y數(shù)組是定時(shí)l記憶緩存區(qū),。O_f1是為了判斷定時(shí)1啟動(dòng)/關(guān)閉而在整個(gè)程序開(kāi)始時(shí)定義的位標(biāo)志*/

case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break; /*set值為3時(shí),將此時(shí)up值送入Z數(shù)組的第left位,。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),,則定時(shí)2啟停標(biāo)志位o_f2取反(啟動(dòng)/關(guān)閉)。隨即退出,。說(shuō)明:Z數(shù)組是定時(shí)2記憶緩存區(qū),。O_f2是為了判斷定時(shí)2啟動(dòng)/關(guān)閉而在整個(gè)程序開(kāi)始時(shí)定義的位標(biāo)志*/

default:break;} //若set為其它值,也退出,。switch(set)開(kāi)關(guān)語(yǔ)句結(jié)束

}  //if(P1_2)語(yǔ)句結(jié)束

else { //else語(yǔ)句開(kāi)始

switch(set) /*又進(jìn)入switch(set)開(kāi)關(guān)語(yǔ)句,。說(shuō)明:上一個(gè)switch(set)開(kāi)關(guān)語(yǔ)句是將按鍵產(chǎn)生的up值送入X、Y,、Z數(shù)組存放,現(xiàn)在這個(gè)switch (set)開(kāi)關(guān)語(yǔ)句是調(diào)出X、Y,、Z數(shù)組內(nèi)容至變量up,,以便在原來(lái)的基礎(chǔ)上遞增。例如:原來(lái)的X[0]值為5,,則 在調(diào)整時(shí)個(gè)位LED數(shù)碼管顯示就從5開(kāi)始往上調(diào),,而不會(huì)產(chǎn)生從0或其它值開(kāi)始上調(diào)的情況,適合人的一般直覺(jué)*/

{case 0:break; //set值為0時(shí),,退出

case 1:up=x[left];break; /*set值為1時(shí),,將此時(shí)X數(shù)組的第left位值送入變量up。隨即退出*/

case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;  /*set值為2時(shí),,將此時(shí)Y數(shù)組的第left位值送入變量up,。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)1啟停標(biāo)志位o_f1取反(啟動(dòng)/關(guān)閉),。隨即退出*/

case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break; /*set值為3時(shí),,將此時(shí)Z數(shù)組的第left位值送入變量up。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),,則定時(shí)2啟停標(biāo)志位o_f2取反(啟動(dòng)/關(guān)閉),。隨即退出*/

default:break;} //若set為其它值,也退出

} } //switch(set)開(kāi)關(guān)語(yǔ)句結(jié)束,。else語(yǔ)句結(jié)束

}} //if(n==0)語(yǔ)句結(jié)束,。If(P1!=0xff)語(yǔ)句結(jié)束

P1=i;P3=j; /*本次定時(shí)中斷快結(jié)束時(shí),將暫存于I,j的當(dāng)時(shí)Pl口,、P3口狀態(tài)還原*/

} //定時(shí)1中斷服務(wù)子函數(shù)結(jié)束

     

4.3.4  完整代碼

#include <AT89x051.H> //器件配置文件

#define uchar unsigned char //變量類型的宏定義

#define uint unsigned int

uchar DATA_7SEG[10]={0xfc,0x60,0xda,0xf2,0x66,

                    0xb6,0xbe,0xe0,0xfe,0xf6};/*0~9的數(shù)碼管段碼*/

uchar x[4]; /* 存放走時(shí)的數(shù)組*/

uchar y[4]={0,0,0,0}; /* 存放定時(shí)1的數(shù)組*/

uchar z[4]={0,0,0,0}; /* 存放定時(shí)2的數(shù)組*/

uchar act[4]={0xfe,0xfd,0xfb,0xf7}; /*四位數(shù)碼管的位選碼*/

void delay(uint k); //延時(shí)子函數(shù)聲明

void conv(); //走時(shí)轉(zhuǎn)換子函數(shù)聲明

void p_out(); //判別定時(shí)到否子函數(shù)聲明

void p_out1(); //判別定時(shí)到否子函數(shù)1聲明

void t_adj(); //走時(shí)調(diào)整子函數(shù)聲明

uchar deda=0;    /*100mS計(jì)數(shù)單元清零*/

bit d_05s=0;            /*0.5秒標(biāo)志*/

bit o_f1=0;  /*定時(shí)1啟/停標(biāo)志*/

bit o_f2=0;  /*定時(shí)2啟/停標(biāo)志*/

uchar set=0; /*功能鍵標(biāo)志*/

uchar h=0;

uchar n=0;

uchar m=0;

uchar flag;

uchar left=0;

uchar sec=0;

uchar min=0;

uchar hour=0;

uchar min1=0;

uchar hour1=0;

uchar min2=0;

uchar hour2=0;

uchar up=0;

bit flag1=0;

bit flag2=0;

/*顯示走時(shí)*/

void time()

{

for(h=0;h<4;h++)

{P1=DATA_7SEG[x[h]]; //輸出數(shù)碼管的字形碼

P3=act[h];p_out(); //輸出數(shù)碼管的位碼,。判斷輸出

if(P3_2==0){if(d_05s==1)P1_0=1;else P1_0=0;} /* 百位數(shù)碼管點(diǎn)亮?xí)r,控制小數(shù)點(diǎn)

(秒點(diǎn))閃爍*/

delay(2);}  //每位數(shù)碼管點(diǎn)亮2ms

if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;}/* 若定時(shí)1啟動(dòng),,

點(diǎn)亮十位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數(shù)碼管

小數(shù)點(diǎn)不亮*/

delay(2);

if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /* 若定時(shí)2啟動(dòng),,

點(diǎn)亮個(gè)位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個(gè)位數(shù)碼管

小數(shù)點(diǎn)不亮*/

delay(2);

}

/*定時(shí)器T0初始化*/

void init_timer0()

{

TMOD=0x11;

TH0=-(50235/256);

TL0=-(50235%256);

IE=0x8a;

TR0=1;

}

/*定時(shí)器T1初始化*/

void init_timer1()

{

TH1=-(5000/256);

TL1=-(5000%256);

}

/*延時(shí)k*1ms子函數(shù)*/

void delay(uint k)

{

uint i,j;

for(i=0;i<k;i++){

for(j=0;j<60;j++)

{;}}

}

/*100mS定時(shí)中斷服務(wù)子函數(shù)*/

void zd0(void) interrupt 1

{

TH0=-(50235/256); //重裝100ms定時(shí)初值

TL0=-(50235%256);

deda++; //100ms計(jì)時(shí)單元遞增

}

/*10mS定時(shí)中斷服務(wù)子函數(shù)*/

void zd1(void) interrupt 3

{uchar i,j;i=P1;j=P3;

TH1=-(5000/256);

TL1=-(5000%256);

if(m==1)n++;

if(n>=30){n=0;m=0;}

P3_7=0;

P1=0xff;

if(P1!=0xff)

{

if(n==0)m=1;

{if(n==1)

{

if(P1_0==0){set++;left=0;}

if(set>=4)set=0;

if(set==1)flag=0x55;

if(P1_1==0)left++;

if(left>=4)left=0;

if(P1_2==0){up++;

switch(left)

{

case 0:{if(up>=10)up=0;}break;

case 1:{if(up>=6)up=0;}break;

case 2:{if(up>=10)up=0;}break;

case 3:{if(up>=3)up=0;}break;

default:break;

}

}

if(P1_2==0){

switch(set)

{case 0:break;

case 1:x[left]=up;break;

case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;

case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break;

default:break;}

}

else {

switch(set)

{case 0:break;

case 1:up=x[left];break;

case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;

case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break;

default:break;}

}}

}}

P1=i;P3=j;

}

/*顯示調(diào)整走時(shí)*/

void t_adj()

{p_out1();

for(h=0;h<4;h++) //四位數(shù)碼管每位點(diǎn)亮3ms

{if(h==left)P1=0x00;

else {P1=DATA_7SEG[x[h]];

P3=act[h];p_out();

delay(3);}}

P1=DATA_7SEG[up];P3=act[left];

hour=x[3]*10+x[2];min=x[1]*10+x[0];

p_out();

delay(12); //需調(diào)整的數(shù)碼管點(diǎn)亮12ms

if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;} /*若定時(shí)1啟動(dòng),

點(diǎn)亮十位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數(shù)碼管

小數(shù)點(diǎn)不亮*/

delay(12); //需調(diào)整的數(shù)碼管點(diǎn)亮12ms

if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /*若定時(shí)2啟動(dòng),,

點(diǎn)亮個(gè)位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個(gè)位數(shù)碼管

小數(shù)點(diǎn)不亮*/

delay(12); //需調(diào)整的數(shù)碼管點(diǎn)亮12ms

}

/*顯示調(diào)整定時(shí)1*/

void t1_adj()

{p_out1();

for(h=0;h<4;h++) //四位數(shù)碼管每位點(diǎn)亮3ms

{if(h==left)P1=0x00;

else {P1=DATA_7SEG[y[h]];

P3=act[h];p_out();

delay(3);}}

P1=DATA_7SEG[up];P3=act[left]; //需調(diào)整的數(shù)碼管點(diǎn)亮18ms

hour1=y[3]*10+y[2];min1=y[1]*10+y[0];

p_out();

delay(18);

if(o_f1==1){P1=0x01;P3_3=0;P3_2=1;P3_1=0;P3_0=1;} /*若定時(shí)1啟動(dòng),,

點(diǎn)亮十位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否則十位數(shù)碼管

小數(shù)點(diǎn)不亮*/

p_out();

delay(18); //需調(diào)整的數(shù)碼管點(diǎn)亮18ms

}

/*顯示調(diào)整定時(shí)2*/

void t2_adj()

{p_out1();

for(h=0;h<4;h++) //四位數(shù)碼管每位點(diǎn)亮3ms

{if(h==left)P1=0x00;

else {P1=DATA_7SEG[z[h]]; //需調(diào)整的數(shù)碼管點(diǎn)亮18ms

P3=act[h];p_out();

delay(3);}}

P1=DATA_7SEG[up];P3=act[left];

hour2=z[3]*10+z[2];min2=z[1]*10+z[0];

p_out();

delay(18);

if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定時(shí)2啟動(dòng),

點(diǎn)亮個(gè)位數(shù)碼管小數(shù)點(diǎn)*/

else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否則個(gè)位數(shù)碼管

小數(shù)點(diǎn)不亮*/

p_out();

delay(18); //需調(diào)整的數(shù)碼管點(diǎn)亮18ms

}

/*時(shí),、分,、秒計(jì)時(shí)單元轉(zhuǎn)換*/

void conv()

{

if(deda<=5)d_05s=0; //每500ms,秒點(diǎn)取反

else d_05s=1;

if(deda>=10){sec++;deda=0;} //每1000ms,,秒單元遞增

if(sec>=60){min++;sec=0;} //每60s,,分單元遞增

if(min>=60){hour++;min=0;} //每60m,時(shí)單元遞增

if(hour>=24){hour=0;} //每24h,,時(shí)單元清零

}

/*判別定時(shí)到否子函數(shù)*/

void p_out()

{

if(o_f1==1) //若定時(shí)1啟動(dòng)

{if(hour==hour1) //定時(shí)1時(shí)間到

{if(min==min1)

{flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}} //繼電器輸出標(biāo)志置1,,蜂鳴器間斷鳴響

if(flag1==1) P3_5=0; //若輸出標(biāo)志為1,,繼電器吸合

if(o_f2==1) //若定時(shí)2啟動(dòng)

{if(hour==hour2) //定時(shí)2時(shí)間到

{if(min==min2)

{flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //繼電器輸出標(biāo)志置0,蜂鳴器間斷鳴響

if(flag1==0) P3_5=1; //若輸出標(biāo)志為0,,繼電器釋放

}

/*判別定時(shí)到否子函數(shù)1*/

void p_out1()

{

if(o_f1==1) //若定時(shí)1啟動(dòng)

{if(hour==hour1) //定時(shí)1時(shí)間到

{if(min==min1)

{flag1=1;}}} //繼電器輸出標(biāo)志置1

if(flag1==1) P3_5=0; //若輸出標(biāo)志為1,,繼電器吸合

if(o_f2==1) //若定時(shí)2啟動(dòng)

{if(hour==hour2) //定時(shí)2時(shí)間到

{if(min==min2)

{flag1=0;}}} //繼電器輸出標(biāo)志置0

if(flag1==0) P3_5=1; //若輸出標(biāo)志為0,繼電器釋放

}

/*主函數(shù)*/

void main()

{

init_timer0();            /*定時(shí)器T0初始化*/

init_timer1();            /*定時(shí)器T1初始化*/

while(1)

{

/*將顯示緩沖數(shù)組內(nèi)容移到時(shí),、分計(jì)時(shí)單元*/

hour=x[3]*10+x[2];min=x[1]*10+x[0];

hour1=y[3]*10+y[2];min1=y[1]*10+y[0];

hour2=z[3]*10+z[2];min2=z[1]*10+z[0];

conv(); /*時(shí),、分、秒及100mS單元轉(zhuǎn)換*/

/*將轉(zhuǎn)換后的時(shí),、分計(jì)時(shí)單元內(nèi)容移到顯示緩沖數(shù)組*/

x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10;

y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10;

z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10;

switch(set)

{

case 0:time();break;/*顯示走時(shí)*/

case 1:t_adj();break;/*顯示調(diào)整走時(shí)*/

case 2:t1_adj();break;/*顯示調(diào)整定時(shí)1*/

case 3:t2_adj();break;/*顯示調(diào)整定時(shí)2*/

default:break;

}

if(flag!=0x55) /*判斷RAM受干擾標(biāo)志,,若受干擾,

則顯示器閃爍告警*/

{uchar i;P3_4=1;P3_5=1;

for(i=0;i<100;i++) /*點(diǎn)亮顯示器200mS*/

{

P1=DATA_7SEG[x[3]];P3=0xf7;delay(1);

P1=DATA_7SEG[x[2]];P3=0xfb;delay(1);

P1=DATA_7SEG[x[1]];P3=0xfd;delay(1);

P1=DATA_7SEG[x[0]];P3=0xfe;delay(1);

}

P1=0xff;P3=0xff;delay(400); /*熄滅顯示器200mS*/

P3_7=0;

/*如有鍵按下達(dá)0.5S則退出閃爍狀態(tài)同時(shí)掉電標(biāo)志置55H,。*/

if(P1!=0xff){

delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0;

}P3_7=1;

}

else TR1=1;/*啟動(dòng)定時(shí)器1*/

}}

4.4  調(diào)試應(yīng)用

4.4.1  功能調(diào)試

“工業(yè)生產(chǎn)節(jié)能時(shí)控器”由于元器件不多,,一般不需作太多調(diào)整即可使用,但應(yīng)確保元器件質(zhì)量及焊接質(zhì)量,。通電時(shí)測(cè)工作電流,,在繼電器K釋放、蜂鳴器不響,、LED數(shù)碼管顯示器點(diǎn)亮的情況下,,整機(jī)電流約為25mA。太大或太小都不正常,。

輸入設(shè)定過(guò)程:

1. 通電后四位LED數(shù)碼管顯示器開(kāi)始閃爍,,顯示0000。原因是初次上電時(shí),,RAM標(biāo)志flag為一隨機(jī)數(shù),。按下set鍵1秒后,數(shù)字變?yōu)榉€(wěn)定顯示,,說(shuō)明flag內(nèi)已置入55H,。

2. 點(diǎn)按set鍵后,個(gè)位顯示最亮而其余三位數(shù)碼管顯示較暗(小數(shù)點(diǎn)均不亮),,說(shuō)明可進(jìn)行校時(shí),,個(gè)位最亮說(shuō)明此時(shí)可對(duì)個(gè)位進(jìn)行調(diào)整,按下up鍵即可調(diào)整個(gè)位數(shù)字,;點(diǎn)按left鍵,,變成十位顯示最亮而其余三位數(shù)碼管顯示較暗,說(shuō)明可對(duì)十位進(jìn)行調(diào)整,,按下up鍵即可調(diào)整十位數(shù)字,;……同理,我們可對(duì)百位和個(gè)位進(jìn)行調(diào)整,。

3. 點(diǎn)按set鍵后,,個(gè)位顯示最亮而其余三位數(shù)碼管顯示較暗(千位小數(shù)點(diǎn)點(diǎn)亮),,說(shuō)明可進(jìn)行定時(shí)1調(diào)整,個(gè)位最亮說(shuō)明此時(shí)可對(duì)個(gè)位進(jìn)行調(diào)整,,按下up鍵即可調(diào)整個(gè)位數(shù)字,;點(diǎn)按left鍵,變成十位顯示最亮而其余三位數(shù)碼管顯示較暗,,說(shuō)明可對(duì)十位進(jìn)行調(diào)整,按下up鍵即可調(diào)整十位數(shù)字,;……同理,,我們可對(duì)百位和個(gè)位進(jìn)行調(diào)整。定時(shí)1的時(shí)間調(diào)整完畢后,,若點(diǎn)按on/off鍵,,則十位數(shù)碼管的小數(shù)點(diǎn)發(fā)亮,說(shuō)明定時(shí)1啟動(dòng),,這樣時(shí)間走到定時(shí)1設(shè)定值時(shí),,繼電器會(huì)吸合,同時(shí)蜂鳴器鳴響1分鐘,。再點(diǎn)按on/off鍵,,則十位數(shù)碼管的小數(shù)點(diǎn)熄滅,說(shuō)明定時(shí)1撤消,。

4. 點(diǎn)按set鍵后,,個(gè)位顯示最亮而其余三位數(shù)碼管顯示較暗(百位小數(shù)點(diǎn)點(diǎn)亮),說(shuō)明可進(jìn)行定時(shí)2調(diào)整,,個(gè)位最亮說(shuō)明此時(shí)可對(duì)個(gè)位進(jìn)行調(diào)整,,按下up鍵即可調(diào)整個(gè)位數(shù)字;點(diǎn)按left鍵,,變成十位顯示最亮而其余三位數(shù)碼管顯示較暗,,說(shuō)明可對(duì)十位進(jìn)行調(diào)整,按下up鍵即可調(diào)整十位數(shù)字,;……同理,,我們可對(duì)百位和個(gè)位進(jìn)行調(diào)整。定時(shí)2的時(shí)間調(diào)整完畢后,,若點(diǎn)按on/off鍵,,則個(gè)位數(shù)碼管的小數(shù)點(diǎn)發(fā)亮,說(shuō)明定時(shí)2啟動(dòng),,這樣時(shí)間走到定時(shí)2設(shè)定值時(shí),,繼電器會(huì)釋放,同時(shí)蜂鳴器鳴響1分鐘,。再點(diǎn)按on/off鍵,,則個(gè)位數(shù)碼管的小數(shù)點(diǎn)熄滅,,說(shuō)明定時(shí)2撤消。

5. 點(diǎn)按set鍵后,,LED數(shù)碼管顯示器變?yōu)榉€(wěn)定顯示,,進(jìn)入正常計(jì)時(shí)工作狀態(tài)。

4.4.2  使用及維護(hù)

本機(jī)嵌入到生產(chǎn)設(shè)備中時(shí),,應(yīng)安裝固定好,,同時(shí)做好防潮防油等工作。家庭使用時(shí),,應(yīng)選配一個(gè)合適美觀的外殼,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多