久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5531|回復: 1
打印 上一主題 下一主題
收起左側

單片機出租車計價器畢業設計論文下載

[復制鏈接]
跳轉到指定樓層
樓主
該帖有一個WIFI模塊資料,一個出租車計價畢業設計

所有資料下載:
網絡模塊.rar (2.82 MB, 下載次數: 53)
出租車計費器畢業設計.doc (337 KB, 下載次數: 64)

濟南鐵道職業技術學院

畢業設計報告摘要

本文介紹了以STC12C5A08AD單片機為核心的多功能出租車計價器的設計 ,闡述了系統軟硬件設計過程及關鍵技術。經測試,本計價器具有計程、計價、計時、等待時間計價等多種計量功能,并且具有存儲、查詢、起步價、起步價里程和每公里價格的預置、價格預置密碼確認、車速顯示、超速提醒、語音服務、清單打印和車內溫度顯示等多種功能。

關鍵詞

出租車計價器  多功能  STC12C5A08AD  軟硬件設計



目   錄
1 引言  ………………………………………………………………………… 1
2 方案論證  …………………………………………………………………… Y
  2.1 主控芯片的選擇  ……………………………………………………… Y
  2.2 鍵盤選擇 ……………………………………………………………… Y
  2.3掃描方式的選擇 ……………………………………………………… Y
  2.4顯示驅動方式選擇 ……………………………………………………… Y
3 系統整體 …………………………………………………………………… Y
  3.1系統整體框圖………………………………………………………………Y
4各單元電路設計……………………………………………………………… Y
  4.1主控單元………………………………………………………………… Y
  4.2模擬出租車車速裝置與里程檢測單元……………………………………Y
  4.3鍵盤控制單元…………………………………………………………… Y
  4.4數碼顯示單元…………………………………………………………… Y
  4.5實時時鐘與等待時間累加單元………………………………………… Y
  4.6語音播報與超速提醒單元……………………………………………… Y
  4.7票據打印單元…………………………………………………………… Y
  4.8車內實時溫度顯示單元………………………………………………… Y
5系統軟件設計………………………………………………………………… Y
6測試方案與測試結果………………………………………………………… Y
  1  系統性能測試項目表………………………………………………… Y
  表2  按鍵模擬設置里程、單程/往返計價測試結果……………………… Y
  表3  預置轉速后計價測試結果…………………………………………… Y
  表4  累計等待時間計價功能測試結果…………………………………… Y
  表5  起步價、起步里程與每公里價格預置功能測試結果………………… Y
  表6  白天/晚上計價標準測試結果  ……………………………………… Y
總結 …………………………………………………………………………… Y
致謝 …………………………………………………………………………… Y
參考文獻…………………………………………………………………………Y
附錄一主程序流程 …………………………………………………… Y
附錄二 計價子程序流程 …………………………………………………… Y
附錄三顯示子程序 …………………………………………………… Y
附錄四時鐘子程序 …………………………………………………… Y
附錄五 溫度傳感器子程序 …………………………………………………… Y



引   言
出租車計價器是出租車營運收費的專用智能化儀表 ,隨著電子技術的發展 ,出租車計價器技術也在不斷進步和提高。國內出租車計價器已經經歷了4 個階段的發展。從傳統的全部由機械元器件組成的機械式,到半電子式即用電子線路代替部分機械元器件的出租車計價器;再從集成電路式到目前的單片機系統設計的出租車計價器。出租車計價器計費是否準確、出租車司機是否超速才是乘客最關心的問題,而計價器營運數據的管理是否方便又是出租車司機最關注的。因此設計出一種既能有效防止司機作弊和超速又能方便司機的計價器尤為重要。因此,本文以單片機STC12C5A08AD為核心設計一款多功能出租車計價器,該計價器能實現里程計價與顯示、數據存儲與查詢、時鐘顯示、超速提醒、語音播報和票據打印等功能。它比市場上的一些計價器使用更方便 ,功能更全,還具有有效防止司機作弊和系統穩定性好的優點。其中的超速提醒功能可以提醒司機和乘客 ,以告誡司機不要超速行駛,以避免交通事故的發生。
方案論證
1、主控芯片選擇
方案一: 用普通的51系列單片機,可以滿足設計要求,但從成本、功耗、運行速度方面不及STC系列單片機。
方案二: 采用增強型STC系列單片機,STC系列單片機具有高速、低功耗、高可靠、強抗干擾,強抗靜電、超低價等優點,因此本設計采用STC12C5A08AD作為系統主控芯片。
2、鍵盤選擇
方案一:采用獨立式鍵盤,由于本設計需要設有單程、往返、暫停、清除、鍵盤預置、價格預置密碼確認等功能鍵,如果采用獨立式鍵盤,編程復雜,對使用者來說,操作十分不方便。
方案二:采用矩陣式鍵盤,編程簡單,無論是按鍵控制還是密碼輸入都很方便,容易被使用者接受和使用。本設計采用此方案。
3、掃描方式選擇
方案一:采用動態掃描顯示,由于本設計需要顯示的內容較多,采用的數碼管位數多。如果采用動態顯示,需要將16 個數碼管分組驅動,占用I/O多,在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,掃描速度跟不上,各位數碼管并非同時點亮,顯示亮度不夠。
方案二:采用靜態顯示,靜態驅動的優點是不存在掃描速度及閃爍問題,因此編程簡單;數碼管位選通由各自獨立74HC595驅動控制,顯示穩定且亮度高。本設計采用此方案。
4、顯示驅動方式選擇
方案一: 采用74HC164做驅動,成本低,接線少,但驅動能力弱,沒有鎖存,數碼管顯示不穩定。
方案二:采用74HC595做驅動,驅動能力強,有鎖存端,數碼管顯示穩定,因此本設計采用此方案。
系統整體方案
  • 系統整體框圖

圖 1 系統整體框圖
整體方案設計方框圖如圖 1 所示,整個系統由單片機STC12C5A08AD控制,整個系統由光電傳感器速度采集部分, DS1302 時鐘電路、ISD2560語音播報電路、票據打印電路、溫度采集、模擬車速裝置、超速提醒和價格預置等組成,采用 4×4矩陣式鍵盤控制、顯示電路采用74HC595驅動。
各單元電路設計
1、主控單元
本設計采用STC系列單片機STC12C5A08AD控制,利用單片機采集按鍵及車速模擬傳感器信息完成各種控制,并利用其內部存儲器,當通過按鍵設定一次數據完畢后(如:晝夜單價、等候時間、起租里程、起租金額等),系統就自動調用存儲程序,將數據信息保存在芯片內;當系統重新上電時,自動調用讀存儲器程序,將存儲器內的數據信息,讀到緩存單元中,供主程序使用。由于保存在單片機中的數據是不能隨意進行改動,因此它具有防作弊功能。此外出租車營運過程中的一些營運數據,如:單次出租的營運額和營運里程、一段時間內的營運總額和總路程等,也存儲在單片機中,以便出租車公司及司機查詢,使出租車司機與出租公司更便于管理營運數據。
2、模擬出租車車速裝置與里程檢測單元
本單元控制部分采用一片STC系列單片機STC12C5A08AD控制,通過改變單片機送給步進電機驅動模塊的脈沖信號頻率,控制步進電機的轉速。步進電機帶動轉盤轉動,用光電傳感器同步檢測轉盤的轉速信號,送主控單元單片機處理,轉換成實時車速顯示。本單元設有三個按鍵,一個為轉速預置控制鍵,另外兩個是預設轉速加減鍵,預設轉速可以在本單元同步顯示。模擬出租車車速裝置與里程測量單元電路原理如圖3所示。

圖2 主控單元電路圖
3、鍵盤控制單元
  根據題目要求,需要設置的鍵盤較多,故本設計采用4×4矩陣式鍵盤,鍵盤功能如圖4所示。按單程/往返按鍵一次,進行單程計價,連續按單程/往返按鍵兩次,進行往返計價;到達目的地后,按“暫!辨I,計價器可暫停計價;反復按“查詢”鍵,計價器能依次顯示總等待時間,里程數和金額數;按“清除”鍵,能將記錄的數據(里程、等待時間與價格等)清0;按價格預置/時間調整鍵一次,進入起步價、起步價里程和每公里價格的預置狀態,輸入4位密碼后,開始預置起步價,預置完后按價格預置/時間調整鍵確認,再預置起步價里程每公里價格,每預置完一項,按價格預置/時間調整鍵一次,進行確認;連續按價格預置/時間調整鍵兩次,進入時間調整程序,通過數字鍵輸入時間即可。按下“按鍵模擬“鍵,進入按鍵模擬狀態,每按一次,行車里程加0.1公里。

圖3 模擬出租車車速裝置與里程測量單元

圖4  4×4矩陣式鍵盤
4、數碼顯示單元
本設計采用16位的高亮度LED數碼管分別顯示行車里程數(4 位),金額數(4 位),實時車速(4 位),另外4位輪流顯示車內實時溫度(紅)、實時時鐘(黃)和累計等待時間(綠),顯示內容分別用紅黃綠指示燈示意。當為空車時,為了節電,只顯示實時時間和車內實時溫度 ,為供司機查看時間提供方便;當司機要查詢以往的營運數據時,按查詢鍵時,計價器依次顯示總等待時間、里程數和金額數;有乘客時顯示營運的實時車速、程數、金額數,輪流顯示車內實時溫度(紅)、實時時鐘(黃)和累計等待時間(綠)。顯示驅動器采用16片串入并出8位移位寄存器74HC595級聯。顯示電路如圖5所示。

圖5  數碼顯示單元
5、實時時間與等待時間單元
時間計時采用美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片DS1302計價器在出租車空車行駛時顯示實時時鐘;有乘客時,輪流顯示實時時間和累計等待時間。
累計等待時間的確定方法是:當單片機檢測車速低于5公里/小時時,啟動內部定時器開始計時,車速高于5公里/小時時,停止計時,單片機將各次等待時間累加,作為總等待時間。等待時間顯示與實時時間顯示輪流進行。
利用DS1302的實時時鐘作為白天/晚上單價自動轉換的一個基準 ,通過 DS1302 獲取時間信息分辨白天/晚上 ,然后調用內部程序存儲器信息,獲取白天/晚上的單價及起始價 ,便開始計價并顯示時間、里程和金額等信息;當實時時間在21:00至次日5:00時,執行晚上收費標準。DS1302STC12C5A08AD的連接圖如圖6所示。
6、語音播報與超速提醒單元
為使計價器更加微型化、智能化、人性化,我們設計了語音播報與超速提醒功能。語音芯片采用集成度較高ISD2560芯片,其最大特點是采用E2PROM進行模擬信息直接存取而不必經過A/D和D/ A轉換。它內部帶有話筒放大器、自動增益控制時鐘、揚聲器驅動電路等,采用+ 5V電源供電。語音模塊與單片機的接口如圖7所示。設計過程中 ,先將固定語音部分(上、下車、超速提醒用語)信息存儲到ISD2560內部的不同起點地址中。營運過程中根據上、下車與超速的不同營運狀態來實現不同語音功能播放。在語音芯片工作時,系統首先主程序調用放音處理程序,根據發音地址尋找ISD2560中的發音單元 ,然后將信號送到揚聲器發出聲音。
當空車燈掰下乘客上車時:ISD2560語音播報電路進行語音播報1(歡迎乘客乘坐本出租車…);當空車燈打上,乘客下車時:進行播報2(謝謝再次乘坐本出租車,請交金額…);當單片機檢測到超速信息時,進行播報3(車輛超速、請減速。

圖7 語音播報與超速提醒單元電路
7、票據打印單元
本系統設有票據打印功能,當出租車到達指定地點,司機翻起空車牌,便產生一個信號通知單片機,單片機啟動打印服務,將行車的中途等待時間、營運里程、單價、金額、日期及上下車時間等數據打印成出租車專用發票。微型打印機接口電路如圖7所示。該電路采用接口插板方式與單片機相連,這一特點使得計價器的票據打印在功能上與主系統一體化,而在檢查、維修時又可單獨進行。本設計中所用微打是RD系列微型打印機,微型打印機與單片機通過串行接口相連,當所需要打印的數據出現在打印機串行輸入口時,STB只要從高電平轉到低電平,再從低電平轉到高電平,就可把數據送入打印機。這時打印機將 BUSY 線置為忙(高電平),禁止新數據輸入;當打印機取走數據并處理完畢后,BUSY線被置為閑(低電平),同時送出回答脈沖ACK通知系統,可以再次輸入數據。
8、車內實時溫度顯示單元
本設計增加了車內實時溫度檢測功能,我們采用溫度芯片DS18B20。DS18B20是DALLAS公司生產的一線式數字溫度傳感器,具有3引腳TO-92小體積封裝形式。測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數字量方式串行輸出。CPU只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。
系統軟件設計
在主程序模塊中,需要完成對各芯片的初始化,各中斷的初始化(外部中斷 0、外部中斷1、T0的初始化),另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和金額寄存器,并對它們進行初始化。然后,主程序將根據各標志寄存器的內容,分別完成車速檢測、顯示、累計等待時間、計程和計價等不同的操作。主程序流程圖如圖8所示。
單片機采集并判斷空車燈信號及路程檢測傳感器信號,當出租車啟動時 ,單片機檢測到光電傳感器的脈沖信號并進行里程計算。當無乘客時,單片機調用實時時間芯片DS1302 程序和串口顯示驅動程序,用4只LED進行時鐘顯示;當空車燈掰下乘客上車時: ISD2560 語音播報電路進行語音播報1 (歡迎乘客乘坐本出租車 …),通過DS1302 獲取時間信息分辨白天/晚上,然后調用內部程序存儲器信息,獲取白天/晚上的單價及起始價,便開始計價并顯示時間、里程和金額等信息;當空車燈打上,乘客下車時:進行播報 2 (謝謝再次乘坐本出租車 ,請交金額 …) ,并打印好票據 ,單片機將營運數據信息存儲到內部存儲器中 ;等出租車再次啟動后,本次金額與里程等信息清零復位 ,就此完成一次計價。當單片機檢測到超速信息時,進行播報3(車輛超速,請減速。


測試方案與測試結果
表1  系統性能測試項目表            
題目要求
測試項目與方法
測試結果
結果
描述




1、按單程/往返鍵,利用按鍵模擬設置里程,觀察數碼管顯示信息;
測試數據見表2
本設計很好的完成了題目基本要求的各項內容
2、按單程/往返鍵,然后用按鍵模擬,連續調整里程,觀察數碼管顯示信息;
按單程鍵后,用按鍵模擬,行程按0.1公里步距遞進,動態顯示公里與金額數
3、按暫停鍵,觀察計價器的信息;
在正常計價狀態下按下暫停鍵,停止計價
4、按清除鍵,觀察數碼管的顯示狀態;
除實時時間顯示正常外,其他各數碼管均顯示零
5、反復按查詢鍵,觀察顯示內容。

按查詢鍵,顯示里程數,再按查詢鍵,顯示金額數




利用鍵盤預置轉速,利用數字鐘計時,測試5分鐘,觀察車速、里程、金額各項顯示
測試數據見表3所示
本系統能很好的完成題目發揮部分的各項要求
等待時間計價功能:通過不斷改變轉速設置值,各測試5分鐘,觀察等待時間、里程和價格顯示情況
測試數據見表4所示
起步價、起步價里程與每公里價格預置功能測試,按價格預置鍵一次,輸入4位密碼后,預置起步價,起步價里程每公里價格,設置轉盤轉速,測試5分鐘,觀察顯示信息
測試數據見表5所示




語音播報功能測試:接通和斷開模擬空車燈開關,檢測播報情況;設置車速100公里/小時,檢測超速提示情況
按設置內容正常播報

打印功能測試:按暫停鍵后,啟動打印機打印里程與金額,觀察打印結果
打印結果與顯示相符
白天/晚上計價標準測試:調整DS1302時間2100至次日500時中任意時間,設置車速,測試5分鐘,觀察里程和金額等信息
測試數據見表6所示
溫度顯示
能輪流顯示實時溫度

表2  按鍵模擬設置里程,單程/往返計價測試結果
金額(元)            里程(公里
單程金額
往返金額
誤差
理論值
顯示值
理論值
顯示值
10.0
22.0
22.0
18.5
18.5
0
15.0
32.0
32.0
26.0
26.0
0
25.0
52.0
52.0
41.0
41.0
0
40.0
82.0
82.0
63.5
63.5
0
60.0
122.0
122.0
93.5
93.5
0
表3  預置轉速后計價測試結果

預設轉速R/min
實時車速顯示
(公里/時)
里程(公里)
價格 /
誤差
單程
往返
觀測5分鐘
10
10.0
50.0
102.0
78.5
0
15
15.0
75.0
152.0
116.0
0
25
25.0
125.0
252.0
191.0
0
40
40.0
200.0
402.0
303.5
0
55
55.0
275.0
552.0
416.0
0
表4  累計等待時間計價功能測試結果

轉速/min
等待時間
里程
(公里)
金額(元)
誤差
單程
往返
0
各觀測5分鐘
3
5
15.0
34.0
27.5
0
5
5
25.0
54.0
42.5
0
10
0
50.0
102.0
78.5
0
20
0
100.0
202.0
153.5
0
40
0
200.0
402.0
303.5
0
總計

10
390.0
794.0
605.5
0

表5  起步價、起步價里程與每公里價格預置功能測試結果
起步價(元)
起步里程(公里)
每里價格(元)
測試
轉速R/min
里程
(公里)
價格/
單程
往返
單程
往返
6.0
4.0
2.0
1.5
觀測
5分鐘
10
50.0
98.0
75.0
8.0
3.0
2.0
1.0
25
125.0
252.0
130.0
5.0
2.0
3.0
2.0
30
150.0
449.0
301.0
10.0
5.0
2.0
1.0
50
250.0
500.0
255.0
時間段/
起步價
(元)
起步里程(公里)
每公里價格/
公里
(公里)
價格/
單程
往返
單程
往返
8---10
8.0
3.0
2.0
1.5
10.0
22.0
18.5
12---16
8.0
3.0
2.0
1.5
20.0
42.0
33.5
22---24
8.0
3.0
2.5
2.0
10.0
25.5
22.0
3---5
8.0
3.0
2.5
2.0
20.0
50.5
42.0
6  白天/晚上計價標準測試結果



總  結

在本次設計的過程中,我遇到了各種困難和許多沒有預想到情況,但通過自己的努力老師的協作以及同學的幫助,我終于克服了困難,順利完成了本次的設計任務,達到了預期的目的。腳踏實地,認真嚴謹,實事求是的學習態度,不怕困難、堅持不懈、吃苦耐勞的精神是我在這次設計中最大的收益。我想這是一次意志的磨練,是對我實際能力的一次提升,也會對我未來的學習和工作有很大的幫助在這次畢業設計中也使我們的同學關系更進一步了,同學之間互相幫助,有什么不懂的大家在一起商量,聽聽不同的看法對我們更好的理解知識,所以在這里非常感謝幫助我的同學。在此更要感謝我的導師和專業老師,是你們的細心指導和關懷,使我能夠順利的完成畢業論文。在我的學業和論文的研究工作中無不傾注著老師們辛勤的汗水和心血。老師的嚴謹治學態度、淵博的知識、無私的奉獻精神使我深受啟迪。從尊敬的導師身上,我不僅學到了扎實、寬廣的專業知識,也學到了做人的道理。在此我要向我的導師致以最衷心的感謝和深深的敬意。
所設計的多功能出租車計價器不僅功能齊全,而且經過測試,各項測試指標均達到了要求。通過這次設計活動,我在硬件設計、軟件編程方面的能力得到了極大的提高。為以后走向工作崗位積累了不可多得的經驗。這種體驗為我們走好今后的人生路增添了極大的信心。



參考文獻

[1 ] 何立民.單片機應用技術選編[M] .北京:北京航空航天大學出版社 ,1999.
[2 ] 求實科技.單片機典型模塊設計實例導航[M] . 北京:人民郵電出版社 ,2004.
[3 ] 陳小忠.單片機接口技術實用子程序[M] . 北京:人民郵電出版社 ,2005.
[4 ] 趙晶主.電路設計與制版 Protel99 高級應用[M] . 北京:人民郵電出版社 ,2000.
[5 ] 全國大學生電子設計競賽組委會.全國大學生電子設計競賽獲獎作品精選[M] .北京:北京理工大學出版社 ,2000.
[6 ] 楊恢先 ,黃輝先.單片機原理及應用[M] .長沙:國防科技大學出版社 ,2003.




附錄一
主程序流程

圖8  系統的主程序流程框圖


附錄二
計價子程序流程:

圖9 計價子程序流程圖


附錄三
顯示子程序:
  1. //靜態顯示

  2. #include

  3. #include



  4. //定義定形碼表,共陽極

  5. unsigned char code dispTab[]={

  6. //0   1    2    3    4     5    6    7    8   9    0X03,0X9F,0X25,0X0D,0X99,0X49,0X41,0X1F,0X01,0X09,0XFD,0xff              };

  7. #define uint unsigned int

  8. #define uchar unsigned char

  9. sbit ST_CP              =P2^1;                            //74HC595(12)-ST_CP 上升沿--移位寄存器的數據進入數據存儲寄存器 輸出鎖存器的時鐘信號端口

  10. sbit MR               =P2^0;                             //74HC595(10)-MR 為0將移位寄存器的數據清0

  11. sbit oe     =P2^2;

  12.   }



  13. void sendData(unsigned char sendDat)              //傳送一個字節的數據數據

  14. {              unsigned char i;

  15.               for(i=0;i<8;i++)

  16.               {              if((sendDat&0x01)==0) SDAT=0;

  17.                             else  SDAT=1;

  18.                             _nop_();                            SHCP=0;                            _nop_();

  19.                      SHCP=1

  20.                             sendDat=sendDat>>1;

  21.               }

  22. }

  23. //-----------------------------------------

  24. //靜態顯示函數,模擬串口+74LS595

  25. //參數:*dispBuf顯示緩沖區

  26. //      n顯示位數

  27. void disp(unsigned char data *dispBuf,unsigned char n)

  28. {              unsigned char c, i;

  29.                             for(i=0;i<n;i++)

  30.               {              c=dispBuf[i];                                          //取出待顯示字符

  31.                             sendData(dispTab[c]);              //送出字形碼數據

  32.                             delayn(2000);

  33.               }                  STCP=0;

  34.                             STCP=1;                                                                                    //輸出                                                                                   

  35. }

  36. void xs(void)

  37. {



  38.     disp(dispBuf,sizeof(dispBuf));

  39.               oldTime=a*100;

  40.                                           }

  41.             dispBuf[3] = oldTime/1000;

  42.             dispBuf[2] = oldTime%1000/100;

  43.             dispBuf[1] = oldTime%100/10;

  44.             dispBuf[0] = oldTime0%10;

  45.             disp(dispBuf,sizeof(dispBuf));

  46.                       }

  47.     }








  48. 附錄四
  49.    時鐘子程序:
  50. include

  51. /*****定義DS1302接口*****/

  52. sbit clock_clk = P3 ^ 6;              //ds1302_clk(時鐘線)

  53. sbit clock_dat = P3 ^ 5;              //ds1302_dat(數據線)

  54. sbit clock_Rst = P3 ^ 4;              //ds1302_Rst(復位線)



  55. /*****定義累加器A中的各位*****/

  56. sbit a0   = ACC ^ 0;

  57. sbit a1   = ACC ^ 1;

  58. sbit a2   = ACC ^ 2;

  59. sbit a3   = ACC ^ 3;

  60. sbit a4   = ACC ^ 4;

  61. sbit a5   = ACC ^ 5;

  62. sbit a6   = ACC ^ 6;

  63. sbit a7   = ACC ^ 7;



  64. /*****DS1302驅動程序(底層協議)*****/

  65. void clock_out(unsigned char dd)

  66. {

  67.               ACC=dd;

  68.               clock_dat=a0; clock_clk=1; clock_clk=0;

  69.               clock_dat=a1; clock_clk=1; clock_clk=0;

  70.               clock_dat=a2; clock_clk=1; clock_clk=0;

  71.               clock_dat=a3; clock_clk=1; clock_clk=0;

  72.               clock_dat=a4; clock_clk=1; clock_clk=0;

  73.               clock_dat=a5; clock_clk=1; clock_clk=0;

  74.               clock_dat=a6; clock_clk=1; clock_clk=0;

  75.               clock_dat=a7; clock_clk=1; clock_clk=0;

  76. }



  77. /*****DS1302寫數據(底層協議)*****/

  78. void write_clock(unsigned char ord, unsigned char dd)

  79. {

  80.               clock_clk=0;

  81.               clock_Rst=0;

  82.               clock_Rst=1;

  83.               clock_out(ord);

  84.               clock_out(dd);

  85.               clock_Rst=0;

  86.               clock_clk=1;

  87. }



  88. /*****DS1302寫入字節(底層協議)*****/

  89. unsigned char clock_in(void)

  90. {

  91.               clock_dat=1;

  92.               a0=clock_dat;

  93.               clock_clk=1; clock_clk=0; a1=clock_dat;

  94.               clock_clk=1; clock_clk=0; a2=clock_dat;

  95.               clock_clk=1; clock_clk=0; a3=clock_dat;

  96.               clock_clk=1; clock_clk=0; a4=clock_dat;

  97.               clock_clk=1; clock_clk=0; a5=clock_dat;

  98.               clock_clk=1; clock_clk=0; a6=clock_dat;

  99.               clock_clk=1; clock_clk=0; a7=clock_dat;

  100.               return(ACC);

  101. }



  102. /*****DS1302讀數據(底層協議)*****/

  103. unsigned char read_clock(unsigned char ord)

  104. {

  105.               unsigned char dd=0;

  106.               clock_clk=0;

  107.               clock_Rst=0;

  108.               clock_Rst=1;

  109.               clock_out(ord);

  110.               dd=clock_in();

  111.               clock_Rst=0;

  112.               clock_clk=1;

  113.               return(dd);

  114. }

  115. /*****END*****/
復制代碼

附錄五

     溫度傳感器子程序:

  1. #define  DQ  P3_7                                            //定義DS18B20總線I/O

  2. /*****延時子程序*****/

  3. void Delay_DS18B20(int num)

  4. {

  5.               while(num--) ;

  6. }



  7. /*****初始化DS18B20*****/

  8. void Init_DS18B20(void)

  9. {

  10.               unsigned char x=0;

  11.               DQ = 1;                                                //DQ復位

  12.               Delay_DS18B20(8);                 //稍做延時

  13.               DQ = 0;                                                //單片機將DQ拉低

  14.               Delay_DS18B20(80);                //精確延時,大于480us

  15.               DQ = 1;                                                //拉高總線

  16.               Delay_DS18B20(14);

  17.               x = DQ;                                                  //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗

  18.               Delay_DS18B20(20);

  19. }



  20. /*****讀一個字節*****/

  21. unsigned char ReadOneChar(void)

  22. {

  23.               unsigned char i=0;

  24.               unsigned char dat = 0;

  25.               for (i=8;i>0;i--)

  26.               {

  27.                               DQ = 0;                                            // 給脈沖信號

  28.                               dat>>=1;

  29.                               DQ = 1;                                            // 給脈沖信號

  30.                               if(DQ)

  31.                               dat|=0x80;

  32.                               Delay_DS18B20(4);

  33.               }

  34.               return(dat);

  35. }



  36. /*****寫一個字節*****/

  37. void WriteOneChar(unsigned char dat)

  38. {

  39.               unsigned char i=0;

  40.               for (i=8; i>0; i--)

  41.               {

  42.                               DQ = 0;

  43.                               DQ = dat&0x01;

  44.                               Delay_DS18B20(5);

  45.                               DQ = 1;

  46.                               dat>>=1;

  47.               }

  48. }

  49. /*****讀取溫度*****/

  50. unsigned int ReadTemperature(void)

  51. {

  52.               unsigned char a=0;

  53.               unsigned char b=0;

  54.               unsigned int t=0;

  55.               float tt=0;

  56.               Init_DS18B20();

  57.               WriteOneChar(0xCC);               //跳過讀序號列號的操作

  58.               WriteOneChar(0x44);               //啟動溫度轉換

  59.               Init_DS18B20();

  60.               WriteOneChar(0xCC);               //跳過讀序號列號的操作

  61.               WriteOneChar(0xBE);               //讀取溫度寄存器

  62.               a=ReadOneChar();                               //讀低8位

  63.               b=ReadOneChar();                              //讀高8位

  64.               t=b;

  65.               t<<=8;

  66.               t=t|a;

  67.               tt=t*0.0625;

  68.               t= tt*10+0.5;                               //放大10倍輸出并四舍五入

  69.               return(t);

  70. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:204543 發表于 2017-5-24 23:16 | 只看該作者
這個有pcb原理圖  和porteus 仿真嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人高清视频在线观看 | 偷拍自拍网站 | 国产成人在线视频播放 | 欧美福利 | 欧美色综合一区二区三区 | 草b视频 | 尤物视频在线免费观看 | 激情欧美日韩一区二区 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 成人av网站在线观看 | 欧美阿v | 色眯眯视频在线观看 | 欧美h视频| 一区二区中文字幕 | 久久久精彩视频 | 综合久久99 | 色视频网站免费 | 成人毛片视频在线播放 | 在线成人 | 久久国产精品亚洲 | 国产一区二区视频在线观看 | 国产精品久久久久久久久久久久久 | 亚洲精品久久久一区二区三区 | 国产精品免费一区二区 | 欧美性一区二区三区 | 亚洲欧美中文日韩在线v日本 | 一区二区成人 | 日韩欧美在线不卡 | 国产免费一区二区 | 97国产超碰| 精品一区av | 欧美激情精品久久久久久变态 | 亚洲视频免费观看 | 成人精品国产 | 中文av在线播放 | 亚洲色图插插插 | 超碰在线97国产 | 日韩在线三级 | 天堂一区二区三区 | h小视频 | av毛片在线播放 |