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