久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

四路多段定時開關(guān)(一)

時間:2022-11-22 15:33:31 電子信息工程畢業(yè)論文 我要投稿
  • 相關(guān)推薦

四路多段定時開關(guān)(一)

畢業(yè)設(shè)計(論文)任務(wù)書
專業(yè)(班):  02樓宇2    姓名:   羅艷華   
 課題名稱、主要內(nèi)容和基本要求
課題名稱:四路多段定時開關(guān)
主要內(nèi)容:
 實(shí)現(xiàn)四路定時開關(guān)控制,能在24小時內(nèi)任意時間通斷,每路24小時內(nèi)最多可執(zhí)行六次開與關(guān),并可控制輸出功率,單路控制功率不小于800W,掉電后數(shù)據(jù)不丟失。
基本要求:
 完成Protel電路設(shè)計、單片機(jī)硬件系統(tǒng)設(shè)計、單片機(jī)程序設(shè)計、
電路焊接與調(diào)試全過程。制作出實(shí)物并能演示運(yùn)行。
課題名稱:四路多段定時開關(guān)
 進(jìn)度安排
周次 工作內(nèi)容 執(zhí)行情況
6、7 學(xué)習(xí)電子系統(tǒng)的設(shè)計過程,明確課題內(nèi)容,整體構(gòu)思,查閱資料 
8 復(fù)習(xí)單片機(jī)及相關(guān)知識、PROTEL使用 
9、10 設(shè)計、繪制電路、采購元器件、制版 
11 硬件組裝 
12、13 程序設(shè)計與調(diào)試 
14、15 撰寫論文 
    
摘要
 
 單片計算機(jī)即單片微型計算機(jī)。(Single-Chip Microcomputer),是集CPU,RAM,ROM,定時,計數(shù)和多種接接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。而C語言已成為當(dāng)前舉世公認(rèn)的高效簡潔又貼近硬件的編程語言之一。C語言現(xiàn)已成為專業(yè)化的單片機(jī)上的實(shí)用高級語言。而且由于開發(fā)速度、軟件質(zhì)量結(jié)構(gòu)化、可維護(hù)性方面的原因,使C語言漸漸有取代匯編的趨勢。這次畢業(yè)設(shè)計通過對C語言對單片機(jī)進(jìn)行編程的學(xué)習(xí)應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計、開發(fā)軟、硬件的能力。
前言
 本文通過用對一個能實(shí)現(xiàn)定時,時鐘,日歷顯示功能的時間系統(tǒng)的設(shè)計學(xué)習(xí),文章主要介紹了時鐘芯片DS12C887。系統(tǒng)由AT89C52、七段LED數(shù)碼顯示器、按鍵、二極管、DS12C887、發(fā)光二極管等部份構(gòu)成,能實(shí)現(xiàn)時鐘日歷的功能:能進(jìn)行年、月、日、時、分、秒的顯示、實(shí)現(xiàn)四路開關(guān)定時輸出、時間的調(diào)整等功能。文章后附有硬件設(shè)備請單。由于本人水平水限,難免有疏落不足之處,敬請老師和同學(xué)能給與批評糾正。

 

目   錄

任務(wù)書 1
摘要 4
前言 4
第一章、硬件設(shè)計 7
 1-1  硬件設(shè)計框圖 7
 1-1-1鍵盤部分 7
 1-1-2顯示及時鐘芯片部分 8
 1-1-3繼電器輸出部分 9
 1-2  系統(tǒng)硬件詳細(xì)設(shè)計圖 9
 1-3  各芯片介紹 10
 1-3-1 AT89C52單片機(jī)應(yīng)用設(shè)計 10
 1-2-2 DS12C887時鐘芯片 11
 1-2-3 74C922N 17
 1-2-4 SN74LS04N 18
 1-2-5 ULN2003A 18
第二章、系統(tǒng)軟件設(shè)計 20
 2-1  KEIL51軟件的應(yīng)用 20
 2-2  C語言編程單片機(jī)應(yīng)用 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
附  錄
結(jié)  論 
參考文獻(xiàn) 

 

 


第一章、硬件部分

1-1  硬件設(shè)計框圖
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)相連接。鍵盤產(chǎn)生的中斷與單片機(jī)中的P3.3腳相接,作為中斷1(INT1)。
 電路板中共用到十七個鍵盤,其中有十個為數(shù)字鍵,和六個功能鍵,左下角中的S1則是起到個復(fù)位作用。
1-1-2顯示及時鐘芯片部分
圖注:數(shù)碼顯示及DS12C887部分接線圖

 這部分的主要功能就是通過單片機(jī)讀取時鐘芯片中的時間,再給七段數(shù)碼顯示器顯示出來。
 首先講一下時鐘芯片與89C51的接線,單片機(jī)89C52中P3.6(WR)腳與DS12C887時鐘芯片的15腳WR相接,單片機(jī)對時鐘芯片進(jìn)行寫入數(shù)據(jù),89C52的P3.7腳(RD)與DS12C887的17腳RD相接,單片機(jī)讀取時鐘芯片,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腳接地。
   接著就是七段數(shù)碼顯示器的接線了,顯示器的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點(diǎn)亮。
1-1-3繼電器輸出部分
圖注:繼電器輸出部分接線圖

 89C52中P3.0與ULN2003A的INT1端子接,輸出OUT1接繼電器K4相接。由此對應(yīng)P3.1接INT2,輸出OUT2接K3,P3.2接INT3,輸出K2,P3.3接INT3,輸出OUT3接K1,再如圖P2.7接INT7,輸出OUT7與蜂鳴器相接。在制作電路板的過程中忘掉一個上拉電阻,位置是P2.7與正電源相接。
1-2  系統(tǒng)硬件詳細(xì)設(shè)計圖
 實(shí)際焊接出的板子跟設(shè)計中的有些不一樣,最不一樣的還是鍵盤的排列,原來設(shè)計是4X4矩陣形排列,由于焊接的種種原因,于是改成了兩行八縱的排法,板子是通過我們利用Protel軟件進(jìn)行電路的設(shè)計,并不斷的去了解硬件的功能及咨詢老師,確定基本可能完全操作后,再進(jìn)行焊接。
 注:焊接部份為自己焊做,但PBC板是拿出去外面制作。下圖為實(shí)際硬件焊接圖:

1-3  各芯片介紹
 在設(shè)計中用到了許多芯片有以前接觸過的也有聽都沒聽過的,系統(tǒng)由AT89C52、SN74LS04N反相器、鍵盤解碼器74C922芯片、ULN2003A芯片、七段LED數(shù)碼顯示器、按鍵、二極管、DS12C887及發(fā)光二極管等組成。在本文中主要介紹幾種芯片AT89C52、SN74LS04N、74C922及DS12C887和ULN2003A芯片。
1-3-1  AT89C52單片機(jī)應(yīng)用設(shè)計
  AT89C52是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,功能強(qiáng)大的AT89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。   AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。
 
主要功能特性:
  · 兼容MCS51指令系統(tǒng) · 8k可反復(fù)擦寫(>1000次)Flash ROM
  · 32個雙向I/O口 · 256x8bit內(nèi)部RAM
  · 3個16位可編程定時/計數(shù)器中斷 · 時鐘頻率0-24MHz
  · 2個串行中斷 · 可編程UART串行通道
  · 2個外部中斷源 · 共6個中斷源
  · 2個讀寫中斷口線 · 3級加密位
  · 低功耗空閑和掉電模式 · 軟件設(shè)置睡眠和喚醒功能

1-3-2  DS12C887時鐘芯片
 DS12C887的特性:DS12C887實(shí)時時鐘芯片功能豐富,可以用來直接代替IBM PC上的時鐘日歷芯片DS12C887,同時,它的管腳也和MC146818B、DS12887相兼容。
 由于DS12C887能夠自動產(chǎn)生世紀(jì)、年、月、日、時、分、秒等時間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決子“千年”問題; DS12C887中自帶有鋰電池,外部掉電時,其內(nèi)部時間信息還能夠保持10年之久;對于一天內(nèi)的時間記錄,有12小時制和24小時制兩種模式。在12小時制模式中,用AM和PM區(qū)分上午和下午;時間的表示方法也有兩種,一種用二進(jìn)制數(shù)表示,一種是用BCD碼表示;DS12C887中帶有128字節(jié) RAM,其中有11字節(jié)RAM用來存儲時間信息,4字節(jié)RAM用來存儲DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM使用戶使用;此外用戶還可對DS12C887進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進(jìn)行屏蔽。
 DS12C887的引腳功能:DS12C887的引腳排列如圖1所示,各管腳的功能說明如下:
 GND、 VCC:直流電源,其中VCC接+5V輸入,GND接地,當(dāng)VCC輸入為+5V時,用戶可以訪問DS12C887內(nèi)RAM中的數(shù)據(jù),并可對其進(jìn)行讀、寫操作;當(dāng)VCC的輸入小于+4.25V時,禁止用戶對內(nèi)部RAM進(jìn)行讀、寫操作,此時用戶不能正確獲取芯片內(nèi)的時間信息;當(dāng)VCC的輸入小于+3V時, DS12C887會自動將電源發(fā)換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。
 MOT:模式選擇腳,DA12C887有兩種工作模式,即Motorola模式和Intel模式,當(dāng)MOT接VCC時,選用的工作模式是Motorola模式,當(dāng)MOT接GND時,選用的是Intel模式。本文主要討論Intel模式。
 SQW:方波輸出腳,當(dāng)供電電壓VCC大于4.25V時,SQW腳可進(jìn)行方波輸出,此時用戶可以通過對控制寄存器編程來得到13種方波信號的輸出。
 AD0~AD7:復(fù)用地址數(shù)據(jù)總線,該總線采用時分復(fù)用技術(shù),在總線周期的前半部分,出現(xiàn)在AD0~AD7上的是地址信息,可用以選通DS12C887內(nèi)的RAM,總線周期的后半部分出現(xiàn)在AD0~AD7上的數(shù)據(jù)信息。
 AS:地址選通輸入腳,在進(jìn)行讀寫操作時,AS的上升沿將AD0~AD7上出現(xiàn)的地址信息鎖存到DS12C887上,而下一個下降沿清除AD0~AD7上的地址信息,不論是否有效,DS12C887都將執(zhí)行該操作。
 DS/RD:數(shù)據(jù)選擇或讀輸入腳,該引腳有兩種工作模式,當(dāng)MOT接VCC時,選用Motorola工作模式,在這種工作模式中,每個總線周期的后一部分的DS為高電平,被稱為數(shù)據(jù)選通。在讀操作中,DS的上升沿使DS12C887將內(nèi)部數(shù)據(jù)送往總線AD0~AD7上,以供外部讀取。在寫操作中,DS的下降沿將使總線 AD0~AD7上的數(shù)據(jù)鎖存在DS12C887中;當(dāng)MOT接GND時,選用Intel工作模式,在該模式中,該引腳是讀允許輸入腳,即Read Enable。
 R/W:讀/寫輸入端,該管腳也有2種工作模式,當(dāng)MOT接VCC時,R/W工作在Motorola模式。此時,該引腳的作用是區(qū)分進(jìn)行的是讀操作還是寫操作,當(dāng)R/W為高電平時為讀操作,R/W為低電平時為寫操作;當(dāng)MOT接GND時,該腳工作在Intle模式,此時該作為寫允許輸入,即Write Enable。
 CS:片選輸入,低電平有效。
 IRQ:中斷請求輸入,低電平有效,該腳有效對DS12C887內(nèi)的時鐘、日歷和RAM中的內(nèi)容沒有任何影響,僅對內(nèi)部的控制寄存器有影響,在典型的應(yīng)用中,RESET可以直接接VCC,這樣可以保證DS12C887在掉電時,其內(nèi)部控制寄存器不受影響。
 DS12C887的地址分布
 附圖1是DS12877的地址分布圖。所有的地址包括114字節(jié)通用RAM、10字節(jié)用于記錄時間、日歷、鬧鐘和RAM以及4字節(jié)的控制、狀態(tài)RAM。所有字節(jié)都可以在除以下的情況下直接讀寫。

時間、日歷和鬧鐘的數(shù)據(jù)格式
地址 功能 十進(jìn)制范圍 范    圍
   二進(jìn)制數(shù)據(jù)模式  BCD數(shù)據(jù)模式
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進(jìn)制) 1-12 01-0CAM,81-8CPM 01-12AM,81-92PM
 小時(24進(jìn)制) 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)位用來標(biāo)志芯片是否即將進(jìn)行更新。當(dāng)UIP位為1時,更新即將開始;當(dāng)它為0時,表示在至少244μs內(nèi)芯片不會更新,此時,時鐘、日歷和鬧鐘信息可以通過讀寫相應(yīng)的字節(jié)獲得和設(shè)置。UIP位為只讀位并且不受復(fù)位信號(RESET)的影響。通過把寄存器B中的SET位設(shè)置為1可以禁止更新并將UIP位清0。
DV0,DV1,DV2
這3位是用來開關(guān)晶體振蕩器和復(fù)位分頻器。當(dāng)[DV0 DV1 DV2]=[010]時,晶體振蕩器開啟并且保持時鐘運(yùn)行;當(dāng)[DV0 DV1 DV2]=[11X]時,晶體振蕩器開啟,但分頻保持復(fù)位狀態(tài)。
RS3,RS2,RS1,RS0作用:1.設(shè)置周期中斷允許位(PIE);2.設(shè)置方波輸出允許位(SQWE);3.兩位同時設(shè)置為有效并且設(shè)置頻率;4.全部禁止。周期性中斷率和方波中斷頻率表列出了可通過RS寄存器選擇的周期中斷的頻率和方波的頻率。這四個可讀寫的位不受復(fù)位信號的影響。
最高位             最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
SET PIE AIE UIE SQWE DM 24/12 DSE
寄存器B
SET當(dāng)SET=0,芯片更新正常進(jìn)行;當(dāng)SET=1,芯片更新被禁止。SET位可讀寫,并不會受復(fù)位信號的影響。
PIE當(dāng)PIE=0,禁止周期中斷輸出到IRQ;當(dāng)PIE=1,允許周期中斷輸出到IRQ。
AIE當(dāng)AIE=0,禁止鬧鐘中斷輸出到IRQ;當(dāng)AIE=1,允許鬧鐘中斷輸出到IRQ。
UIE當(dāng)UIE=0,禁止更新結(jié)束中斷輸出到IRQ;當(dāng)UIE=1,允許更新結(jié)束中斷輸出到IRQ。此位在復(fù)位或設(shè)置SET為高時清0.
SQWE當(dāng)SQWE=0,SQW腳為低;當(dāng)SQWE=1,SQW輸出設(shè)定頻率的方波。
DMDM=0,BCDDM=1,二進(jìn)制,此位不受復(fù)位信號影響。
24/12此位為1,24時制;為0,12小時制
DSE夏令時允許標(biāo)志。在四月的第一個星期日的1∶59∶59AM,時鐘調(diào)到3∶00∶00AM;在十月的最后一個星期日的1∶59∶59AM,時鐘調(diào)到1∶00∶00AM。
寄存器C
最高位             最低位
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
IRQF PF AF UF 0 0 0 0
IRQF當(dāng)有以下情況中的一種或幾種發(fā)生時,中斷請求標(biāo)志位(IRQF)置高;PF=PIE=1AF=AIE=1UF=UIE=1IRQF=PF·PIE+AF·AIE+UF·UIEIRQF-且為高IRQ腳輸出低。所有標(biāo)志位在讀寄存器C或復(fù)位后清0。
PF 周期中斷標(biāo)志。AF 鬧鐘中斷標(biāo)志。UF 更新中斷標(biāo)志。
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當(dāng)VRT=0時表示內(nèi)置電池能量耗盡,此時RAM中的數(shù)據(jù)的正確性就不能保證了。
BIT6 THROUGH BIT0第0位到第6位無用,只讀,且讀出的值恒為0。
2-2-3 74C922
 我們采用專用鍵盤管理芯片74C922。74C922為CMOS工藝技術(shù)制造,工作電壓為3—15V,“二鍵鎖定”功能,編碼輸出為三芯輸出,可直接與微處理器數(shù)據(jù)線相連,內(nèi)部振蕩器完成4×4矩形鍵盤掃描,有 按鍵時,DA變高,通過非門接到AT89C51的INT1口,并且設(shè)INT0為邊沿觸發(fā)方式,當(dāng)DA變高時,經(jīng)過非門變?yōu)榈碗娖教儺a(chǎn)生INT1外部中斷,通知AT89C51從數(shù)據(jù)總線讀鍵值,判斷鍵值從而完成相應(yīng)的散轉(zhuǎn)程序功能。
 系統(tǒng)中共用了16個鍵盤按鈕形狀,當(dāng)時圖紙設(shè)計時以矩陣型4X4行之安排,后由于板的大小和實(shí)際等問題,便以每行八個,排做兩行處理。
2-2-4 SN74LS04N
 如下圖所示,SN74LS04N的引腳如下,7腳接地,14腳接VCC正電源,并且形象的體現(xiàn)出了SN74LS04N的作用,SN74LS04N作用就是反相器,SN74LS04N內(nèi)部形成了六個非門,分別是1與2、3與4、5與6、8與9、10與11、12與13構(gòu)成六個非門,起到一個反相的作用。

2-2-5 ULN2003A
 ULN2003A是內(nèi)含7個達(dá)林頓管的驅(qū)動芯片,輸入電壓與TTL電平兼容。每個上達(dá)林頓管的集電極可吸收最大500mA的電流,耐壓30V,因此可以用來驅(qū)動四相步進(jìn)電機(jī)。ULN2003A電路具有以下特點(diǎn):  ●電流增益高(大于1000);  ●帶負(fù)載能力強(qiáng)(輸出電流大于500mA);   ●溫度范圍寬(-40~85℃);  ●工作電壓高(大于50V)。    ULN2003電路主要用于如下領(lǐng)域:  ●伺服電機(jī); ●步進(jìn)電機(jī);  ●電磁閥;    ●可控照明燈。

 

 

 

 

 

第二章、系統(tǒng)軟件設(shè)計

2-1  KEIL51軟件的應(yīng)用
 因此蘇老師購見意我用C語言進(jìn)行編程。還好時間尚早,我開始利用空閑時間進(jìn)行C語言對單片機(jī)編程的學(xué)習(xí)。
 首先我對KEIL51軟件進(jìn)行了學(xué)習(xí),軟件是蘇老師發(fā)給我的,在平日的時間里就自己捉摸著怎么用,在周日的時間我就回學(xué)校找蘇老師問一周累積的問題。KEIL51跟MEDWIN不同的是:KEIL51需要新建項目(new project),之后選擇單片機(jī),這里難住了我好久,怎么選擇單片機(jī)的型號也沒選對,后來學(xué)校問老師應(yīng)選擇Ateml的AT89C51。這個就新建好了一個項目了。
 新建一個程序文件(File-New),建好后保存新建的程序,如果是用C語言進(jìn)行編程的話擴(kuò)展名應(yīng)為(.c),如果是用匯編語言進(jìn)行編程的話擴(kuò)展名應(yīng)為(.a或.asm),建好保存該文件,然后還需要將程序加到項目中,如圖所示右鍵點(diǎn)擊Source Group1文件夾彈出菜單,選擇"Add File to Group 'Source Group 1'"就會彈出文件窗口,選擇剛剛保存的文件,按ADD按鈕,關(guān)閉文件窗,程序文件已加到項目中了。
 用KEIL51進(jìn)得軟件調(diào)試,在硬件沒焊好的情況下,我都是直接用KEIL51進(jìn)行仿真調(diào)試。圖片由左到右分別編譯單個文件、是編譯當(dāng)前項目及重新編譯。此鍵為停止編譯按鈕,這個鍵只有在點(diǎn)擊了前三個中的任一個后才會生效。這就是開啟\關(guān)閉調(diào)試模式的按鈕,它也存在于菜單Debug-Start\Stop Debug Session中。為運(yùn)行按鈕,當(dāng)程序處于停止?fàn)顟B(tài)時才有效。為模擬芯片的復(fù)位,程序回到最開頭處執(zhí)行。為停止按鈕,程序處于運(yùn)行狀態(tài)時才有效。
 后來硬件板焊好后就需要芯片燒寫成HEX文件。
2-2  C語言編程單片機(jī)的學(xué)習(xí)
設(shè)計中所用到的運(yùn)算符
關(guān)系和邏輯運(yùn)算符 含義
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
&& 與
‖ 或
! 非
相對的優(yōu)先級:最高為!運(yùn)算再進(jìn)行>=、<=運(yùn)算,接著運(yùn)行==、!=運(yùn)算,后&&運(yùn)算,最后執(zhí)行‖運(yùn)算。
運(yùn)算符 作用
+ 加法
- 減法
* 乘法
/ 除法
++ 自加
-- 自減
% 模運(yùn)算(取整數(shù)除法的余數(shù))
主要就介紹一些我所用到的語句。
在程序設(shè)計中,主要利用了C語言的if、switch及for語句。其中if、switch為條件語句,for是一個循環(huán)控制語句,在程序中更常用到的語句是break語句,在switch語句中,在case子句執(zhí)行完畢后,通過break語句使控制立即跳出switch語句。在循環(huán)語句中,break語句的作用是在循環(huán)體中測試到應(yīng)立即結(jié)束循環(huán)時,使控制立即跳出循環(huán)結(jié)構(gòu),轉(zhuǎn)而執(zhí)行循環(huán)語句后的語句。
2-3  程序
2-3-1  程序中地址分配
程序設(shè)計中的地址分布,由于DS12C887中前14個字節(jié)是10字節(jié)用于記錄時間、日歷、鬧鐘和RAM以及4字節(jié)的控制、狀態(tài)RAM。113字節(jié)通用RAM使用戶使用,我先計算了我的地址分布,從第14個字節(jié)開始我用做存儲每路的開關(guān)次數(shù),每一路可設(shè)定每次開關(guān)的時間(小時、分鐘、時長及功率),時長是以分鐘為單位,最高可設(shè)置為99分鐘。每一路開關(guān)每一次均要用四個字節(jié),通過計算四路開關(guān)能在24小時內(nèi)任意時間通斷,每路24小時內(nèi)最多可執(zhí)行六次開與關(guān),下表為我設(shè)定計算我在編程時的地址分布表。
表:DS12C887地址分配情況
路數(shù) 次數(shù) 第一次 第二次 第三次 第四次 第五次 第六次
第一路 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為判斷電路設(shè)計中的第幾路,
 {
  switch(i)
  {
  case(0):
  out0=0;
  break;
  ……
  }
 for(j=0;j<XBYTE[14+25*i];j++);j為每路開關(guān)的開關(guān)次數(shù)。
 {
 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;
 ……
  }
 舉例在程序中設(shè)計第一路開關(guān)開關(guān)一次,即i=0,設(shè)定的開關(guān)次數(shù)(一次)存放在外部RAM(DS12C887)第14個字節(jié)中,XBYTE[14]=1,j=0時循環(huán)一次,,如果讀取到第15個字節(jié)(小時)中數(shù)值小于或等于系統(tǒng)時間小時(hour)&&(與運(yùn)算符)第16個字節(jié)(分鐘)中數(shù)值小于或等于系統(tǒng)時間分鐘(min)&&第15個字節(jié)數(shù)值+第17個字節(jié)(時長)數(shù)值/60大于等于系統(tǒng)時間小時(hour)&&第16個字節(jié)數(shù)值+第17個字節(jié)數(shù)值%60大于系統(tǒng)時間分鐘(min),判斷條件如果為真的情況下,輸出第18個字節(jié)中設(shè)定的功率。
 由于每路六次開關(guān)共用25個字節(jié),因此循環(huán)語句用判斷每路for (j=0;     j< XBYTE[14+25*i];j++),每一路從14字節(jié)開始,后循環(huán)語句即用14+25*路數(shù)。
2-3-2主程序(main)
 主程序中主要設(shè)置了CPU的工作模式及中斷,T0為延時16ms;T1為顯示時間設(shè)置為0.512ms;T2設(shè)置為延時100ms;設(shè)置芯片的工作模式:給外部RAM中A寄存器中寫入0x20內(nèi)容(XBYTE[0x0a]=0x20),即是將A寄存器中DV1位置1”,查看上述所講DS12C887內(nèi)容,[DV0 DV1 DV2]=[010]時,晶體振蕩器開啟并且保持時鐘運(yùn)行;
將外部RAM中B寄存器中寫入0x1E內(nèi)容,即是將B寄存器中UIE、SQWE、DM、24/12位置“1”,即是使得時鐘芯片允許更新結(jié)束中斷輸出的IRQ;SQW輸出設(shè)定頻率的方波,采用二進(jìn)制,并且為24小時制。
 主程序中還實(shí)現(xiàn)了通電時顯示SZPT,一段時間延時后,顯示0605(因?yàn)橹谱鋈掌谠谖逶路菟跃幊虒懭肓?605),一段時間延時后,就讀取時間顯示小時和分鐘。之后就是一個while循環(huán)語句。
2-3-3顯示程序(display)
   dis0=decode(d0); 此程序?yàn)榻獯a程序
 dis1=decode(d1);
 dis2=decode(d2);
 dis3=decode(d3);
 key0=d3;數(shù)碼顯示器4
 key1=d2;數(shù)碼顯示器3
 key2=d1;數(shù)碼顯示器2
 key3=d0;數(shù)碼顯示器1
switch(d)
 {
 case(0):
 return 0x40;
 break;………… 
    }
 
 程序用的是switch選擇語句,如果系統(tǒng)要顯示零的話,返回數(shù)值為0x40。在設(shè)計中采用的是共陽極的七段數(shù)碼顯示器,當(dāng)該位置“1”顯示,在電路設(shè)計中,數(shù)碼顯示器又與SN74LS04芯片的一個非門相連,即該位為“0”時,數(shù)碼管顯示,其返回值計算如下表:
 
     段號
顯示數(shù)值 a
p2.0 b
p2.1 c
p2.2 d
p2.3 e
p2.4 f
p2.5 g
p2.6 十六進(jìn)制
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)
這段程序的主要功能就是將雜亂無序的鍵盤使得有順序可循。由于電路板上鍵盤不是按順序排好的,因此通過編程當(dāng)原來無序的鍵盤變得比較好操作。
  case(0x0):
  keyr=0;
  break;
 其具體程序?qū)?yīng)的鍵盤值可看下表:
板上的順序 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為鍵盤中斷,鍵進(jìn)行讀取。左圖為:鍵盤中斷一服務(wù)子程序圖
 keya,其功能在于,按第一下顯示case(1):  display (hour/10, hour%10, min/10,min%10);程序相同,按第二下顯示年份,第三下顯示為日期,第四下顯示為星期幾和秒。
 Keyb,其功能在于,按下如果在SET為1并且0x0e不為0的情況下,如果條件key3<7為真的話,那么第14個字節(jié)即為第四段數(shù)碼管的值,如果為假的情況下,蜂鳴器發(fā)聲,并且顯示“EAA0”;keyb==1 為真的情況下,顯示為“1,off,off,XBYTE[0x0e]”,當(dāng)0x0e不為“0”的情況下,keyb=2的情況下,顯示為XBYTE[0x0f]及XBYTE[0x10]中的數(shù)值,若輸入數(shù)值又將顯示內(nèi)容寫入外部RAM中,語句如:XBYTE[4*l+0x0f]=key0*10+key1;XBYTE[4*l+0x10]=key2 *10 +key3;
 Keyd,其功能在于,進(jìn)入設(shè)置和退出設(shè)置,當(dāng)按下keyd鍵,顯示為PASD,如果如果條件“(key0==1)&&key1==2)&&(key2==3)&&(key3==4)”為真的情況下,SET置“1”,并顯示為“PASS”,即可以對系統(tǒng)進(jìn)行設(shè)置修改,如果為假蜂鳴器發(fā)聲,并顯示“EAA0”。當(dāng)系統(tǒng)修改好后,再按下keyd鍵,顯示“0UEA”。
附錄
附表1設(shè)備清單:
序號 設(shè)備名稱 型號 數(shù)量
1 整流器  1
2 電磁電容 104 6
3 電磁電容 20 2
4 極性電容 470uf 2
5 極性電容 22uf 1
6 三端穩(wěn)壓器 7805 1
7 發(fā)光二極管  4
8 7段數(shù)碼顯示器  4
9 保險絲  1
10 繼電器  4
11 蜂鳴器  1
12 電阻 2.2K 8
13 電阻 4.7K 7
14 按鈕  17
15 時鐘芯片 DS12887 1
16 單片機(jī) AT89C52 1
17 驅(qū)動器 ULN2003A 1
18 反相器 SN7404N 1
19 鍵盤編碼器 74C922 1
20 晶振 6MHZ 1

 

附圖1:DS12C887地址分布圖

結(jié)論
 對于這一次的專題,我覺得真的有感覺到設(shè)計的感覺,跟實(shí)驗(yàn)問題有很不同的地方是我們可以自己構(gòu)思功能,并且依據(jù)所要求的功能來設(shè)計自己的電路,完全要自己動手,因此在對于系統(tǒng)的功能都很清楚了。通過這次對單片機(jī)硬件、DS12C887的硬件結(jié)構(gòu)、單片機(jī)C程序設(shè)計的學(xué)習(xí),真的感覺收獲不少,尤其是C語言的學(xué)習(xí)上,等于我利用了這次設(shè)計學(xué)習(xí)多了一門課程。如果事先就會C語言編程單片機(jī)我相信我能做的比目前好。
 在開始編程的時候,由于自己在學(xué)習(xí)單片機(jī)的時候?qū)W的不夠深,又由于設(shè)計安排在學(xué)完單片機(jī)一年以后的時候,忘的比較多,使得我總是不明白單片機(jī)如何讀取DS12C887時間芯片的數(shù)據(jù),也不知該如何寫入。后通過蘇老師指導(dǎo)方知將DS12C887芯片當(dāng)做一個普通的外部RAM進(jìn)行讀寫。
 一開始我們是用AT89C51進(jìn)行編程,遺憾的是我第一次編程完程序之后,我的電路板居然不能完全容納我的程序,竟然在implementation 時告訴我design is too large。后來經(jīng)過研究和老師指點(diǎn),我明白是我整個設(shè)計以及程序?qū)懥颂啵瑢?dǎo)致容量不足。后來我們只有舍棄了AT89C51,改用了AT89C52芯片。實(shí)現(xiàn)了電路板一開始要想要實(shí)現(xiàn)的功能。
 盡管如此,作專題重要的并不在于結(jié)果,而是自己在整個活動中的過程,經(jīng)過了這一次專題,我體會到從設(shè)計到實(shí)際做出來的過程,而且也將我所學(xué)過的單片機(jī)知識完完全全的復(fù)習(xí)了一遍,并且還學(xué)到了不少,我想這才是做專題的最終目的,以及我的最大的收獲。

 

參考文獻(xiàn):
徐愛華主編.單片機(jī)應(yīng)用技術(shù)教程.北京:機(jī)械工業(yè)出版社,2003.7 
胡偉,季曉衡編著.單片機(jī)C程序設(shè)計及應(yīng)用實(shí)例.人民郵電出版社  

【四路多段定時開關(guān)(一)】相關(guān)文章:

論聞一多詩歌創(chuàng)作的特色12-01

善的意志有多善?05-29

多網(wǎng)融合對通信工程的應(yīng)用論文04-11

大學(xué)英語寫作反饋多模態(tài)體系創(chuàng)建06-12

如何寫五段式論文的提綱04-29

談乳化瀝青透層試驗(yàn)段的對比施工08-22

多網(wǎng)融合通信工程研究論文07-22

多網(wǎng)融合在通信工程的應(yīng)用論文04-12

淺談多實(shí)體及多分支機(jī)構(gòu)架構(gòu)05-09

談多網(wǎng)融合在通信工程的應(yīng)用論文04-11