【正文】
字形 碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位元選通 COM 端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位元就顯示出字形,沒有選通的數碼管就不會亮。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與 31 天時可以自動調整,且具有閏年補償功能。 DS1302 用于數據記錄,特別是對某些具有特殊意義的數據點的記錄上,能實現數據與出現該數據的時間同時記錄,因此廣泛應用于測量系統(tǒng)中。 I/O:三線 接口時的雙向數據線 。 圖 26 DS1302 有關日歷、時間的寄存器 11 小時寄存器( 85h、 84h)的位 7 用于定義 DS1302 是運行于 12 小時模式還是 24 小時模式。 秒寄存器( 81h、 80h)的位 7 定義為時鐘暫停標志( CH)。當 WP位為 1 時,寫保護位防止對任一寄存器的寫操作。 圖 28 突發(fā)模式寄存器 四、 此外, DS1302 還有充電寄存器等。DS1302 的控制字如 圖 29。 位 0(最低有效位):如為 0,表示要進行寫操作,為 1 表示進行讀操作。 圖 210 數據讀寫時序 具體操作見驅動程序。當施加的磁場強度達到工作點時,觸發(fā)器輸出高電壓,使三極管導通 ,此時 OC 門輸出端輸出低電壓,這種狀態(tài)通常稱為“開”。 圖 212 A44E 霍爾傳感器連接電路 14 第三章 整體電路的設計 模塊電路的設計 里程電路的設計 出租車中需要一個能準確獲得車輪轉動即路程計量信號的裝置,以獲得標準的脈沖信號送入單片機的定時 /計數器 T0 即 腳,利用單片 機的 T1 計數功能完成一百次的計數后產生一中斷來完成路程的測量(設車輪周長為 1 米,則霍爾傳感器每產生 100 個脈沖便表示車已經行程 ,根據實際情況在程序中進行設置 ) .汽車聯(lián)軸器按圓周間隔嵌入磁鋼,用霍爾傳感器集成芯片 A44E 檢測并輸出脈沖,其工作原理 圖 如 圖 31 所示,霍爾傳感器集成芯片 A44E 有信號轉換、電壓放大、整形輸出等功能,為增加其抗干擾的能力,經過 74LS14 對信號整形后再通過光耦送入單片機相應引腳 ,如 圖 32 所示。它由二級電路構成,第一 級是由開關三極管組成的零偏置放大器,采用開關三極管可以保證放大器具有良好的高頻響應 , 當輸入信號為零或負電壓時,三極管截止,電路輸出高電平;而當輸入信號為正電壓時,三極管導通,此時輸出電壓隨著輸入電壓的上升而下降,這使得速度里程表既可以測量任意方波信號的頻率,也可以測量正弦波信號的頻率。一般共陰極可以不需要接電阻,但共陽極接法中發(fā)光二極管必須外接電阻。此次設計采用共 陽 極。靜態(tài)顯示器接口電路,在位數較多時,電路比較復雜,需要的接口芯片較多,成本也較高。 P0 口的 8 條數據線 至 分別與 74HC573 的 1D8D 相接 ,74HC573 的1Q~ 8Q 分別與 LED 數碼管的 a、 b、 c、 d、 e、 f、 g、 dP 字段相接, P1 口的 至 和 P2 口的 與 分別通過電阻 R1 至 R10 與 VT1 至 VT0 的基極相連接。 P1 口和 P2 口輸出的位選碼是 “ 000000 0010B” ,只有 呈現高電位, VT9 導通, LED9 位被選中因而具備發(fā)光的使能條件; PA 口的段選碼 “ 01001001B” , PA0、 PA PA PA P0A6 呈現 低 電位,數碼管的 a、c、 d、 f、 g 字段被點亮 , LED9 就顯示出 “5” 字,而 LED7,LED8 和 LED10則不會被點亮。如 圖 36 所示。 18 MR1V C C2G N D3P F 14W D O8R S T7W D 16P F 05U5M A X 8 13+ 15 VR S TW D 1圖 3 .1 .5 ( 1 ) 掉電存儲電路原理圖 (吳世光 ) 圖 37 AT24C02 掉電存儲電路原理圖 圖中 R R10 是上拉電阻,其作用是減少 AT24C02 的靜態(tài)功耗,由于AT24C02 的數據線和地址線是復用的,采用串口的方式傳送數據,所以只用兩根線 SCL(移位脈沖)和 SDA(數據 /地址)與單片機傳送數據。另外,在主程序模塊中還需要設置啟動 /清除標志寄存器、里程寄存器和價格寄存器并對他們進行初始化。 當達到目的地時,由于霍爾傳感器沒有送來脈沖信號,就停止計價,顯示當前所應該付的金額和對應的里程數,到下次啟動計價器時,按下 S2 鍵,系統(tǒng)會顯示清零,并重新進行初始化過程。 里程計數中斷服務子程序 每當霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當里程計數器對里程脈沖計滿 1000 次時,就有程序將當前總額 計算出來,使微機進入里程數中 20 斷服務程序中 。 Proteus 軟件提供多種現實存在的虛擬儀器儀表。提供 Schematic Drawing、 SPICE 仿真與 PCB 設計功能,同時可以仿真單片機和周邊設備,可以仿真 51 系列、 AVR、 PIC 等常用的 MCU,并提供周邊設備的仿真,例如 37 LED、示波器等。在計算機上學習電工基礎,模擬電路、數字電路、單片機應用系統(tǒng)等課程,并進行電路設計、仿真、調試等。如 圖 46 所示 。 圖 47 程序加載窗口 25 五、 電路仿真 點擊運行開關,按下查看開關按鍵即可查看行駛價錢,如果是單程以單程價錢計費,在路途中也可以實現暫停計費。 鑷子 夾取元件 。 松香 修復、優(yōu)化焊點,去除焊盤氧化物、輔助熱傳導 。電路原理圖對于電路板的測試、焊接、維修都具有非常重要的意義。 27 電路板的焊接 焊接流程 一、 焊接開始前,整理好桌面及周邊環(huán)境,為電路焊接工作準備各個有條理、整潔的環(huán)境。同樣重要的是檢查和優(yōu)化焊點,一塊合格的電路板是焊 28 點光滑、過度均勻、無毛刺、元器件排列整齊美觀。 四、 單排插針等接插件,可不分次序,便于焊接就好。本作品雖能初步解決出租車計算價錢的問題,但它仍有許多的局限性,首先它不能顯示車行駛的單價,乘客不能清楚具體的單價,其次它沒有采用里程傳感器加密的辦法,給不法司機留下了違法的空間,第三,它沒有語音播報和打印等功能,留下了不少的遺憾。 在論文的編寫過程中,查閱了不少的相關資料,使我對 AT89S51 單片機、 8155 等芯片有了更進一步的了解和掌握,同時也體現了自己專業(yè)知識學得不扎實,特別是在電路制作過程中,由于缺少實際經驗,對單片機的很多功能還不能熟練的掌握。 unsigned char disPbuf[8]={0,0,0,0,0,0,0,0}。 bit flag,fgdc,fgwf,fgcx。 void key()。l0。 } void main(void) { 32 TMOD=0x15。 TL1=(6553650000)%256。 TR1=0。 if(flag==1) { flag=0。 } else { if(fgdc==1) { 33 ja=(lc*15)/10。 TL1=(6553650000)%256。 TR0=1。 } } 34 if(wf==0) { delay(10)。 if(cx==0) { num++。 TR1=1。 disPbuf[6]=x%10。 disPbuf[4]=x%10。 disPbuf[2]=x%10。 disPbuf[0]=x%10。 P0=disPcode[disPbuf[disPcount]]。 disPbuf[0]=i/1000。 disPbuf[3]=i%10。 disPbuf[5]=y/100。 disPcount8。 } P2=disPbit[disPcount]。 TL1=(6553650000)%256。 flag=1。 } } if(cs5) { tccount++。 } } } } 39 附錄二: 基于 AT89S51 單片機出租車計價器系統(tǒng) 整體電路 設計 P 1P 2P 3P 4P 5P 6P 7P 8R S T9P ( R X D )10P ( T X D )11P ( I N T O )12P ( I N T 1)13P ( T 0)14P ( T 1)15P ( W R )16P ( R D )17X T A L 118X T A L 219GND20V C C40P 39P 38P 37P 36P 35P 33P 34P 32E A / V P P31A L E / P R O G30P S E N29P 28P 27P 26P 25P 24P 23P 22P 21U2A T 89 S 51CED I OS C L KS C LS D AD I NL O A DC L KR S TP HRW D I10 u F / 25 VC A P A C I T O RR1 K+ 5VY112 M H zC520 p FC620 p FS1S W P BS2S3S4P P P MR1V C C2GND3P F 14W D O8R S T7W D 16P F 05U5M A X 81 3+ 5VR S TW D 1C1C A PC3C A P12J1C O N 2C2E L E C T R O 1 C4E L E C T R O 1V i n1GND2+ 5V3U1U A 78 051234D1B R I D G E 1GND4X23X12V C C。 if(tcsec==60) { tcsec=0。 if(sec==60) { sec=0。 if(timecount==20) { TR0=0。 } } } void t0() interruPt 1 { T0count++。 P0=disPcode[disPbuf[disPcount]]。 disPbuf[7]=y%10。 disPbuf[4]=y/1000。 disPbuf[1]=i/100。 //位碼 delay(1)。