版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 1 緒論</b></p><p><b> 1.1 設計背景</b></p><p> 近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測日新月益更新。在實時檢測和自動控制的單片機應用系統(tǒng)中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據(jù)具體硬件結構,以及針對具
2、體應用對象特點的軟件結合,加以完善。</p><p> 本課設設計一個基于51單片機開發(fā)系統(tǒng)的PCB電路板,使之能夠完成一系列基本功能。</p><p><b> 1.2設計目的</b></p><p> 1加強對單片機和匯編語言的認識,充分掌握和理解設計各部分的工作原理、設計過程、選擇芯片器件、模塊化編程等多項知識。</p>
3、<p> 2用單片機模擬實現(xiàn)具體應用,使個人設計能夠真正使用。</p><p> 3把理論知識與實踐相結合,充分發(fā)揮個人能力,并在實踐中鍛煉。</p><p> 4提高利用已學知識分析和解決問題的能力。</p><p> 5)提高實踐動手能力。</p><p><b> 1.3設計任務 </b>&
4、lt;/p><p> 1.基本系統(tǒng):在51單片機開發(fā)系統(tǒng)PCB電路板上完成電子元器件的焊接、調試、程序下載,并實現(xiàn)數(shù)碼管顯示、矩陣鍵盤掃描、中斷程序、定時器程序、串口通訊等基本功能;</p><p> 2.顯示功能:焊接電路并實現(xiàn)對1602液晶屏的顯示功能,要求能滾動顯示字符;</p><p> 3.輸出控制:焊接電路并實現(xiàn)對繼電器的控制功能;</p>
5、<p> 4.數(shù)據(jù)采集:焊接電路并實現(xiàn)對AD0832的數(shù)據(jù)采集功能;</p><p><b> 2 方案選擇</b></p><p><b> 2.1單片機芯片</b></p><p><b> 方案一: </b></p><p> 采用89C51芯片作
6、為硬件核心,采用Flash ROM,內部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設計中時由于不具備ISP在線編程技術, 當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,對芯片的多次拔插會對芯片造成一定的損壞。</p><p><b> 方案二:</b></p><p> 采用
7、STC89C52,片內ROM全都采用Flash ROM;能以3V的超底壓工作;同時也與MCS-51系列單片機完全該芯片內部存儲器為8KB ROM 存儲空間,同樣具有89C51的功能,使用ISP下載方式,重新編程時自動擦除原有的程序。當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,不需要對芯片多次拔插,所以不會對芯片造成損壞。</p><p> 所以選擇采用STC89C52作為主控制系統(tǒng)
8、.</p><p> 2.2數(shù)碼管的驅動方式</p><p><b> 方案一</b></p><p> 74HC595是美國國家半導體公司生產(chǎn)的通用移位寄存器芯片。并行輸出端具有輸出鎖存功能。與單片機連接簡單方便,只須三個I/O口即可。而且通過芯片的Q7引腳和SER引腳,可以級聯(lián)。而且價格低廉,每片單價為1.5元左右。</p>
9、;<p><b> 方案二</b></p><p> CH452是數(shù)碼管顯示驅動和鍵盤掃描控制芯片。CH452 內置時鐘振蕩電路,可以動態(tài)驅動8 位數(shù)碼管或者64 位LED,具有BCD 譯碼、閃爍、移位、段位尋址、光柱譯碼等功能;同時還可以進行64 鍵的鍵盤掃描;CH452 通過可以級聯(lián)的4線串行接口或者2
10、0;線串行接口與單片機等交換數(shù)據(jù);并且可以對單片機提供上電復位信號。</p><p><b> 方案三</b></p><p> 帶鎖存的驅動芯片(設想中未試驗通過)74HC573 主要針對單片機IO口充足,但是要求對單片機時間資源占用少的情況。</p><p> 綜上,選擇74HC573。</p><p><
11、;b> 2.3顯示模塊</b></p><p><b> 方案一:</b></p><p> 采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以不用此種作為顯示.</p><p><b> 方案二:</b><
12、;/p><p> 采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,對于顯示數(shù)字最合適,但無法顯示圖形文字,在顯示星期是也只能用數(shù)字表示,而且采用動態(tài)掃描法與單片機連接時,在編程時比較復雜。所以也不采用了LED數(shù)碼管作為顯示。</p><p><b> 方案三:</b></p><p> 采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示文
13、字,圖形,顯示多樣,清晰可見。</p><p> 所以在此設計中采用LCD液晶顯示屏。</p><p><b> 2.4時鐘芯片</b></p><p><b> 方案一:</b></p><p> 采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時
14、、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高,位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內,2.5V時耗電小于300nA。</p><p><b> 方案二:</b></p><p> 直接采用單片機定時計數(shù)器提供秒信號,使用程序實現(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案可以減少芯片的使用,也可以節(jié)約成本。所以采用此方案。</p
15、><p><b> 3 硬件設計</b></p><p> 3.1單片機主機系統(tǒng)</p><p> 圖3 -1 單片機主機系統(tǒng)圖</p><p> 3.1.1 STC89C52單片機</p><p> STC89C52單片機最初是由Intel 公司開發(fā)設計的,但后來Intel&
16、#160;公司把51 核的設計方案賣給了幾家大的電子設計生產(chǎn)商,譬如 SST、Philip、Atmel 等大公司。如是市面上出現(xiàn)了各式各樣的但均以51 為內核的單片機,倒是Intel 公司自己的單片機卻顯得遜色了。這些各大電子生產(chǎn)商推出的單片機都兼容51 指令、并在51 的基礎上擴展一些功能而內部結構是與51 一致的。 </p>&l
17、t;p> STC89C52有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內含5個中斷源,2個優(yōu)先級,2個16位定時/計數(shù)器。STC89C52的存儲器系統(tǒng)由4K的程序存儲器(掩膜ROM),和128B的數(shù)據(jù)存儲器(RAM)組成。 </p><p> 3-1a STC89C52單片機的基本組成框圖</p><p> (1) STC89C52單片機主要特性&
18、lt;/p><p> 1. 一個8 位的微處理器(CPU)。 </p><p> 2. 片內數(shù)據(jù)存儲器RAM(128B),用以存放可以讀/寫的數(shù)據(jù),如運算的中間結果、最終結果以及欲顯示的數(shù)據(jù)等,SST89 系列單片機最多提供1K 的RAM。 </p><p> 3. 片內程序存儲器RO
19、M(4KB),用以存放程序、一些原始數(shù)據(jù)和表格。但也有一些單片機內部不帶ROM/EPROM,如8031,8032,80C31 等。目前單片機的發(fā)展趨勢是將RAM 和ROM 都集成在單片機里面,這樣既方便了用戶進行設計又提高了系統(tǒng)的抗干擾性。SST 公司推出的89 系列單片機分別集成了16K、32K、64K Flash 存儲器,可供用戶根據(jù)需要選用。 <
20、/p><p> 4. 四個8 位并行I/O 接口P0~P3,每個口既可以用作輸入,也可以用作輸出。 </p><p> 5. 兩個定時器/計數(shù)器,每個定時器/計數(shù)器都可以設置成計數(shù)方式,用以對外部事件進行計數(shù),也可以設置成定時方式,并可以根據(jù)計數(shù)或定時的結果實現(xiàn)計算機控制。為方便設計串行通信,目前的52 系列單片機都會提供3
21、60;個16 位定時器/計數(shù)器。 </p><p> 6. 五個中斷源的中斷控制系統(tǒng)?,F(xiàn)在新推出的單片機都不只5 個中斷源,例如SST89E58RD 就有9 個中斷源。 </p><p> 7. 一個全雙工UART(通用異步接收發(fā)送器)的串行I/O 口,用于實現(xiàn)單片機之間或單機與微機之間的串行通信
22、。 </p><p> 8. 片內振蕩器和時鐘產(chǎn)生電路,但石英晶體和微調電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD 最高允許振蕩頻率達40MHz,因而大大的提高了指令的執(zhí)行速度。 </p><p> (2) STC89C52單片機管腳圖 </p><p> 3-1b STC8
23、9C52單片機管腳圖</p><p><b> 部分引腳說明: </b></p><p> 1. 時鐘電路引腳XTAL1 和XTAL2: </p><p> XTAL2(18 腳):接外部晶體和微調電容的一端;在8051 片內它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體
24、固有頻率。若需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。 </p><p> 要檢查8051/8031 的振蕩電路是否正常工作,可用示波器查看XTAL2 端是否有脈沖信號輸出。 </p><p> XTAL1(19 腳):接外部晶體和微調電容的另一端;在片內它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。
25、</p><p> 2. 控制信號引腳RST,ALE,PSEN 和EA: </p><p> RST/VPD(9 腳):RST 是復位信號輸入端,高電平有效。當此輸入端保持備用電源的輸入端。當主電源Vcc 發(fā)生故障,降低到低電平規(guī)定值時,將+5V 電源自動兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操
26、作。RST 引腳的第二功能是VPD,即接入RST 端,為RAM 提供備用電源,以保證存儲在RAM 中的信息不丟失,從而合復位后能繼續(xù)正常運行。 </p><p> ALE/PROG(30 腳):地址鎖存允許信號端。當8051 上電正常工作后,ALE 引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC 的1/6。CPU&
27、#160;訪問片外存儲器時,ALE 輸出信號作為鎖存低8 位地址的控制信號。 </p><p> 平時不訪問片外存儲器時,ALE 端也以振蕩頻率的1/6 固定輸出正脈沖,因而ALE 信號可以用作對外輸出時鐘或定時信號。如果想確定8051/8031 芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。如有脈沖信號輸出,則8051/8031
28、160;基本上是好的。 </p><p> ALE 端的負載驅動能力為8 個LS 型TTL(低功耗甚高速TTL)負載。 </p><p> 此引腳的第二功能PROG 在對片內帶有4KB EPROM 的8751 編程寫入(固化程序)時,作為編程脈沖輸入端。 </p><
29、p> PSEN(29 腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM 的OE 端(見后面幾章任何一個小系統(tǒng)硬件圖)。PSEN 端有效,即允許讀出EPROM/ROM 中的指令碼。PSEN 端同樣可驅動8 個LS 型TTL 負載。要檢查一個8051/8031 小系
30、統(tǒng)上電后CPU 能否正常到EPROM/ROM 中讀取指令碼,也可用示波器看PSEN 端有無脈沖輸出。如有則說明基本上工作正常。 </p><p> EA/Vpp(31 腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA 引腳接高電平時,CPU只訪問片內EPROM/ROM并執(zhí)行內部程序存儲器中的指令,但當PC(程序計數(shù)器)的值超過0FFFH(
31、對8751/8051 為4K)時,將自動轉去執(zhí)行片外程序存儲器內的程序。當輸入信號EA 引腳接低電平(接地)時,CPU 只訪問外部EPROM/ROM 并執(zhí)行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無片內ROM 的8031 或8032,需外擴EPROM,此時必須將EA 引腳接地。此引腳的第二功能是Vpp 是對8751 片內EPROM固
32、化編程時,作為施加較高編程電壓(一般12V~21V)的輸入端。 </p><p> 3. 輸入/輸出端口P0/P1/P2/P3: </p><p> P0口(P0.0~P0.7,39~32 腳):P0口是一個漏極開路的8 位準雙向I/O口。作為漏極開路的輸出端口,每位能驅動8 個LS 型TTL 負載。當P0
33、 口作為輸入口使用時,應先向口鎖存器(地址80H)寫入全1,此時P0 口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準雙向口的含義。在CPU 訪問片外存儲器時,P0口分時提供低8 位地址和8 位數(shù)據(jù)的復用總線。在此期間,P0口內部上拉電阻有效。 </p><p> P1口(P1.0~P1.7,1~8 腳):P1口是一個帶內
34、部上拉電阻的8 位準雙向I/O口。P1口每位能驅動4 個LS 型TTL 負載。在P1口作為輸入口使用時,應先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內部上拉電阻拉成高電平。 </p><p> P2口(P2.0~P2.7,21~28 腳):P2口是一個帶內部上拉電阻的8 位準雙向I/O口。P口每位能驅動4個LS 型TTL
35、 負載。在訪問片外EPROM/RAM 時,它輸出高8 位地址。 </p><p> P3口(P3.0~P3.7,10~17 腳):P3口是一個帶內部上拉電阻的8 位準雙向I/O口。P3口每位能驅動4個LS型TTL負載。P3口與其它I/O 端口有很大的區(qū)別,它的每個引腳都有第二功能,如下: </p><p>
36、 P3.0:(RXD)串行數(shù)據(jù)接收。 </p><p> P3.1:(RXD)串行數(shù)據(jù)發(fā)送。</p><p> P3.2:(INT0#)外部中斷0輸入。 </p><p> P3.3:(INT1#)外部中斷1輸入。 </p><p> P3.4:(T0)定時/計數(shù)器0的外部計數(shù)輸入。 </p
37、><p> P3.5:(T1)定時/計數(shù)器1的外部計數(shù)輸入。 </p><p> P3.6:(WR#)外部數(shù)據(jù)存儲器寫選通。</p><p> P3.7:(RD#)外部數(shù)據(jù)存儲器讀選通。 </p><p> (3) STC89C52單片機的中斷系統(tǒng) </p><p> STC89C
38、52系列單片機的中斷系統(tǒng)有5個中斷源,2個優(yōu)先級,可以實現(xiàn)二級中斷服務嵌套。由片內特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應中斷請求;由中斷優(yōu)先級寄存器IP安排各中斷源的優(yōu)先級;同一優(yōu)先級內各中斷同時提出中斷請求時,由內部的查詢邏輯確定其響應次序。 </p><p> (4) STC89C52單片機的定時/計數(shù)器 </p><p> 在單片機
39、應用系統(tǒng)中,常常會有定時控制需求,如定時輸出、定時檢測、定時掃描等;也經(jīng)常要對外部事件進行計數(shù)。89C52單片機內集成有兩個可編程的定時/計數(shù)器:T0和T1,它們既可以工作于定時模式,也可以工作于外部事件計數(shù)模式,此外,T1還可以作為串行口的波特率發(fā)生器。</p><p><b> 3.1.2時鐘電路</b></p><p> 時鐘信號用來提供單片機片內各種微操作
40、的時間基準,時鐘信號通常用兩種電路形式得到:內部振蕩和外部振蕩。MCS-51單片機內部有一個用于構成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內部方式時,電路簡單,所得的時鐘信號比較穩(wěn)定,實際使用中常采用這種方式,如圖3-1所示在其外接晶體振蕩器(簡稱晶振)或陶瓷諧振器就構成了內部振蕩方式,片內高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構成一個自激振蕩器并產(chǎn)生振蕩時
41、鐘脈沖。圖3-1中外接晶體以及電容C21和C22構成并聯(lián)諧振電路,它們起穩(wěn)定振蕩頻率、快速起振的作用,其值為33pF左右,晶振頻率選11.0592MHz 。</p><p><b> 3.1.3復位電路</b></p><p> 為了初始化單片機內部的某些特殊功能寄存器,必須利用復位電路,復位后可使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開始正常工作。&
42、lt;/p><p> 單片機的復位是靠外電路來實現(xiàn)的,在正常運行情況下,只要RST引腳上出現(xiàn)兩個機器周期時間以上的高電平,即可引起系統(tǒng)復位,但如果RST引腳上持續(xù)為高電平,單片機就處于循環(huán)復位狀態(tài)。復位后系統(tǒng)將輸入/輸出(1/0)端口寄存器置為FFH,堆棧指針SP置為07H, SBUF內置為不定值,其余的寄存器全部清0,內部RAM的狀態(tài)不受復位的影響,在系統(tǒng)上電時RAM的內容是不定的。復位操作有兩種情況,即上電復位
43、和手動(開關)復位。本系統(tǒng)采用上電復位方式。圖2-1中R19和C20組成上電復位電路,其值R取為10KΩ, C取為10uF。</p><p> 3.2 USB下載部分</p><p> 圖3-2 USB下載部分電路圖</p><p> USB 轉串口芯片 CH340G</p><p><b> 1 概述
44、 </b></p><p> CH340G 是一個 USB 總線的轉接芯片,實現(xiàn) USB 轉串口、USB 轉 IrDA 紅外或者 USB 轉打印口。 在串口方式下,CH340G 提供常用的 MODEM 聯(lián)絡信號,用于為計算機擴展異步串口,或者將普通的&
45、#160;串口設備直接升級到 USB 總線。 在紅外方式下,CH340 外加紅外收發(fā)器即可構成 USB 紅外線適配器,實現(xiàn) SIR 紅外線通訊。</p><p><b> 2 特點 </b></p><p> ● 全速 USB 設備接口,兼容 USB V2.0,外圍元器件只需要晶
46、體和電容。 </p><p> ● 仿真標準串口,用于升級原串口外圍設備,或者通過 USB 增加額外串口。 </p><p> ● 計算機端 Windows 操作系統(tǒng)下的串口應用程序完全兼容,無需修改。 </p><p> ● 硬件全雙工串口,內置收發(fā)緩沖區(qū),支持通訊波特率 50bps~2Mbps。 </p><p> ● 支
47、持常用的 MODEM 聯(lián)絡信號 RTS、DTR、DCD、RI、DSR、CTS。 </p><p> ● 通過外加電平轉換器件,提供 RS232、RS485、RS422 等接口。 ● 支持 IrDA 規(guī)范 SIR 紅外線通訊,支持波特率 2400bps 到 115200bps。 </p><p> ● 由于是通過 USB 轉換的串口,所以只能做到應用層兼容,而無法絕對相同。
48、</p><p> ● 軟件兼容 CH341,可以直接使用 CH341 的驅動程序。 </p><p> ● 支持 5V 電源電壓和 3.3V 電源電壓。 </p><p> ● 提供 SSOP-20 無鉛封裝,兼容 RoHS。</p><p><b> 3.3 數(shù)碼管</b></p><
49、;p> 3.3.1 數(shù)碼管原理介紹 </p><p> 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管; 按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應用時應將公共極
50、COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應用時應將公共極COM接到地線GND上,當某一字段發(fā)光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。 </p><p> 數(shù)碼管要正常顯示,就要用驅動電路來驅動數(shù)
51、碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。 </p><p> 靜態(tài)驅動也稱直流驅動。靜態(tài)驅動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態(tài)驅動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅動,要知道一
52、個89S51單片機可用的I/O端口才32個呢:),實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。 </p><p> 數(shù)碼管動態(tài)顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼
53、時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人
54、的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p> 3.3.2數(shù)碼管電路設計 </p><p> 如下圖所示為一位共陰極數(shù)碼管的硬件電路連接圖,由于數(shù)碼管內部實際為8個LED燈,如果把LED的陽級直接單片機的IO的口,會使LED通過的電流過大從而把數(shù)碼管燒毀,因此在設計的時候在LED的陽級和
55、單片機的IO之間加上了限流電阻從而起到限流作用。根據(jù)經(jīng)驗,這里選取了1KΩ電阻。程序編寫的時候我們預先根據(jù)要顯示的字符,編寫了個對應要顯示的數(shù)組,這樣可以使程序更加簡化。 </p><p> 圖3-3a 共陰極數(shù)碼管的管腳平排列和內部結構圖</p><p> 3.3.3 74LS573芯片</p><p> 圖3-3b 74LS573芯片驅動電
56、路</p><p> 圖3-3c 74LS573芯片引腳圖</p><p><b> 3.4矩陣式鍵盤</b></p><p> STC89C52單片機的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;P1口輸出按鍵信息,在數(shù)碼管上顯示每個按鍵的“0-F”序號。實際電路圖連接如圖3-4所
57、示</p><p> 3-4 矩陣式鍵盤電路</p><p><b> 3.5 LED燈</b></p><p> LED(Light-Emitting-Diode中文意思為發(fā)光二極管)是一種能夠將電能轉化為可見光的半導體,它改變了白熾燈鎢絲發(fā)光與節(jié)能燈三基色粉發(fā)光的原理,而采用電場發(fā)光。據(jù)分析,LED的特點非常明顯,壽命長、光效高、無
58、輻射與低功耗。</p><p> 圖3-5 LED電路圖</p><p> 3.6 LCD1602液晶顯示屏</p><p> 工業(yè)字符型液晶,能夠同時顯示16x02即32個字符。(16列2行),</p><p> 有16個引腳,通過D0~D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令,引腳圖如3-6。</p><p>
59、 圖3-6 LCD1602引腳示意圖</p><p> LCD1602液晶顯示屏引腳功能如表3-6所示:</p><p> 表3-6 LCD1602引腳功能</p><p> 1602液晶模塊內部的控制器共有11條控制指令,如表3-6b所示:</p><p> 表3-6b 控制命令表 </p><p>
60、 1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)</p><p> 指令1:清顯示,指令碼01H,光標復位到地址00H位置。</p><p> 指令2:光標復位,光標返回到地址00H。</p><p> 指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或
61、者右移。高電平表示有效,低電平則無效。</p><p> 指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。</p><p> 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標。</p><p>
62、 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。</p><p> 指令7:字符發(fā)生器RAM地址設置。</p><p> 指令8:DDRAM地址設置。</p><p> 指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,
63、此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。</p><p><b> 指令10:寫數(shù)據(jù)。</b></p><p><b> 指令11:讀數(shù)據(jù)。</b></p><p> 將lcd的引腳與單片機連接,通過單片機實現(xiàn)對顯示的輸出,電路圖實現(xiàn)如下:</p><p> 圖3-6 LCD16
64、02接口電路圖</p><p><b> 3.7鬧鐘</b></p><p> 鬧鐘模塊采用蜂鳴器實現(xiàn),蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電。</p><p> 通過單片機的p1.7引腳輸出的電平變化來控制蜂鳴器的導通與否,設計如下:</p><p> 3-7 蜂鳴器電路圖</p>
65、<p><b> 4 軟件設計</b></p><p><b> 4.1 點亮LED</b></p><p> 圖4-1 點亮LED流程圖</p><p> 4.2 數(shù)碼管顯示59秒倒計時</p><p> 圖4-2 數(shù)碼管59秒倒計時流程圖</p><
66、;p> 4.3 矩陣鍵盤檢測及控制流程圖</p><p><b> 否</b></p><p><b> 是</b></p><p> 圖4-3矩陣鍵盤檢測及控制流程圖</p><p> 鍵盤采用低電平掃描的方式,依次給每行賦低電平,按鍵按下時,相對應的所在列的端口也是低電平,不斷
67、掃描,然后執(zhí)行相應操作,第一個按鍵控制定時器的啟動與停止,第二個按鍵控制對應LED燈的亮滅,第三個按鍵使時間加一,第四個按鍵使時間減一,具體程序見附錄。</p><p><b> 4.4 串口通信</b></p><p><b> N</b></p><p><b> NY</b></p
68、><p><b> N</b></p><p><b> Y</b></p><p><b> NN</b></p><p><b> YY</b></p><p> 圖4-4a 查詢發(fā)送流程圖
69、 圖4-4b 查詢接受流程圖</p><p> 4.5 LCD1602液晶顯示年月日,時間可用鍵盤調節(jié)</p><p><b> 5 調試與結果分析</b></p><p> 單片機應用系統(tǒng)的調試包括硬件和軟件兩部分,但是他們并不能完全分開。一般的方法 是排除明顯的硬件故障,再進行綜合調試,排除可能的軟/硬件故障。</p>
70、;<p> 硬件可能會因為在焊的過程中出現(xiàn)漏焊或元器件焊錯的情況,通過串口軟件將程序下載到單片機中,若出現(xiàn)的現(xiàn)象與理論上的功能不相同時,則應該學會排除各種可能出現(xiàn)的錯誤,可以用電壓表對各個焊點進行測量驗證,發(fā)現(xiàn)問題后及時改正,直到出現(xiàn)理想的結果。</p><p><b> 5.1 測試儀器</b></p><p><b> 表5 測試儀
71、器</b></p><p> 5.2軟件測試平臺 Keil C51</p><p> Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調試工具,全
72、Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。Keil C51工具包的整體結構,其中uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調試、仿真等整
73、個開發(fā)流程。</p><p> 調試的主要方法 : </p><p> 1. 啟動Keil c51 </p><p> 2. 新建一個工程。Project菜單——〉New project ,選擇好我們要保存的文件夾后,鍵入Frist 保存。接著彈出CPU類型選
74、擇框,我們選擇最常用的AT89C51,按確定。 </p><p> 3. 在工程中加入文件。新建一個文件,文件菜單File——〉New,我們再選擇:文件菜單File——〉Save As? (另存為)彈出 對話框后,我們文件名框中鍵入First.c(注意文件后綴名是 .c)保存。C文件建好啦?,F(xiàn)在我們把文件加入到工程中去。 點擊Target
75、160;1前面的+號,右鍵單擊Source Group 1——〉選擇Add Files to Group ,Source Group 1,選擇添加 Add。編譯運行,檢查程序是否有錯誤。</p><p><b> 5.3 測試結果</b></p><p> 通過對
76、各個程序的實驗與驗證,發(fā)現(xiàn)本次設計的單片機時間顯示中,利用定時器使時分秒按一定規(guī)律走動,時間變動的快慢與實際時間的變動仍有一定的差距,其誤差主要來源包括晶體頻率誤差,定時器溢出誤差, 延遲誤差。晶體頻率產(chǎn)生震蕩,容易產(chǎn)生走時誤差;定時器溢出的時間誤差,本應這一秒溢 出,但卻在下一秒溢出,造成走時誤差;延遲時間過長或過短,都會造成與基準時間產(chǎn)生偏差,造成走時誤差。</p><p><b> 6 總結&l
77、t;/b></p><p> 在這一次的課程設計中,我學到了很多。從硬件到軟件,對單片機的功能用途以及怎樣實現(xiàn)相應的功能有了更深的了解,同時,在實踐中,也培養(yǎng)了對單片機這門課程的興趣,提高了動手能力。</p><p> 本次的課程設計持續(xù)了10天,開始的兩天是熟悉硬件部分,學會看電路圖并把元器件焊道板子對應的地方,這段期間,逐漸學會了怎樣去看電路圖以及對電路圖上的各個模塊進行分析
78、,也了解了單片機最小系統(tǒng)的組成及各個模塊的功能,在焊板子的過程中,也體會到了動手的樂趣,由一開始的不會焊,出現(xiàn)各種錯誤,到后來的熟能生巧,而且能找出錯誤的地方并進行補救,看到自己的進步也是蠻欣慰的。硬件是基礎,硬件正確了,軟件才能發(fā)揮它的作用。后面的幾天便是對軟件的熟悉,通過寫程序,對中斷定時器和串口的概念有了更深的理解,同時也掌握了數(shù)碼管、液晶屏的顯示原理,逐漸能獨立寫出自己想要的程序,只是在寫程序的過程中,很容易出現(xiàn)編譯錯誤,有時可
79、能要花費很長一段時間在找錯誤上面,所以平時寫程序的時候,應當盡量注意語法的規(guī)范性,養(yǎng)成良好的習慣。設計過程中,總會遇到各種調試錯誤,還有設計出來的效果不對,只有認真的比對程序和下到板子上顯示的效果,以及顯示中出錯的情況進行分析,修改程序才能夠事半功倍。這對于將來的工作或者學習中,遇到調試問題,將會有很大的幫助。 </p><p> 當然這次課程設計,提高了知識的應用能力和和實踐能力,同時提高了獨立思考
80、獨立完成任務的能力,當然同組之間,遇到了實在沒辦法解決的問題,也相互的咨詢和討論,加強了大家的合作精神和團結能力。這對以后的學習和工作都有重要意義。 </p><p><b> 7 參考文獻</b></p><p> 【1】郭天祥. 新概念51單片機[M]C語言教程 電子工業(yè)出版社 2009</p><p> 【2】 李群芳.單片微
81、型計算機與接口技術(第三版),電子工業(yè)出版社,2008 </p><p> 【3】 徐海峰.C51單片機項目式編程.清華大學出版社,2011 </p><p> 【4】 李建忠.西安電子科技大學出版社,《單片機原理及應用》,2004</p><p> 【5】郭惠.單片機C語言程序設計完全自學手冊:電子工業(yè)出版社 </p><p&g
82、t; 【6】公茂法.單片機人機接口實例集:航空航天大學出版社 </p><p><b> 附錄1 總電路圖</b></p><p><b> 附錄2 程序清單</b></p><p><b> 1 點亮LED</b></p><p> #include&
83、lt;reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> void delay(){</p><p><b> int i,j;</b></p><p>
84、 for(i=110;i>0;i--)</p><p> for(j=200;j>0;j--);</p><p><b> }</b></p><p> void main(){</p><p><b> while(1){</b></p><p><
85、;b> P0=0XFF;</b></p><p><b> delay();</b></p><p><b> P0=0x00;</b></p><p><b> delay();</b></p><p><b> }</b>&
86、lt;/p><p><b> }</b></p><p> 2數(shù)碼管59秒倒計時</p><p> #include <reg52.h> </p><p> #define uint unsigned int </p><p> #define uchar unsig
87、ned char </p><p> uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> unsigned char MAIN_Temp;</p><p> unsigned char MAIN_Cout =0;</p><p&
88、gt; sbit beep=P2^0;</p><p> sbit wei1=P2^6; </p><p> sbit wei2=P2^7; </p><p> void display(unsigned char value_dat,unsigned char fen) ;</p><p> void Delay(
89、unsigned int time) </p><p><b> { </b></p><p> unsigned int x, y;</p><p> for(x = time; x > 0; x--)</p><p> for(y = 120; y > 0; y--);</p>
90、<p><b> } </b></p><p> int main()</p><p><b> { </b></p><p> TMOD=0x01; </p><p> TH0=(65536-45872)/256; </p>
91、<p> TL0=(65536-45872)%256; </p><p> EA=1; </p><p> ET0=1; </p><p> TR0=1; </p><p><b> while(1) <
92、/b></p><p><b> { </b></p><p> display(MAIN_Cout,fen); </p><p><b> } </b></p><p><b> } </b></p><p>
93、 void display(unsigned char value_dat,unsigned char fen) </p><p><b> { </b></p><p> wei1=1; </p><p> P0=table[value_dat / 10]; </p><p>&
94、lt;b> wei1=0; </b></p><p> Delay(1); </p><p> wei1=1; </p><p> wei2=1; </p><p> P0=table[value_dat% 10]; </p><p><b&
95、gt; wei2=0; </b></p><p> Delay(1); </p><p> wei2=1; </p><p><b> } </b></p><p> void T1_time() interrupt 1</p><p><b&
96、gt; {</b></p><p><b> beep=1;</b></p><p> TH0=(65536-45872)/256; </p><p> TL0=(65536-45872)%256; </p><p> MAIN_Temp++;</p><p> if(
97、MAIN_Temp == 20)</p><p><b> {</b></p><p> MAIN_Temp = 0;</p><p> MAIN_Cout++;</p><p> if(MAIN_Cout == 59)</p><p><b> {</b><
98、/p><p> MAIN_Cout = 0;</p><p><b> beep=0;</b></p><p> Delay(500);</p><p><b> }</b></p><p><b> }</b></p><p&
99、gt;<b> }</b></p><p> 3矩陣鍵盤檢測及控制</p><p> #include <reg52.h></p><p> #define keyp P1</p><p> Unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0
100、x6d,0x7d,</p><p> 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p> unsigned int s=0;</p><p> unsigned int temp;</p><p> unsigned int cont;</p><p>
101、; unsigned int ms;</p><p> //unsigned char num;</p><p> void scanner();</p><p> //void control();</p><p> void display();</p><p> void delays (u
102、nsigned int ms)//ÑÓʱ³ÌÐò</p><p><b> {</b></p><p> unsigned int x,y;</p><p> for (x=ms;x>0;x--)</p><p> for
103、(y=110;y>0;y--);</p><p><b> }</b></p><p> void main(void)//主函數(shù)</p><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0=(65536-50000
104、)/256;</p><p> TL0=(65536-50000)%256;</p><p> EA=1;</p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> while(1)
105、</b></p><p><b> {</b></p><p> scanner();</p><p> display();</p><p><b> }</b></p><p><b> }</b></p>&l
106、t;p> void display()</p><p><b> {</b></p><p><b> P3=0x7f;</b></p><p> P2=table[s/10];</p><p> delays(10);</p><p><b>
107、P3=0xbf;</b></p><p> P2=table[s%10];</p><p> delays(10);</p><p><b> }</b></p><p> void timer0() interrupt 1//中斷子函數(shù)</p><p><b>
108、{</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> temp++;</b></p><p> if(temp==20)</p><p><b> {&
109、lt;/b></p><p> temp=0; </p><p><b> s++;</b></p><p><b> if(s==60)</b></p><p><b> {</b></p><p><b>
110、 s=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void scanner()//鍵盤掃描子函數(shù)</p><p> { un
111、signed int num;</p><p> keyp=0xfe;</p><p> num=~keyp&0xf0;</p><p> if(num!=0x00){</p><p> delays(10);</p><p> num=~keyp&0xf0;</p><p
112、> if(num != 0x00)</p><p><b> {</b></p><p> switch(num)</p><p><b> {</b></p><p> case 0x10:cont=0; break;</p><p> case 0x20
113、:cont=1; break;</p><p> case 0x40:cont=2; break;</p><p> case 0x80:cont=3; break;</p><p> default :break;</p><p><b> }</b></p><p> if(cont
114、==0)</p><p><b> {</b></p><p> delays(10);</p><p> if(cont==0)</p><p><b> {</b></p><p><b> TR0=~TR0;</b></p>
115、<p><b> }</b></p><p><b> }</b></p><p> /*if(cont==1)</p><p><b> {</b></p><p> delays(10);</p><p> if(cont==
116、1)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p><b> }*/</b></p><p> if(cont==2)<
117、/p><p> {delays(10);</p><p> if(cont==2)</p><p><b> {</b></p><p><b> s++;</b></p><p><b> if(s==60)</b></p><
118、;p><b> s=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(cont==3)</p><p><b> {</b></p><p> de
119、lays(10);</p><p> if(cont==3)</p><p><b> {</b></p><p><b> s--;</b></p><p><b> if(s==00)</b></p><p><b> s=59;
120、</b></p><p><b> }}</b></p><p> while(num!=0)</p><p> num=~keyp&0xf0;</p><p><b> }</b></p><p> delays(5);</p>
121、<p><b> }</b></p><p><b> }</b></p><p><b> 4 串口通信</b></p><p> #include <reg51.h> </p><p> #define uchar unsigned c
122、har </p><p> #define uint unsigned int </p><p> uchar rec_data; </p><p> void delay(uint);</p><p> bit rec_flag; </p><p> sbit rec_led = P0^0; <
123、;/p><p> sbit send_led = P0^1; </p><p> void serial_int() interrupt 4</p><p><b> {</b></p><p><b> if(RI) </b></p><p><b>
124、{</b></p><p><b> RI = 0; </b></p><p> rec_data = SBUF; </p><p> rec_led = 1; </p><p> delay(1000);</p><p> rec_flag = 1; </p&g
125、t;<p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> SCON = 0x50; </p><p> TMOD
126、= 0x20; //</p><p> TH1 = 0xfD; /</p><p> TL1 = 0xfD;</p><p> TR1 = 1; </p><p> ES = 1; / </p><p><b> EA = 1; </b></p><p&
127、gt; rec_flag = 0;</p><p> while(1) </p><p><b> {</b></p><p> rec_led = 0; </p><p> send_led = 0; </p><p> if(rec_flag==1) </p>
128、<p><b> {</b></p><p> rec_flag = 0; /</p><p> send_led = 1; / </p><p> delay(1000);</p><p> SBUF = rec_data; </p><p> while(!TI);
129、 </p><p><b> TI = 0; </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void delay(uint
130、 z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }<
131、;/b></p><p> 5 LCD1602液晶屏顯示 </p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> uchar c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于51單片機課程設計--基于51單片機的紅外線設計
- 基于51單片機課程設計
- 51單片機課程設計
- 單片機課程設計—基于51單片機的溫度監(jiān)控系統(tǒng)設計
- 單片機課程設計--基于51單片機的定時鬧鐘設計
- 單片機課程設計-- 基于51單片機的電子時鐘系統(tǒng)
- 基于51單片機的課程設計
- 單片機課程設計--基于51單片機的溫度控制系統(tǒng)設計
- 單片機課程設計——基于51單片機的溫度控制系統(tǒng)設計
- 單片機課程設計--基于51單片機的溫度控制系統(tǒng)設計
- 基于51單片機課程設計報告
- 單片機課程設計--基于51單片機的交通燈
- 51單片機課程設計題目
- 單片機課程設計---基于51單片機的電子鐘設計
- 單片機課程設計--基于mcs-51單片機的溫度采集系統(tǒng)
- 印刷電路板實踐—51單片機最小系統(tǒng)pcb設計
- 51單片機課程設計報告
- 單片機課程設計--基于51單片機的簡易電子琴
- 單片機課程設計--基于單片機的純水機控制電路板設計
- 單片機課程設計--基于51單片機溫度傳感器設計
評論
0/150
提交評論