- 相關推薦
四路多段定時開關(一)
畢業(yè)設計(論文)任務書
專業(yè)(班): 02樓宇2 姓名: 羅艷華
課題名稱、主要內容和基本要求
課題名稱:四路多段定時開關
主要內容:
實現四路定時開關控制,能在24小時內任意時間通斷,每路24小時內最多可執(zhí)行六次開與關,并可控制輸出功率,單路控制功率不小于800W,掉電后數據不丟失。
基本要求:
完成Protel電路設計、單片機硬件系統(tǒng)設計、單片機程序設計、
電路焊接與調試全過程。制作出實物并能演示運行。
課題名稱:四路多段定時開關
進度安排
周次 工作內容 執(zhí)行情況
6、7 學習電子系統(tǒng)的設計過程,明確課題內容,整體構思,查閱資料
8 復習單片機及相關知識、PROTEL使用
9、10 設計、繪制電路、采購元器件、制版
11 硬件組裝
12、13 程序設計與調試
14、15 撰寫論文
摘要
單片計算機即單片微型計算機。(Single-Chip Microcomputer),是集CPU,RAM,ROM,定時,計數和多種接接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產品和工業(yè)自動化上。而C語言已成為當前舉世公認的高效簡潔又貼近硬件的編程語言之一。C語言現已成為專業(yè)化的單片機上的實用高級語言。而且由于開發(fā)速度、軟件質量結構化、可維護性方面的原因,使C語言漸漸有取代匯編的趨勢。這次畢業(yè)設計通過對C語言對單片機進行編程的學習應用,從而達到學習、設計、開發(fā)軟、硬件的能力。
前言
本文通過用對一個能實現定時,時鐘,日歷顯示功能的時間系統(tǒng)的設計學習,文章主要介紹了時鐘芯片DS12C887。系統(tǒng)由AT89C52、七段LED數碼顯示器、按鍵、二極管、DS12C887、發(fā)光二極管等部份構成,能實現時鐘日歷的功能:能進行年、月、日、時、分、秒的顯示、實現四路開關定時輸出、時間的調整等功能。文章后附有硬件設備請單。由于本人水平水限,難免有疏落不足之處,敬請老師和同學能給與批評糾正。
目 錄
任務書 1
摘要 4
前言 4
第一章、硬件設計 7
1-1 硬件設計框圖 7
1-1-1鍵盤部分 7
1-1-2顯示及時鐘芯片部分 8
1-1-3繼電器輸出部分 9
1-2 系統(tǒng)硬件詳細設計圖 9
1-3 各芯片介紹 10
1-3-1 AT89C52單片機應用設計 10
1-2-2 DS12C887時鐘芯片 11
1-2-3 74C922N 17
1-2-4 SN74LS04N 18
1-2-5 ULN2003A 18
第二章、系統(tǒng)軟件設計 20
2-1 KEIL51軟件的應用 20
2-2 C語言編程單片機應用 21
2-3 程序 22
2-3-1 程序中地址分配 22
2-3-2 主程序 24
2-3-3 顯示程序 25
2-3-4 讀取鍵盤并換算成鍵值 26
2-3-5 外部中斷1 27
附 錄
結 論
參考文獻
第一章、硬件部分
1-1 硬件設計框圖
1-1-1鍵盤部分
圖注:鍵盤部分接線示意圖
如圖所示鍵盤與74C922芯片相連接,74C922為一鍵盤編碼器,其中第一路(S2-S5)鍵盤與74C922中的X1相連接,第二路鍵盤(S6-S9)與74C922中的X2相連接,第三路鍵盤(S10-S13)與X3相連接,第四路鍵盤(S14-S17)與X4相連接。而74C922中的Y1則與(S2、S6、S10、S14)相連接,Y2與(S3、S7、S11、S15)相連接,Y3與(S4、S8、S12、S16)相連接,Y4與(S5、S9、S13、S17)相連接。鍵盤產生的中斷與單片機中的P3.3腳相接,作為中斷1(INT1)。
電路板中共用到十七個鍵盤,其中有十個為數字鍵,和六個功能鍵,左下角中的S1則是起到個復位作用。
1-1-2顯示及時鐘芯片部分
圖注:數碼顯示及DS12C887部分接線圖
這部分的主要功能就是通過單片機讀取時鐘芯片中的時間,再給七段數碼顯示器顯示出來。
首先講一下時鐘芯片與89C51的接線,單片機89C52中P3.6(WR)腳與DS12C887時鐘芯片的15腳WR相接,單片機對時鐘芯片進行寫入數據,89C52的P3.7腳(RD)與DS12C887的17腳RD相接,單片機讀取時鐘芯片,DS12C887的AD0~AD7分別為89C52的P1.0~P1.7腳相連。DS12C887的IRQ腳時鐘更新中斷腳與P3.2相接,做為中斷0(INT0);DS12887的第14腳(AS)與89C52的30腳(ALE/PROG)相連,DS12887的24、18腳接VCC正電源,1、12并上13腳接地。89C52的20腳接地。
接著就是七段數碼顯示器的接線了,顯示器的a、b、c、d、e、f分別接89C52的P2.0、P2.1、P2.2、P2.3、P2.4、P2.5、P2.6相接,顯示器的第3、8腳接SN7404N(反相器)再分別與P1.0、P1.1、P1.2、P1.3相接,第二個顯示器中的dp位接SN7404(反相器)后再與DS12887的SQW位相接,SQW位輸出2HZ的頻率使DP點亮。
1-1-3繼電器輸出部分
圖注:繼電器輸出部分接線圖
89C52中P3.0與ULN2003A的INT1端子接,輸出OUT1接繼電器K4相接。由此對應P3.1接INT2,輸出OUT2接K3,P3.2接INT3,輸出K2,P3.3接INT3,輸出OUT3接K1,再如圖P2.7接INT7,輸出OUT7與蜂鳴器相接。在制作電路板的過程中忘掉一個上拉電阻,位置是P2.7與正電源相接。
1-2 系統(tǒng)硬件詳細設計圖
實際焊接出的板子跟設計中的有些不一樣,最不一樣的還是鍵盤的排列,原來設計是4X4矩陣形排列,由于焊接的種種原因,于是改成了兩行八縱的排法,板子是通過我們利用Protel軟件進行電路的設計,并不斷的去了解硬件的功能及咨詢老師,確定基本可能完全操作后,再進行焊接。
注:焊接部份為自己焊做,但PBC板是拿出去外面制作。下圖為實際硬件焊接圖:
1-3 各芯片介紹
在設計中用到了許多芯片有以前接觸過的也有聽都沒聽過的,系統(tǒng)由AT89C52、SN74LS04N反相器、鍵盤解碼器74C922芯片、ULN2003A芯片、七段LED數碼顯示器、按鍵、二極管、DS12C887及發(fā)光二極管等組成。在本文中主要介紹幾種芯片AT89C52、SN74LS04N、74C922及DS12C887和ULN2003A芯片。
1-3-1 AT89C52單片機應用設計
AT89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,功能強大的AT89C52單片機可為您提供許多較復雜系統(tǒng)控制應用場合。 AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,3個16位可編程定時計數器,2個全雙工串行通信口,2個讀寫口線,AT89C52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。
主要功能特性:
· 兼容MCS51指令系統(tǒng) · 8k可反復擦寫(>1000次)Flash ROM
· 32個雙向I/O口 · 256x8bit內部RAM
· 3個16位可編程定時/計數器中斷 · 時鐘頻率0-24MHz
· 2個串行中斷 · 可編程UART串行通道
· 2個外部中斷源 · 共6個中斷源
· 2個讀寫中斷口線 · 3級加密位
· 低功耗空閑和掉電模式 · 軟件設置睡眠和喚醒功能
1-3-2 DS12C887時鐘芯片
DS12C887的特性:DS12C887實時時鐘芯片功能豐富,可以用來直接代替IBM PC上的時鐘日歷芯片DS12C887,同時,它的管腳也和MC146818B、DS12887相兼容。
由于DS12C887能夠自動產生世紀、年、月、日、時、分、秒等時間信息,其內部又增加了世紀寄存器,從而利用硬件電路解決子“千年”問題; DS12C887中自帶有鋰電池,外部掉電時,其內部時間信息還能夠保持10年之久;對于一天內的時間記錄,有12小時制和24小時制兩種模式。在12小時制模式中,用AM和PM區(qū)分上午和下午;時間的表示方法也有兩種,一種用二進制數表示,一種是用BCD碼表示;DS12C887中帶有128字節(jié) RAM,其中有11字節(jié)RAM用來存儲時間信息,4字節(jié)RAM用來存儲DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM使用戶使用;此外用戶還可對DS12C887進行編程以實現多種方波輸出,并可對其內部的三路中斷通過軟件進行屏蔽。
DS12C887的引腳功能:DS12C887的引腳排列如圖1所示,各管腳的功能說明如下:
GND、 VCC:直流電源,其中VCC接+5V輸入,GND接地,當VCC輸入為+5V時,用戶可以訪問DS12C887內RAM中的數據,并可對其進行讀、寫操作;當VCC的輸入小于+4.25V時,禁止用戶對內部RAM進行讀、寫操作,此時用戶不能正確獲取芯片內的時間信息;當VCC的輸入小于+3V時, DS12C887會自動將電源發(fā)換到內部自帶的鋰電池上,以保證內部的電路能夠正常工作。
MOT:模式選擇腳,DA12C887有兩種工作模式,即Motorola模式和Intel模式,當MOT接VCC時,選用的工作模式是Motorola模式,當MOT接GND時,選用的是Intel模式。本文主要討論Intel模式。
SQW:方波輸出腳,當供電電壓VCC大于4.25V時,SQW腳可進行方波輸出,此時用戶可以通過對控制寄存器編程來得到13種方波信號的輸出。
AD0~AD7:復用地址數據總線,該總線采用時分復用技術,在總線周期的前半部分,出現在AD0~AD7上的是地址信息,可用以選通DS12C887內的RAM,總線周期的后半部分出現在AD0~AD7上的數據信息。
AS:地址選通輸入腳,在進行讀寫操作時,AS的上升沿將AD0~AD7上出現的地址信息鎖存到DS12C887上,而下一個下降沿清除AD0~AD7上的地址信息,不論是否有效,DS12C887都將執(zhí)行該操作。
DS/RD:數據選擇或讀輸入腳,該引腳有兩種工作模式,當MOT接VCC時,選用Motorola工作模式,在這種工作模式中,每個總線周期的后一部分的DS為高電平,被稱為數據選通。在讀操作中,DS的上升沿使DS12C887將內部數據送往總線AD0~AD7上,以供外部讀取。在寫操作中,DS的下降沿將使總線 AD0~AD7上的數據鎖存在DS12C887中;當MOT接GND時,選用Intel工作模式,在該模式中,該引腳是讀允許輸入腳,即Read Enable。
R/W:讀/寫輸入端,該管腳也有2種工作模式,當MOT接VCC時,R/W工作在Motorola模式。此時,該引腳的作用是區(qū)分進行的是讀操作還是寫操作,當R/W為高電平時為讀操作,R/W為低電平時為寫操作;當MOT接GND時,該腳工作在Intle模式,此時該作為寫允許輸入,即Write Enable。
CS:片選輸入,低電平有效。
IRQ:中斷請求輸入,低電平有效,該腳有效對DS12C887內的時鐘、日歷和RAM中的內容沒有任何影響,僅對內部的控制寄存器有影響,在典型的應用中,RESET可以直接接VCC,這樣可以保證DS12C887在掉電時,其內部控制寄存器不受影響。
DS12C887的地址分布
附圖1是DS12877的地址分布圖。所有的地址包括114字節(jié)通用RAM、10字節(jié)用于記錄時間、日歷、鬧鐘和RAM以及4字節(jié)的控制、狀態(tài)RAM。所有字節(jié)都可以在除以下的情況下直接讀寫。
時間、日歷和鬧鐘的數據格式
地址 功能 十進制范圍 范 圍
二進制數據模式 BCD數據模式
0 秒 0-59 00-3B 00-59
1 秒鬧鐘 0-59 00-3B 00-59
2 分鐘 0-59 00-3B 00-59
3 分鐘鬧鐘 0-59 00-3B 00-59
4 小時(12進制) 1-12 01-0CAM,81-8CPM 01-12AM,81-92PM
小時(24進制) 0-23 00-17 00-23
5 時鬧鐘(12時制) 1-12 01-0CAM,81-8CPM 01-12AM,81-92PM
時鬧鐘(24時制) 0-23 00-17 00-23
6 星期(星期天=1) 1-7 00-07 00-07
7 日期 1-31 01-0F 1-31
8 月份 1-12 01-0C 1-12
9 年 0-99 00-63 00-99
DS12887有四個控制寄存器,它們可以在任何時候讀寫。
寄存器A
最高位 最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0
UIP更新(UIP)位用來標志芯片是否即將進行更新。當UIP位為1時,更新即將開始;當它為0時,表示在至少244μs內芯片不會更新,此時,時鐘、日歷和鬧鐘信息可以通過讀寫相應的字節(jié)獲得和設置。UIP位為只讀位并且不受復位信號(RESET)的影響。通過把寄存器B中的SET位設置為1可以禁止更新并將UIP位清0。
DV0,DV1,DV2
這3位是用來開關晶體振蕩器和復位分頻器。當[DV0 DV1 DV2]=[010]時,晶體振蕩器開啟并且保持時鐘運行;當[DV0 DV1 DV2]=[11X]時,晶體振蕩器開啟,但分頻保持復位狀態(tài)。
RS3,RS2,RS1,RS0作用:1.設置周期中斷允許位(PIE);2.設置方波輸出允許位(SQWE);3.兩位同時設置為有效并且設置頻率;4.全部禁止。周期性中斷率和方波中斷頻率表列出了可通過RS寄存器選擇的周期中斷的頻率和方波的頻率。這四個可讀寫的位不受復位信號的影響。
最高位 最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
SET PIE AIE UIE SQWE DM 24/12 DSE
寄存器B
SET當SET=0,芯片更新正常進行;當SET=1,芯片更新被禁止。SET位可讀寫,并不會受復位信號的影響。
PIE當PIE=0,禁止周期中斷輸出到IRQ;當PIE=1,允許周期中斷輸出到IRQ。
AIE當AIE=0,禁止鬧鐘中斷輸出到IRQ;當AIE=1,允許鬧鐘中斷輸出到IRQ。
UIE當UIE=0,禁止更新結束中斷輸出到IRQ;當UIE=1,允許更新結束中斷輸出到IRQ。此位在復位或設置SET為高時清0.
SQWE當SQWE=0,SQW腳為低;當SQWE=1,SQW輸出設定頻率的方波。
DMDM=0,BCDDM=1,二進制,此位不受復位信號影響。
24/12此位為1,24時制;為0,12小時制
DSE夏令時允許標志。在四月的第一個星期日的1∶59∶59AM,時鐘調到3∶00∶00AM;在十月的最后一個星期日的1∶59∶59AM,時鐘調到1∶00∶00AM。
寄存器C
最高位 最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
IRQF PF AF UF 0 0 0 0
IRQF當有以下情況中的一種或幾種發(fā)生時,中斷請求標志位(IRQF)置高;PF=PIE=1AF=AIE=1UF=UIE=1IRQF=PF·PIE+AF·AIE+UF·UIEIRQF-且為高IRQ腳輸出低。所有標志位在讀寄存器C或復位后清0。
PF 周期中斷標志。AF 鬧鐘中斷標志。UF 更新中斷標志。
BIT 0 THROUGH BIT3第0位到第3位無用,不能寫入,只讀且讀出的值恒為0。
寄存器D
最高位 最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
VRT 0 0 0 0 0 0 0
VRT當VRT=0時表示內置電池能量耗盡,此時RAM中的數據的正確性就不能保證了。
BIT6 THROUGH BIT0第0位到第6位無用,只讀,且讀出的值恒為0。
2-2-3 74C922
我們采用專用鍵盤管理芯片74C922。74C922為CMOS工藝技術制造,工作電壓為3—15V,“二鍵鎖定”功能,編碼輸出為三芯輸出,可直接與微處理器數據線相連,內部振蕩器完成4×4矩形鍵盤掃描,有 按鍵時,DA變高,通過非門接到AT89C51的INT1口,并且設INT0為邊沿觸發(fā)方式,當DA變高時,經過非門變?yōu)榈碗娖教儺a生INT1外部中斷,通知AT89C51從數據總線讀鍵值,判斷鍵值從而完成相應的散轉程序功能。
系統(tǒng)中共用了16個鍵盤按鈕形狀,當時圖紙設計時以矩陣型4X4行之安排,后由于板的大小和實際等問題,便以每行八個,排做兩行處理。
2-2-4 SN74LS04N
如下圖所示,SN74LS04N的引腳如下,7腳接地,14腳接VCC正電源,并且形象的體現出了SN74LS04N的作用,SN74LS04N作用就是反相器,SN74LS04N內部形成了六個非門,分別是1與2、3與4、5與6、8與9、10與11、12與13構成六個非門,起到一個反相的作用。
2-2-5 ULN2003A
ULN2003A是內含7個達林頓管的驅動芯片,輸入電壓與TTL電平兼容。每個上達林頓管的集電極可吸收最大500mA的電流,耐壓30V,因此可以用來驅動四相步進電機。ULN2003A電路具有以下特點: ●電流增益高(大于1000); ●帶負載能力強(輸出電流大于500mA); ●溫度范圍寬(-40~85℃); ●工作電壓高(大于50V)。 ULN2003電路主要用于如下領域: ●伺服電機; ●步進電機; ●電磁閥; ●可控照明燈。
第二章、系統(tǒng)軟件設計
2-1 KEIL51軟件的應用
因此蘇老師購見意我用C語言進行編程。還好時間尚早,我開始利用空閑時間進行C語言對單片機編程的學習。
首先我對KEIL51軟件進行了學習,軟件是蘇老師發(fā)給我的,在平日的時間里就自己捉摸著怎么用,在周日的時間我就回學校找蘇老師問一周累積的問題。KEIL51跟MEDWIN不同的是:KEIL51需要新建項目(new project),之后選擇單片機,這里難住了我好久,怎么選擇單片機的型號也沒選對,后來學校問老師應選擇Ateml的AT89C51。這個就新建好了一個項目了。
新建一個程序文件(File-New),建好后保存新建的程序,如果是用C語言進行編程的話擴展名應為(.c),如果是用匯編語言進行編程的話擴展名應為(.a或.asm),建好保存該文件,然后還需要將程序加到項目中,如圖所示右鍵點擊Source Group1文件夾彈出菜單,選擇"Add File to Group 'Source Group 1'"就會彈出文件窗口,選擇剛剛保存的文件,按ADD按鈕,關閉文件窗,程序文件已加到項目中了。
用KEIL51進得軟件調試,在硬件沒焊好的情況下,我都是直接用KEIL51進行仿真調試。圖片由左到右分別編譯單個文件、是編譯當前項目及重新編譯。此鍵為停止編譯按鈕,這個鍵只有在點擊了前三個中的任一個后才會生效。這就是開啟\關閉調試模式的按鈕,它也存在于菜單Debug-Start\Stop Debug Session中。為運行按鈕,當程序處于停止狀態(tài)時才有效。為模擬芯片的復位,程序回到最開頭處執(zhí)行。為停止按鈕,程序處于運行狀態(tài)時才有效。
后來硬件板焊好后就需要芯片燒寫成HEX文件。
2-2 C語言編程單片機的學習
設計中所用到的運算符
關系和邏輯運算符 含義
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
&& 與
‖ 或
! 非
相對的優(yōu)先級:最高為!運算再進行>=、<=運算,接著運行==、!=運算,后&&運算,最后執(zhí)行‖運算。
運算符 作用
+ 加法
- 減法
* 乘法
/ 除法
++ 自加
-- 自減
% 模運算(取整數除法的余數)
主要就介紹一些我所用到的語句。
在程序設計中,主要利用了C語言的if、switch及for語句。其中if、switch為條件語句,for是一個循環(huán)控制語句,在程序中更常用到的語句是break語句,在switch語句中,在case子句執(zhí)行完畢后,通過break語句使控制立即跳出switch語句。在循環(huán)語句中,break語句的作用是在循環(huán)體中測試到應立即結束循環(huán)時,使控制立即跳出循環(huán)結構,轉而執(zhí)行循環(huán)語句后的語句。
2-3 程序
2-3-1 程序中地址分配
程序設計中的地址分布,由于DS12C887中前14個字節(jié)是10字節(jié)用于記錄時間、日歷、鬧鐘和RAM以及4字節(jié)的控制、狀態(tài)RAM。113字節(jié)通用RAM使用戶使用,我先計算了我的地址分布,從第14個字節(jié)開始我用做存儲每路的開關次數,每一路可設定每次開關的時間(小時、分鐘、時長及功率),時長是以分鐘為單位,最高可設置為99分鐘。每一路開關每一次均要用四個字節(jié),通過計算四路開關能在24小時內任意時間通斷,每路24小時內最多可執(zhí)行六次開與關,下表為我設定計算我在編程時的地址分布表。
表:DS12C887地址分配情況
路數 次數 第一次 第二次 第三次 第四次 第五次 第六次
第一路 14 15-18 19-22 23-26 27-30 31-34 35-38
第二路 39 40-43 44-47 48-51 52-55 56-59 60-63
第三路 64 65-68 69-72 73-76 77-80 81-84 85-88
第四路 89 90-93 94-97 98-101 102-105 106-109 110-113
例如程序:
for(i=0;i<4;i++);i為判斷電路設計中的第幾路,
{
switch(i)
{
case(0):
out0=0;
break;
……
}
for(j=0;j<XBYTE[14+25*i];j++);j為每路開關的開關次數。
{
if(((XBYTE[15+j*4+25*i]<hour)||((XBYTE[15+j*4+25*i]==hour)&&(XBYTE[16+j*4+25*i]<=min)))
&&(((XBYTE[15+j*4+25*i]+(XBYTE[17+j*4+25*i])/60)>hour)||(((XBYTE[15+j*4+25*i]+(XBYTE[17+j*4+25*i])/60)==hour)&&((XBYTE[16+j*4+25*i]+(XBYTE[17+j*4+25*i])%60)>min))))
{
switch(i)
{
case(0):
out0=XBYTE[18+4*j];
break;
……
}
舉例在程序中設計第一路開關開關一次,即i=0,設定的開關次數(一次)存放在外部RAM(DS12C887)第14個字節(jié)中,XBYTE[14]=1,j=0時循環(huán)一次,,如果讀取到第15個字節(jié)(小時)中數值小于或等于系統(tǒng)時間小時(hour)&&(與運算符)第16個字節(jié)(分鐘)中數值小于或等于系統(tǒng)時間分鐘(min)&&第15個字節(jié)數值+第17個字節(jié)(時長)數值/60大于等于系統(tǒng)時間小時(hour)&&第16個字節(jié)數值+第17個字節(jié)數值%60大于系統(tǒng)時間分鐘(min),判斷條件如果為真的情況下,輸出第18個字節(jié)中設定的功率。
由于每路六次開關共用25個字節(jié),因此循環(huán)語句用判斷每路for (j=0; j< XBYTE[14+25*i];j++),每一路從14字節(jié)開始,后循環(huán)語句即用14+25*路數。
2-3-2主程序(main)
主程序中主要設置了CPU的工作模式及中斷,T0為延時16ms;T1為顯示時間設置為0.512ms;T2設置為延時100ms;設置芯片的工作模式:給外部RAM中A寄存器中寫入0x20內容(XBYTE[0x0a]=0x20),即是將A寄存器中DV1位置1”,查看上述所講DS12C887內容,[DV0 DV1 DV2]=[010]時,晶體振蕩器開啟并且保持時鐘運行;
將外部RAM中B寄存器中寫入0x1E內容,即是將B寄存器中UIE、SQWE、DM、24/12位置“1”,即是使得時鐘芯片允許更新結束中斷輸出的IRQ;SQW輸出設定頻率的方波,采用二進制,并且為24小時制。
主程序中還實現了通電時顯示SZPT,一段時間延時后,顯示0605(因為制做日期在五月份所以編程寫入了0605),一段時間延時后,就讀取時間顯示小時和分鐘。之后就是一個while循環(huán)語句。
2-3-3顯示程序(display)
dis0=decode(d0); 此程序為解碼程序
dis1=decode(d1);
dis2=decode(d2);
dis3=decode(d3);
key0=d3;數碼顯示器4
key1=d2;數碼顯示器3
key2=d1;數碼顯示器2
key3=d0;數碼顯示器1
switch(d)
{
case(0):
return 0x40;
break;…………
}
程序用的是switch選擇語句,如果系統(tǒng)要顯示零的話,返回數值為0x40。在設計中采用的是共陽極的七段數碼顯示器,當該位置“1”顯示,在電路設計中,數碼顯示器又與SN74LS04芯片的一個非門相連,即該位為“0”時,數碼管顯示,其返回值計算如下表:
段號
顯示數值 a
p2.0 b
p2.1 c
p2.2 d
p2.3 e
p2.4 f
p2.5 g
p2.6 十六進制
p2值
0 0 0 0 0 0 0 1 40
1 1 0 0 1 1 1 1 79
2 0 0 1 0 0 1 0 24
3 0 0 0 0 1 1 0 30
4 1 0 0 1 1 0 0 19
5 0 1 0 0 1 0 0 12
6 0 1 0 0 0 0 0 02
7 0 0 0 1 1 1 1 78
8 0 0 0 0 0 0 0 00
9 0 0 0 0 1 0 0 10
P 0 0 1 1 0 0 0 0C
T 0 1 1 1 0 0 1 4E
A 0 0 0 1 0 0 0 08
E 0 1 1 0 0 0 0 06
D 1 0 0 0 0 1 0 21
U 1 0 0 0 0 0 1 41
off 1 1 1 1 1 1 1 7F
2-3-4讀取鍵盤并換算成鍵值(keytranslate)
這段程序的主要功能就是將雜亂無序的鍵盤使得有順序可循。由于電路板上鍵盤不是按順序排好的,因此通過編程當原來無序的鍵盤變得比較好操作。
case(0x0):
keyr=0;
break;
其具體程序對應的鍵盤值可看下表:
板上的順序 0 4 8 12 1 5 9 13
編程后順序 0 1 2 3 4 a b c
板上的順序 2 6 10 14 3 7 11 15
編程后順序 5 6 7 8 9 d e f
這段程序主要采用的是switch選擇語句。
2-3-5外部中斷1(key)
外部中斷1為鍵盤中斷,鍵進行讀取。左圖為:鍵盤中斷一服務子程序圖
keya,其功能在于,按第一下顯示case(1): display (hour/10, hour%10, min/10,min%10);程序相同,按第二下顯示年份,第三下顯示為日期,第四下顯示為星期幾和秒。
Keyb,其功能在于,按下如果在SET為1并且0x0e不為0的情況下,如果條件key3<7為真的話,那么第14個字節(jié)即為第四段數碼管的值,如果為假的情況下,蜂鳴器發(fā)聲,并且顯示“EAA0”;keyb==1 為真的情況下,顯示為“1,off,off,XBYTE[0x0e]”,當0x0e不為“0”的情況下,keyb=2的情況下,顯示為XBYTE[0x0f]及XBYTE[0x10]中的數值,若輸入數值又將顯示內容寫入外部RAM中,語句如:XBYTE[4*l+0x0f]=key0*10+key1;XBYTE[4*l+0x10]=key2 *10 +key3;
Keyd,其功能在于,進入設置和退出設置,當按下keyd鍵,顯示為PASD,如果如果條件“(key0==1)&&key1==2)&&(key2==3)&&(key3==4)”為真的情況下,SET置“1”,并顯示為“PASS”,即可以對系統(tǒng)進行設置修改,如果為假蜂鳴器發(fā)聲,并顯示“EAA0”。當系統(tǒng)修改好后,再按下keyd鍵,顯示“0UEA”。
附錄
附表1設備清單:
序號 設備名稱 型號 數量
1 整流器 1
2 電磁電容 104 6
3 電磁電容 20 2
4 極性電容 470uf 2
5 極性電容 22uf 1
6 三端穩(wěn)壓器 7805 1
7 發(fā)光二極管 4
8 7段數碼顯示器 4
9 保險絲 1
10 繼電器 4
11 蜂鳴器 1
12 電阻 2.2K 8
13 電阻 4.7K 7
14 按鈕 17
15 時鐘芯片 DS12887 1
16 單片機 AT89C52 1
17 驅動器 ULN2003A 1
18 反相器 SN7404N 1
19 鍵盤編碼器 74C922 1
20 晶振 6MHZ 1
附圖1:DS12C887地址分布圖
結論
對于這一次的專題,我覺得真的有感覺到設計的感覺,跟實驗問題有很不同的地方是我們可以自己構思功能,并且依據所要求的功能來設計自己的電路,完全要自己動手,因此在對于系統(tǒng)的功能都很清楚了。通過這次對單片機硬件、DS12C887的硬件結構、單片機C程序設計的學習,真的感覺收獲不少,尤其是C語言的學習上,等于我利用了這次設計學習多了一門課程。如果事先就會C語言編程單片機我相信我能做的比目前好。
在開始編程的時候,由于自己在學習單片機的時候學的不夠深,又由于設計安排在學完單片機一年以后的時候,忘的比較多,使得我總是不明白單片機如何讀取DS12C887時間芯片的數據,也不知該如何寫入。后通過蘇老師指導方知將DS12C887芯片當做一個普通的外部RAM進行讀寫。
一開始我們是用AT89C51進行編程,遺憾的是我第一次編程完程序之后,我的電路板居然不能完全容納我的程序,竟然在implementation 時告訴我design is too large。后來經過研究和老師指點,我明白是我整個設計以及程序寫了太多,導致容量不足。后來我們只有舍棄了AT89C51,改用了AT89C52芯片。實現了電路板一開始要想要實現的功能。
盡管如此,作專題重要的并不在于結果,而是自己在整個活動中的過程,經過了這一次專題,我體會到從設計到實際做出來的過程,而且也將我所學過的單片機知識完完全全的復習了一遍,并且還學到了不少,我想這才是做專題的最終目的,以及我的最大的收獲。
參考文獻:
徐愛華主編.單片機應用技術教程.北京:機械工業(yè)出版社,2003.7
胡偉,季曉衡編著.單片機C程序設計及應用實例.人民郵電出版社
【四路多段定時開關(一)】相關文章:
論聞一多詩歌創(chuàng)作的特色12-01
善的意志有多善?05-29
多網融合對通信工程的應用論文04-11
大學英語寫作反饋多模態(tài)體系創(chuàng)建06-12
如何寫五段式論文的提綱04-29
談乳化瀝青透層試驗段的對比施工08-22
多網融合通信工程研究論文07-22
多網融合在通信工程的應用論文04-12
淺談多實體及多分支機構架構05-09
談多網融合在通信工程的應用論文04-11