【正文】
P 0217P 0118P 0019V C C20B U S Y21V D D22P 0423NC24NC25NC26NC27NC28U1W T 5 88 DD1I N 40 07D2I N 40 07V C C12J1C O N 2da t aP 30P 31R 1 I N13R 2 I N8T 1 I N11T 2 I N10GND15V+2V6VCC16R 1 O U T12R 2 O U T9T 1 O U T14T 2 O U T7C 1+1C 1 3C 2+4C 2 5U523 2P 31G N DC51U F / 50 V X 4C4 C7 C6 P 30V C CG N DV C C162738495J3D B 9R31KD3P O W E RC847 0U FC910 4C 1010 4V C C123J45VC 1110 4112233J5 Q180 50Q280 50V C CV C CR 122KR 1310 KR 14R E S 2Q380 50V C CRESR E S1 2 3 4 5 6 7 8 9J6C O N 9abfcgdeD P Y76421910abcdefg5dpdpC13C28D S 1D P YabfcgdeD P Y76421910abcdefg5dpdpC13C28D S 2D P YA A AB B BC C CD D DE E EF F FG G GR 1547 0D4L E DK9 服務(wù)語按鍵1 2 3 4 5 6 7 8 9J251 0Ω * 8R 1610 KR 1710 KV C C V C C 圖 1 系統(tǒng)原理圖 圖 2 PCB圖 19 附件 2. 程序清單 ORG 0000H。這幾個月的設(shè)計是對過去所學(xué)知識的系統(tǒng)提高和擴充的過程,為今后的發(fā)展打下了良好的基礎(chǔ)。 通過這次畢業(yè)設(shè)計,使我深刻地認識到學(xué)好專業(yè)知識的重要性,也理解了理論聯(lián)系實際的含義,并且檢驗了大學(xué)三年的學(xué)習(xí)成果。幾個月的畢業(yè)設(shè)計也已經(jīng)告一段落,經(jīng)過自己不斷的搜索努力以及廖任秀老師的耐心指導(dǎo)和熱情幫助,本設(shè)計已經(jīng)基本完成。在軟件編程的過程中要加注一些必要的注釋,以便出現(xiàn)錯誤時可以方便查找,糾正。同時,在設(shè)計完硬件還沒在仿真軟件中調(diào)試過我就將板子刻出來了,導(dǎo)致上 /下行按鍵的功能不能實現(xiàn),雖然不 用這個按鍵,我也在軟件中實現(xiàn)了設(shè)計要求,但是這些都是我今后要注意的地方,做任何事情考慮要全面。但是在顯示方面雖然考慮到了數(shù)碼管的驅(qū)動電流,但是沒有去計算,也考慮到數(shù)碼管位線如果直接接單片機 I/O 口會將 I/O 口燒壞,所以就用了三極管使其起到開關(guān)的作用,并在基極與I/O口之間接了限流電阻來保護 I/O 口,但是沒有考慮到加了限流電阻后會使三極管不能飽和導(dǎo)通導(dǎo)致,這兩方面都導(dǎo)致了數(shù)碼管不能被點亮。 本系統(tǒng)在硬件設(shè)計上,在選擇單片機型號的時候,考慮到 STC89C51 RC 內(nèi)部有 ISP引導(dǎo)程序,能方便下載程序代碼到單片機內(nèi),實現(xiàn)單片機在線編程。語音模塊可以利用其配套電腦操作軟件,對語音模塊完成所有功能的設(shè)置。 16 結(jié)論與謝辭 本設(shè)計在硬件上主要使用 單片機在線編程、 LED 液晶顯示器、 鍵盤、語音等模塊 ,來實現(xiàn)公交車上行線與下行線的語音報站功能。所以我就將板子上原先設(shè)定的那個上 /下行切換鍵拆下來了。于是我就用萬用表測試了三極管集電極與發(fā)射極之間的電壓,發(fā)現(xiàn)三極管根本不能飽和導(dǎo)通,通過分析,我認為是在單片機 I/O 口與基極之間 1K的電阻在起到對單片機 I/O口的保護作用后不能達到三極管飽和導(dǎo)通的條件,所以我就在基 極焊了個上拉電阻,然后再通電調(diào)試,數(shù)碼管能正常顯示了。于是我將將上拉電阻換成 510Ω,然后又把限流電阻拆掉并在板子上將接限流電阻的地方短接,這樣,通過數(shù)碼管每一段的電流就達到了 10mA,完全能驅(qū)動數(shù)碼管發(fā)光。然后我將程序下載到單片機中,在實物中開始調(diào)試,發(fā)現(xiàn)語音這一塊已經(jīng)可以實現(xiàn)了,但是在實物中發(fā)現(xiàn)數(shù)碼管不能點亮,但是語音模塊能正常工作。 但是在 Protues 仿真中,數(shù)碼管公共極沒有接起開關(guān)作用的三極管,所以我將顯示程序中送顯示時位線的電平反了一下。按下退后播報鍵,能退后播報,并顯示正確的站數(shù)。由于我是根據(jù)起步 /到站按鍵 15 K7來控制的 55H 單元來判斷顯示是否要加一的,而且 K7 按一次播放起步語音,再次按動播放到站語音,所以我要在播放到站語音的時候顯示加一,也就是 K7 按第二次的時候顯示才加一,當(dāng)顯示到達 40 后,下一次就又從 1 開始顯示,實現(xiàn)了這個功能。觸發(fā)的每 個語音地址數(shù)據(jù)或者停止命令,也通過波形顯示出來了。當(dāng)我按鍵按下的時候出現(xiàn)波形,根據(jù)這個波形看是否是我要發(fā)送的數(shù)據(jù)。 在仿真的過程中,在原理圖設(shè)計時用了兩個一位的共陰數(shù)碼管,且在公共端接了8050 三極管后再接到單片機的 I/O 口的,但在 Protues 仿真軟件中就直接選用兩位一體的共陰數(shù)碼管,然后將位線直接接到單片機的 I/O 口。一般 情況下,不用對按鍵釋放的后沿進行處理,也能滿足要求。所以要判斷一個按鍵是否真正按下就需要把這些干擾去掉。 開關(guān)信號存在抖動干擾的問題,在單片機設(shè)計中常用軟件的方法消除抖動。分析干擾的來源,再根據(jù)系統(tǒng)設(shè)計有效的抗干擾方法。 開 始P 1 . 0 口 清 零5 m sP 1 . 0 口 置 1發(fā) 送 的 數(shù) 據(jù) 位 是低 電 平 嗎 ?延 時 6 0 0 U SP 1 . 0 口 清 零2 0 0 U S延 時 2 0 0 U SP 1 . 0 口 置 一2 0 0 U S8 位 數(shù) 據(jù) 發(fā) 送完 了 嗎 ?結(jié) 束YNYNY 圖 36 一線發(fā)碼子程序流程圖 14 4 軟件抗干擾技術(shù) 在單片機控制系統(tǒng)中,正確的采用軟件抗干擾技術(shù),與硬件干擾措施構(gòu)成雙層抗干擾防線,肯定能大大提高控制系統(tǒng)的可靠性。在本系統(tǒng)中,用到的命令就只有停止命令。如果要發(fā)送的數(shù)據(jù)位為 0,則要使數(shù)據(jù)信號線(即單片機 腳)上高電平與低電平數(shù)據(jù)占空比為 1:3,如果要發(fā)送的數(shù)據(jù)位為 1,則要使數(shù)據(jù)信號線(即單片機 腳)高電平與低電平數(shù)據(jù)占空比為 3: 1。要發(fā)送的數(shù)據(jù)存放在單片機 77H中。在這種模式下,要觸發(fā)語音模塊中的地址,或者觸發(fā)語音模塊中的命令碼,就是通過單片機 向語音模塊 P03 口發(fā)送地址或命令碼的數(shù)據(jù)實現(xiàn)的。 下行線按鍵處理子程序的設(shè)計流程圖如圖 35所示。 上 行線按鍵處理子程序的設(shè)計流程圖如圖 34所示。 55H 存放語音模塊中起步 /到站語的地址數(shù)據(jù), 54H 存放語音模塊中服務(wù)語的地址或者停止命令數(shù)據(jù),最后只需將 55H或者 54H中的數(shù)據(jù)發(fā)送給 77H 即可。 開 始將 是 否 有 鍵 按下 的 標(biāo) 志 F 0 清零將 F 0 置 1有 鍵 按 下 嗎 ?結(jié) 束YN鍵 釋 放 了嗎 ?YN 圖 33 鍵盤掃描子程序流程圖 11 上行線按鍵處理子程序 設(shè)計 要使語音模塊地址中的語音觸發(fā),就要通過單片機 引腳發(fā)送這個地址。 開 始要 顯 示 的 值 大于 4 0 ?拆 分 個 位 與 十位將 各 位 和 十位 分 別 送 顯示結(jié) 束YN 圖 32 顯示子程序流程圖 鍵盤 掃描 子程序設(shè)計 在本系統(tǒng)中,設(shè)置了八個按鍵,其中與 STC89C5 1RC 單片機 ~ 為相連的按鍵是服務(wù)語觸發(fā)按鍵;與 相連的按鍵為起步 /到站按鍵,按一次,播放起步語音,再按一次,播放到站語音,通過這個按鍵,也來控制要顯示的值;與 相連的按鍵為停止語音播放按鍵;與 相連的按鍵為公交車播報越站時,后退播報的按鍵。由于本系統(tǒng)單向公交線上一共有 40 個站,所以在這個地址內(nèi)的數(shù)值不能超過 40,通過動態(tài)顯示將公交車到達站數(shù)顯示出來。軟件編程具體的流程圖如圖31所示。主程序直接調(diào)用這些子程序,結(jié)構(gòu) 清晰明了,又方便調(diào)試和修改程序 。一條線路上有 40 個不同的站名。此配套軟件界面使用相當(dāng)人性化,操作簡單。 在本系統(tǒng)中,軟件設(shè)計也采取模塊程序設(shè)計法。 為了完成上述任務(wù),在進行軟件設(shè)計時,通常把整個過程分成若干個部分,每一部分叫做一個模塊。對于本系統(tǒng),軟件更為重要。 E A / V P31X119X218R E S E T9RD17WR16I N T 012I N T 113T014T115P 1 01P 1 12P 1 23P 1 34P 1 45P 1 56P 1 67P 1 78P 0 039P 0 138P 0 237P 0 336P 0 435P 0 534P 0 633P 0 732P 2 021P 2 122P 2 223P 2 324P 2 425P 2 526P 2 627P 2 728P S E N29A L E / P30T X D11R X D10U2S T C 8 9 C 5 1R11kR21kCOM1COM2Q18 0 5 0Q28 0 5 0V C CabfcgdeD P Y76421910abcdefg5dpdpC13C28D S 1D P YabfcgdeD P Y76421910abcdefg5dpdpC13C28D S 2D P YA A AB B BC C CD D DE E EF F FG G G1 2 3 4 5 6 7 8 9J25 1 0 Ω * 8R 1 61 0 KR 1 71 0 KV C C V C C 圖 26 顯示電路 3 軟件設(shè)計 在進行微機控制系統(tǒng)設(shè)計時,除了系統(tǒng)硬件設(shè)計外,大量的工作就是如何根據(jù)每個生產(chǎn)對象的實際需要設(shè)計應(yīng)用程序。選擇用 510Ω的排阻,那么流過數(shù)碼管每一段的電流大約為 5/510≈ 10mA,這個電流足以點亮數(shù)碼管,使其正常發(fā)光。同時,在基極和 I/O 口接 1K 的電阻,起到保護 I/O 口的作用,但是又由于接了這個 1K 的電阻使基極電流變小,從而導(dǎo)致三極管不能飽和