99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

【工程師6】+實踐類+基于編碼器的快遞車門行程監測系統設計

隨著快遞運輸越來越普遍,由于小規模企業無力改進和大規模企業難以統一調度,無法對快遞安全和完整送到顧客手中進行監控,對快遞小哥誤操作等行為也缺乏有效監控措施這就導致了快遞安全送達的幾率變低,特別是現在快遞越來越向著小、精的方向發展,導致很多快遞公司損失嚴重,顧客也難以信任快遞公司。本設計根據快遞運輸的情況,利用用單片機與編碼器相結合,完成對車車門開關行程位置的實時監測,實現提升貨物安全的目的。

主要功能是記錄顯示行車時間以及開門次數,開門、未關緊顯示。未關緊報警,行車開門報警等等。

工作原理是1.利用旋轉編碼器測量旋轉角度來測量是否門關閉,是否關緊。

2.利用碼輪以及光電門模塊檢測車輪是否在轉從而判斷是否在行駛過程中

3.利用單片機進行定時計時

4.利用AT24C02儲存芯片實現掉電儲存

5.通過串口通信將行車信息傳輸到終端設備上

這是我搭建的實物模型

QQ圖片20190818235406

全部回復(23)
正序查看
倒序查看
薄浩楠
LV.5
2
2019-08-23 23:15
加油等待跟新
0
回復
GJGJ
LV.1
3
2019-08-23 23:21

旋轉編碼器是一種用來測量旋轉角度和旋轉角速度的旋轉式傳感器,它通過將角位移轉化為數字脈沖信號發送給單片機等接收端來記錄角位移或者角速度。在光電式旋轉編碼器中角位移的轉換采用了光電掃描原理。它可以分為三個部分,第一部分由交替的透光窗口和不透光窗口組成,就像齒輪一樣的結構,使它成為角位移的記錄依據。第二部分為發射光源,第三部分為接收光源,發射光源經過第一部分的遮光和透光,使光照交替出現,記錄由電子電路實現,經過計算處理即可得到所測量的角度,

如圖2.1所示旋轉編碼器輸出為兩相方波,它們波形相同,頻率相同,只有相位不同,通常A腳和B腳輸出。隨意選擇一個腳記錄其震蕩次數即可計算其旋轉角度,與此同時,我們還可以通過比較兩個方波的提前與滯后的相位關系來判斷旋轉方向,不僅如此,旋轉編碼器在每轉一圈之后會輸出一個高電平,輸出這個高電平的通道給出編碼器的絕對零位,也就是每轉一圈這個通道會輸出一個高電平,以此記錄圈數。此信號是一個方波時間大約在A輸出一個高電平的中間位置如圖2.2所示。

旋轉編碼器精度取決于機械和電氣兩種因素,其中機械因素有:分光柵欄的精度、旋鈕的靈敏度、光源和接收元件的角度等,其中電氣因素主要包括:電子電路設計的誤差、電路傳輸的時效、以及處理軟件的誤差等。可以用下列公式來計算電氣角度與機械角度的關系其中n0表示電氣角度,n1表示機械角度,a表示脈沖數,t表示轉數。

0
回復
GJGJ
LV.1
4
2019-08-23 23:21
@GJGJ
旋轉編碼器是一種用來測量旋轉角度和旋轉角速度的旋轉式傳感器,它通過將角位移轉化為數字脈沖信號發送給單片機等接收端來記錄角位移或者角速度。在光電式旋轉編碼器中角位移的轉換采用了光電掃描原理。它可以分為三個部分,第一部分由交替的透光窗口和不透光窗口組成,就像齒輪一樣的結構,使它成為角位移的記錄依據。第二部分為發射光源,第三部分為接收光源,發射光源經過第一部分的遮光和透光,使光照交替出現,記錄由電子電路實現,經過計算處理即可得到所測量的角度,如圖2.1所示旋轉編碼器輸出為兩相方波,它們波形相同,頻率相同,只有相位不同,通常由A腳和B腳輸出。隨意選擇一個腳記錄其震蕩次數即可計算其旋轉角度,與此同時,我們還可以通過比較兩個方波的提前與滯后的相位關系來判斷旋轉方向,不僅如此,旋轉編碼器在每轉一圈之后會輸出一個高電平,輸出這個高電平的通道給出編碼器的絕對零位,也就是每轉一圈這個通道會輸出一個高電平,以此記錄圈數。此信號是一個方波時間大約在A輸出一個高電平的中間位置如圖2.2所示。旋轉編碼器精度取決于機械和電氣兩種因素,其中機械因素有:分光柵欄的精度、旋鈕的靈敏度、光源和接收元件的角度等,其中電氣因素主要包括:電子電路設計的誤差、電路傳輸的時效、以及處理軟件的誤差等??梢杂孟铝泄絹碛嬎汶姎饨嵌扰c機械角度的關系:其中n0表示電氣角度,n1表示機械角度,a表示脈沖數,t表示轉數。[圖片][圖片]

光電門主要包括一個發光元件和一個接收元件,發光元件和接收元件組成槽型光耦,當凹槽內有物體時,發光元件發出的光被物體擋住,接收元件無法接收到光照,向D0口輸出一個高電平;當凹槽內沒有遮擋物體時,發光元件發出的光直接照射到接收元件上,D0口輸出一個低電平。除此之外,光電門模塊還提供了電源指示燈和開關指示燈可以看出光電門是否正常工作,其內部電路圖如圖2.7所示。

(2)連接方法

光電門模塊連接方法如圖2.8所示

圖2.7光電門模塊連接方法

0
回復
GJGJ
LV.1
5
2019-08-23 23:22
@GJGJ
光電門主要包括一個發光元件和一個接收元件,發光元件和接收元件組成槽型光耦,當凹槽內有物體時,發光元件發出的光被物體擋住,接收元件無法接收到光照,向D0口輸出一個高電平;當凹槽內沒有遮擋物體時,發光元件發出的光直接照射到接收元件上,D0口輸出一個低電平。除此之外,光電門模塊還提供了電源指示燈和開關指示燈可以看出光電門是否正常工作,其內部電路圖如圖2.7所示。(2)連接方法光電門模塊連接方法如圖2.8所示[圖片]圖2.7光電門模塊連接方法

5腳的旋轉編碼開關具有左轉,右轉,按下三個功能,根據任務要求我們只需要使用左轉右轉功能而且只180度。2腳接地,1,3腳接上拉電阻。4腳,5腳是按下功能的兩個腳,可以根據需求自己接線

在連接中,通常有A和B兩個集電極輸出接口,為確保線路銜接性,需要在3.3V上的電壓上進行操作,通常串聯10kΩ使用。旋轉編碼器模塊接線圖如圖2.3所示。在硬件接口連接成功之后,以防萬一,須做好測試工作檢查。

0
回復
GJGJ
LV.1
6
2019-08-23 23:22
@GJGJ
5腳的旋轉編碼開關具有左轉,右轉,按下三個功能,根據任務要求我們只需要使用左轉右轉功能而且只180度。2腳接地,1,3腳接上拉電阻。4腳,5腳是按下功能的兩個腳,可以根據需求自己接線。在連接中,通常有A和B兩個集電極輸出接口,為確保線路銜接性,需要在3.3V上的電壓上進行操作,通常串聯10kΩ使用。旋轉編碼器模塊接線圖如圖2.3所示。在硬件接口連接成功之后,以防萬一,須做好測試工作檢查。[圖片]

5腳的旋轉編碼開關具有左轉,右轉,按下三個功能,根據任務要求我們只需要使用左轉右轉功能而且只180度。2腳接地,1,3腳接上拉電阻。4腳,5腳是按下功能的兩個腳,可以根據需求自己接線

在連接中,通常有A和B兩個集電極輸出接口,為確保線路銜接性,需要在3.3V上的電壓上進行操作,通常串聯10kΩ使用。旋轉編碼器模塊接線圖如圖2.3所示。在硬件接口連接成功之后,以防萬一,須做好測試工作檢查。

0
回復
GJGJ
LV.1
7
2019-08-23 23:23
@GJGJ
5腳的旋轉編碼開關具有左轉,右轉,按下三個功能,根據任務要求我們只需要使用左轉右轉功能而且只180度。2腳接地,1,3腳接上拉電阻。4腳,5腳是按下功能的兩個腳,可以根據需求自己接線。在連接中,通常有A和B兩個集電極輸出接口,為確保線路銜接性,需要在3.3V上的電壓上進行操作,通常串聯10kΩ使用。旋轉編碼器模塊接線圖如圖2.3所示。在硬件接口連接成功之后,以防萬一,須做好測試工作檢查。[圖片]

由于蜂鳴器產生報警信號驅動的工作電流一般比較大,以致于單片機的I/O口是無法直接驅動的,所以要利用放大電路來驅動,一般使用三極管來放大電流就可以了。

蜂鳴器分為有源蜂鳴器和無源蜂鳴器,這里的源并不是電源的意思,而是振蕩源,如果是有源蜂鳴器只要通的電流足夠驅動蜂鳴器,蜂鳴器就可以正常工作,而無源蜂鳴器則需要一個振蕩波去驅動它。

蜂鳴器的工作電路:蜂鳴器的工作電流一般比較大,以致于單片機的I/O口是無法直接驅動的,所以要放大電路來驅動,放大電路一般由三極管組成,也就是基極聯通單片機,控制蜂鳴器是否工作,集電極連接電源供電,發射極連接蜂鳴器,使其正常工作。

值得注意的是,理論上來說所有I/O口都可以驅動該電路,但當使用P0口作為驅動電路時需要外加1k歐姆的上拉電阻,其他口并不需要。接線圖如圖所示。

0
回復
GJGJ
LV.1
8
2019-08-23 23:23
@GJGJ
由于蜂鳴器產生報警信號驅動的工作電流一般比較大,以致于單片機的I/O口是無法直接驅動的,所以要利用放大電路來驅動,一般使用三極管來放大電流就可以了。蜂鳴器分為有源蜂鳴器和無源蜂鳴器,這里的源并不是電源的意思,而是振蕩源,如果是有源蜂鳴器只要通的電流足夠驅動蜂鳴器,蜂鳴器就可以正常工作,而無源蜂鳴器則需要一個振蕩波去驅動它。蜂鳴器的工作電路:蜂鳴器的工作電流一般比較大,以致于單片機的I/O口是無法直接驅動的,所以要放大電路來驅動,放大電路一般由三極管組成,也就是基極聯通單片機,控制蜂鳴器是否工作,集電極連接電源供電,發射極連接蜂鳴器,使其正常工作。值得注意的是,理論上來說所有I/O口都可以驅動該電路,但當使用P0口作為驅動電路時需要外加1k歐姆的上拉電阻,其他口并不需要。接線圖如圖所示。[圖片]

為了將行程數據采集并記錄下來此次利用AT24C02作為儲存芯片,

0
回復
GJGJ
LV.1
9
2019-08-23 23:24
@GJGJ
為了將行程數據采集并記錄下來此次利用AT24C02作為儲存芯片,[圖片]

1602液晶模塊內部存儲了字符圖形、英文字母、數據符號,而且已經編號,存儲方式與ISCII碼值相同,其工作原理如圖。

0
回復
GJGJ
LV.1
10
2019-08-23 23:25
@GJGJ
1602液晶模塊內部存儲了字符圖形、英文字母、數據符號,而且已經編號,存儲方式與ISCII碼值相同,其工作原理如圖。[圖片]

LCD1602引腳及其接線方法如圖所示

0
回復
GJGJ
LV.1
11
2019-08-23 23:25
@GJGJ
LCD1602引腳及其接線方法如圖所示[圖片]

旋轉編碼器模塊接線方法如圖

0
回復
GJGJ
LV.1
12
2019-08-23 23:26
@GJGJ
旋轉編碼器模塊接線方法如圖[圖片]

存儲芯片模塊接線方法如圖

0
回復
GJGJ
LV.1
13
2019-08-23 23:27
@GJGJ
存儲芯片模塊接線方法如圖[圖片]
接下來是關于軟件原理的編寫
0
回復
GJGJ
LV.1
14
2019-08-26 23:57
@GJGJ
接下來是關于軟件原理的編寫

  部分程序及其功能

(1)旋轉編碼器檢測

旋轉編碼器的AB相分別接入單片機的P1.1和P1.2,并在軟件中申請變量PINB和PINA進行檢測。首先把接收的引腳置高電平,并申請一個變量EncOld記錄編碼器初始的狀態(00,01,10,11),用一個變量EncNew記錄編碼器現在的狀態,對兩個狀態進行比較,如果兩個數據相同則返回0,如果兩個數據不同則通過判斷改變的順序判斷方向,00-10-11或11-01-00表示右轉,返回R,00-01-11或11-10-00表示左轉,返回L。另外由于旋轉編碼器具有開關特性,所以使用時需要延時消除抖動的影響。

(2)計時實現

在主程序中申請定時器中斷,根據計算定時器中斷初始化為TH0=0xdc,

TL0=0x00定時器每10ms中斷一次,也就是0.01秒,我們申請一個全局變量ms_10記錄定時器中斷次數,一個6位數組存儲秒十位個位,分十位個位,時十位個位。當中斷執行100次時,也就是ms_10=100時清零ms_10,把秒個位自加1。當秒個位自加到10時,把秒十位自加1并清零秒個位。當秒十位自加到6時,把秒十位清零并把分個位自加1,同理記錄分十位,時個位十位。當每次定時器執行完一次重復執行主程序打開定時器,則可以實現計時。值得注意的是,計時器中斷的功能軟件中不能由太多延時時間,或者通過一步步調試通過調試軟件的時間對延時初值進行調整,否則會出現計時不準的情況發生。

(3)顯示實現

使用LCD屏需要三個子程序通過RS和RW的引腳拉高和拉低實現對液晶屏判斷是否正在工作、寫一個字節和寫一個命令。再通過初始化LCD屏程序把計時器和誤操作次數顯示到LCD屏中,具體操作如下:使用寫命令子程序設置16*2顯示開顯示,關顯示光標,使用寫一個字節程序執行清屏操作和顯示TIME和DEGREE作為標題。再申請一個play函數,顯示行車時間和誤操作次數,只需要使用寫一個字節把時間數組中的數據寫在屏幕上。

0
回復
GJGJ
LV.1
15
2019-08-26 23:57
@GJGJ
 部分程序及其功能(1)旋轉編碼器檢測旋轉編碼器的AB相分別接入單片機的P1.1和P1.2,并在軟件中申請變量PINB和PINA進行檢測。首先把接收的引腳置高電平,并申請一個變量EncOld記錄編碼器初始的狀態(00,01,10,11),用一個變量EncNew記錄編碼器現在的狀態,對兩個狀態進行比較,如果兩個數據相同則返回0,如果兩個數據不同則通過判斷改變的順序判斷方向,00-10-11或11-01-00表示右轉,返回R,00-01-11或11-10-00表示左轉,返回L。另外由于旋轉編碼器具有開關特性,所以使用時需要延時消除抖動的影響。(2)計時實現在主程序中申請定時器中斷,根據計算定時器中斷初始化為TH0=0xdc,TL0=0x00定時器每10ms中斷一次,也就是0.01秒,我們申請一個全局變量ms_10記錄定時器中斷次數,一個6位數組存儲秒十位個位,分十位個位,時十位個位。當中斷執行100次時,也就是ms_10=100時清零ms_10,把秒個位自加1。當秒個位自加到10時,把秒十位自加1并清零秒個位。當秒十位自加到6時,把秒十位清零并把分個位自加1,同理記錄分十位,時個位十位。當每次定時器執行完一次重復執行主程序打開定時器,則可以實現計時。值得注意的是,計時器中斷的功能軟件中不能由太多延時時間,或者通過一步步調試通過調試軟件的時間對延時初值進行調整,否則會出現計時不準的情況發生。(3)顯示實現使用LCD屏需要三個子程序通過RS和RW的引腳拉高和拉低實現對液晶屏判斷是否正在工作、寫一個字節和寫一個命令。再通過初始化LCD屏程序把計時器和誤操作次數顯示到LCD屏中,具體操作如下:使用寫命令子程序設置16*2顯示開顯示,關顯示光標,使用寫一個字節程序執行清屏操作和顯示TIME和DEGREE作為標題。再申請一個play函數,顯示行車時間和誤操作次數,只需要使用寫一個字節把時間數組中的數據寫在屏幕上。

(4)掉電保護

掉電保護通過把數據寫入24C02的方法實現,24C02需要使用I2C通信,所以我們需要使用程序模擬I2C總線通信的方法,根據I2C總線通信方法需要申請SCL和SDA通過改變它們的數值實現對24C02的寫入和讀取。另外掉電保護寫入需要時間所以要加入延時保證寫入程序的順利執行。

(5)串口通信

使用串口通信時,需要在串口助手中選擇與串口通信軟件中申請的相同波特率,并且申請計時器作為波特率發生器,初始化時打開計時器即可使用串口通信。根據計算,串口初始化波特率9600時,初值為0xfdfd,工作方式為自動重裝。

在接收到計算機發送的數據時進入串口中斷服務程序,接收之后存入一個臨時變量中,并對這個數進行判斷,如果為0,把存儲芯片中數據以一定的順序放入輸出數組,并發送給計算機;如果接收到的數據為1時,把存儲芯片的數據清零,即可實現清零功能。

(6)主程序

每次上電時,首先初始化24C02芯片,讀取芯片中的信息放入誤操作次數和時間數組的全局變量中,然后執行顯示初始化和時間顯示,并啟動定時器。

如果光電門檢測有脈沖,進入行車循環檢測,啟動中斷和使用時間顯示,判斷開關角度變量是否為0,為0時車門已經關緊,否則車門沒有關緊,如果車門沒有關緊則記錄紅燈亮、警報器響直到行車停止,也就是光電門不再有脈沖一段時間。誤操作次數加一,并寫入到掉電保護芯片中。而且每循環一次都把時間數組寫入到掉電保護芯片中,在每次上電的時候讀取并寫入其中。

進入停車循環,執行掃描旋轉編碼器并記錄旋轉編碼器的開關角度,左轉變量自減1,右轉自加1,如果車門關緊紅燈滅、綠燈亮,如果車門每關緊紅燈亮,綠燈滅,并記錄車門是否關緊的變量x,當行車循環檢測時進行判斷,以提醒司機行車狀態。

0
回復
GJGJ
LV.1
16
2019-08-27 00:02
@薄浩楠
加油等待跟新

在快遞業的不斷發展過程中,快遞業務逐步包括文件資料、紙質合同、公務信函、研究資料等為主的函件快遞和實驗樣品、高科技產品、高精度儀器和易碎奢侈品等為主的貨物快遞,這兩種貨物越來越多,越來越普及的情況下,大多數的快遞公司由于其能力有限,資金不足、創新能力弱,難以承擔運輸風險,以及安全方面不能讓顧客放心失去競爭力。國際知名的快遞公司依靠其強大的資金支持和群眾優勢,不斷提高競爭力,在某一區域甚至全球逐漸形成優勢,并開辟了多種新的服務方式和手段。可見安全問題已經越來越進入快遞行業的核心競爭力標準,在這一背景下各種快遞業務安全措施,通過各種方法防止意外發生已勢在必行。

本設計基于單片機STC12C5A60S2實現對快遞車行車時對車門開關的提醒,把車門開關和行車時間作為數字量存儲在24C02芯片中,并通過LCD1602屏實現對行車途中車門監測和實現顯示行車時間并通過串口實現與計算機的通信實現對車行程時間和誤操作次數的記錄。

本設計使用的旋轉編碼器需要更高的分辨率,如果精度較低會導致車門關緊卻誤報警,或者車門未關緊不能正確顯示。在路況不佳的道路行車時,旋轉編碼器的使用需要加裝一個保護殼,或者有緩沖的物品防止被撞壞。而且編碼器會受到大型機器的干擾,所以需要盡可能遠離發動機等機械。如果運輸道路有風沙、水汽等惡劣條件,需要加一個防塵罩。

本設計的光電門不僅可以作為統計行車時間的標志,還可以通過記錄輸出脈沖數,結合發動機和車輪齒輪比、車輪直徑計算行車的路程和速度。

0
回復
2019-08-30 07:33
@GJGJ
(4)掉電保護掉電保護通過把數據寫入24C02的方法實現,24C02需要使用I2C通信,所以我們需要使用程序模擬I2C總線通信的方法,根據I2C總線通信方法需要申請SCL和SDA通過改變它們的數值實現對24C02的寫入和讀取。另外掉電保護寫入需要時間所以要加入延時保證寫入程序的順利執行。(5)串口通信使用串口通信時,需要在串口助手中選擇與串口通信軟件中申請的相同波特率,并且申請計時器作為波特率發生器,初始化時打開計時器即可使用串口通信。根據計算,串口初始化波特率9600時,初值為0xfdfd,工作方式為自動重裝。在接收到計算機發送的數據時進入串口中斷服務程序,接收之后存入一個臨時變量中,并對這個數進行判斷,如果為0,把存儲芯片中數據以一定的順序放入輸出數組,并發送給計算機;如果接收到的數據為1時,把存儲芯片的數據清零,即可實現清零功能。(6)主程序每次上電時,首先初始化24C02芯片,讀取芯片中的信息放入誤操作次數和時間數組的全局變量中,然后執行顯示初始化和時間顯示,并啟動定時器。如果光電門檢測有脈沖,進入行車循環檢測,啟動中斷和使用時間顯示,判斷開關角度變量是否為0,為0時車門已經關緊,否則車門沒有關緊,如果車門沒有關緊則記錄紅燈亮、警報器響直到行車停止,也就是光電門不再有脈沖一段時間。誤操作次數加一,并寫入到掉電保護芯片中。而且每循環一次都把時間數組寫入到掉電保護芯片中,在每次上電的時候讀取并寫入其中。進入停車循環,執行掃描旋轉編碼器并記錄旋轉編碼器的開關角度,左轉變量自減1,右轉自加1,如果車門關緊紅燈滅、綠燈亮,如果車門每關緊紅燈亮,綠燈滅,并記錄車門是否關緊的變量x,當行車循環檢測時進行判斷,以提醒司機行車狀態。
滿滿的知識量
0
回復
GJGJ
LV.1
18
2019-08-30 17:05
@心如刀割
滿滿的知識量[圖片]
謝謝
0
回復
GJGJ
LV.1
19
2019-08-30 21:58
@GJGJ
謝謝
源代碼如下:
#include 
#include 
typedef unsigned char uchar;
typedef unsigned int uint;


uchar data table[10]={60,2,3,4,5,6,7,8,9,0}; //發送數組
uint ms_10;
uint i,j,k;
char a,b;
unsigned char enc,x=0,y=0;

sbit PINA=P3^2;
sbit PINB=P3^3;
sbit LED_R=P1^3;
sbit LED_G=P1^4;
sbit Cm_ok=P1^5;

sbit sda=P2^0;							   //IO口定義
sbit scl=P2^1;
sbit BEEP = P2^3;                           //蜂鳴器
sbit dula=P2^6;
sbit wela=P2^7;

sbit sw_12=P3^7;
sbit RS = P3^5;
sbit RW = P3^6;
sbit EN = P3^4;         



/***********************************************
串行口初始化波特率9600,定時器1,工作方式2 *************************************************/
void serial_init(void)
{
	TMOD=0x20;//計時器1作為比特率發生器,方式2
	TH1=0xfd;
	TL1=0xfd; //裝入初值
	TR1=1;//計時中斷允許
	SM0=0;
	SM1=1;//串行口工作于方式2
	ES=1;//串行口中斷允許
	REN=1;//接收允許
	EA=1;// 總中斷允許
}
/********************* **************************
串行口傳送數據
傳送顯示數組各字符給計算機
*************************************************/
void send(uchar *dis)
{
	while(*dis!=0)
	{
		SBUF=*dis;
		dis++;
		while(!TI);
		TI=0; //軟件請發送中斷
	}
}
/************************************************************************************************
    函數名稱:Encoder
    函數功能:編碼器旋轉的掃描及處理
    入口參數:無
    出口參數:char型    0-無旋轉   'R'-正轉(向右轉)   'L'-反轉(向左轉)
************************************************************************************************/
unsigned char Encoder(void)
{
    static bit Enc0=0,Enc1=0;
    static unsigned char EncOld,EncX=0;
    unsigned char EncNow;
    bit EncType=0; //設置編碼器類型: 0為一定位一脈沖,1為兩定位一脈沖

    PINA=1;        //PINA置高電平
    PINB=1;        //PINB置高電平
    if(Enc0==0)EncOld=(PINA?0x02:0x00)+(PINB?0x01:0x00),Enc0=1;  //記住初次調用時編碼器的狀態
    EncNow=(PINA?0x02:0x00)+(PINB?0x01:0x00);        //根據兩個IO當前狀態組合成16進制的0x00|0x01|0x02|0x03
    if(EncNow==EncOld)return(0);                                //如果新數據和原來的數據一樣(沒有轉動)就直接返回0

    if(EncOld==0x00&&EncNow==0x02||EncOld==0x03&&EncNow==0x01)EncX=EncNow;         //00-10|11-01
    if(EncOld==0x00&&EncX==0x02&&EncNow==0x03||EncOld==0x03&&EncX==0x01&&EncNow==0x00)//00-10-11|11-01-00右轉
    {
        EncOld=EncNow,EncX=0;
        if(EncType==1)return('R');   //兩定位一脈沖
        else       						//一定位一脈沖
        {
            if(Enc1==0)Enc1=1;
            else
            {
                //Delayms(60);       //延時降低旋轉靈敏度(不能用在定時器中)
                Enc1=0;
                return('R');
            }
        }
    }

    if(EncOld==0x00&&EncNow==0x01||EncOld==0x03&&EncNow==0x02)EncX=EncNow;         //00-01|11-10
    if(EncOld==0x00&&EncX==0x01&&EncNow==0x03||EncOld==0x03&&EncX==0x02&&EncNow==0x00)//00-01-11|11-10-00左轉
    {
        EncOld=EncNow,EncX=0;
        if(EncType==1)return('L');   //兩定位一脈沖
        else           //一定位一脈沖
        {
            if(Enc1==0)Enc1=1;
            else
            {
                //Delayms(60);       //延時降低旋轉靈敏度(不能用在定時器中)
                Enc1=0;
                return('L');
            }
        }
    }
    return(0);           //不旋轉返回0
}

uchar display[6]={0};
uint num=0;

//延時
void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
/*********************************************************
 蜂鳴器響一聲                                           
**********************************************************/
void beep()
{
    unsigned char y;
    for (y=0;y<180;y++)
    {
      BEEP=!BEEP;                //BEEP取反
	  delay(70);
    } 
    BEEP=1;                      //關閉蜂鳴器
}
/////////24C02讀寫驅動程序////////////////////
void delay1(unsigned int m)
{	unsigned int n;
  	for(n=0;n
0
回復
GJGJ
LV.1
20
2019-08-30 22:00
@GJGJ
源代碼如下:#include#includetypedefunsignedcharuchar;typedefunsignedintuint;uchardatatable[10]={60,2,3,4,5,6,7,8,9,0};//發送數組uintms_10;uinti,j,k;chara,b;unsignedcharenc,x=0,y=0;sbitPINA=P3^2;sbitPINB=P3^3;sbitLED_R=P1^3;sbitLED_G=P1^4;sbitCm_ok=P1^5;sbitsda=P2^0;//IO口定義sbitscl=P2^1;sbitBEEP=P2^3;//蜂鳴器sbitdula=P2^6;sbitwela=P2^7;sbitsw_12=P3^7;sbitRS=P3^5;sbitRW=P3^6;sbitEN=P3^4;/***********************************************串行口初始化波特率9600,定時器1,工作方式2*************************************************/voidserial_init(void){TMOD=0x20;//計時器1作為比特率發生器,方式2TH1=0xfd;TL1=0xfd;//裝入初值TR1=1;//計時中斷允許SM0=0;SM1=1;//串行口工作于方式2ES=1;//串行口中斷允許REN=1;//接收允許EA=1;//總中斷允許}/***********************************************串行口傳送數據傳送顯示數組各字符給計算機*************************************************/voidsend(uchar*dis){while(*dis!=0){SBUF=*dis;dis++;while(!TI);TI=0;//軟件請發送中斷}}/************************************************************************************************函數名稱:Encoder函數功能:編碼器旋轉的掃描及處理入口參數:無出口參數:char型0-無旋轉'R'-正轉(向右轉)'L'-反轉(向左轉)************************************************************************************************/unsignedcharEncoder(void){staticbitEnc0=0,Enc1=0;staticunsignedcharEncOld,EncX=0;unsignedcharEncNow;bitEncType=0;//設置編碼器類型:0為一定位一脈沖,1為兩定位一脈沖PINA=1;//PINA置高電平PINB=1;//PINB置高電平if(Enc0==0)EncOld=(PINA?0x02:0x00)+(PINB?0x01:0x00),Enc0=1;//記住初次調用時編碼器的狀態EncNow=(PINA?0x02:0x00)+(PINB?0x01:0x00);//根據兩個IO當前狀態組合成16進制的0x00|0x01|0x02|0x03if(EncNow==EncOld)return(0);//如果新數據和原來的數據一樣(沒有轉動)就直接返回0if(EncOld==0x00&&EncNow==0x02||EncOld==0x03&&EncNow==0x01)EncX=EncNow;//00-10|11-01if(EncOld==0x00&&EncX==0x02&&EncNow==0x03||EncOld==0x03&&EncX==0x01&&EncNow==0x00)//00-10-11|11-01-00右轉{EncOld=EncNow,EncX=0;if(EncType==1)return('R');//兩定位一脈沖else//一定位一脈沖{if(Enc1==0)Enc1=1;else{//Delayms(60);//延時降低旋轉靈敏度(不能用在定時器中)Enc1=0;return('R');}}}if(EncOld==0x00&&EncNow==0x01||EncOld==0x03&&EncNow==0x02)EncX=EncNow;//00-01|11-10if(EncOld==0x00&&EncX==0x01&&EncNow==0x03||EncOld==0x03&&EncX==0x02&&EncNow==0x00)//00-01-11|11-10-00左轉{EncOld=EncNow,EncX=0;if(EncType==1)return('L');//兩定位一脈沖else//一定位一脈沖{if(Enc1==0)Enc1=1;else{//Delayms(60);//延時降低旋轉靈敏度(不能用在定時器中)Enc1=0;return('L');}}}return(0);//不旋轉返回0}uchardisplay[6]={0};uintnum=0;//延時voiddelay(unsignedchari){for(j=i;j>0;j--)for(k=125;k>0;k--);}/*********************************************************蜂鳴器響一聲**********************************************************/voidbeep(){unsignedchary;for(y=0;y

這是當時在做畢設時候拍的幾張照片

0
回復
GJGJ
LV.1
21
2019-08-30 22:00
@GJGJ
這是當時在做畢設時候拍的幾張照片[圖片][圖片]
0
回復
GJGJ
LV.1
22
2019-08-30 22:01
@GJGJ
[圖片]

這是演示時侯的圖片

0
回復
GJGJ
LV.1
23
2019-08-30 22:02
@GJGJ
[圖片][圖片]這是演示時侯的圖片
當時利用串口助手模擬上位機的
0
回復
GJGJ
LV.1
24
2019-08-30 22:02
@GJGJ
當時利用串口助手模擬上位機的[圖片]

本設計基于單片機STC12C5A60S2實現對快遞車行車時對車門開關的提醒,把車門開關和行車時間作為數字量存儲在24C02芯片中,并通過LCD1602屏實現對行車途中車門監測和實現顯示行車時間并通過串口實現與計算機的通信實現對車行程時間和誤操作次數的記錄。

本設計使用的旋轉編碼器需要更高的分辨率,如果精度較低會導致車門關緊卻誤報警,或者車門未關緊不能正確顯示。在路況不佳的道路行車時,旋轉編碼器的使用需要加裝一個保護殼,或者有緩沖的物品防止被撞壞。而且編碼器會受到大型機器的干擾,所以需要盡可能遠離發動機等機械。如果運輸道路有風沙、水汽等惡劣條件,需要加一個防塵罩[20]。

本設計的光電門不僅可以作為統計行車時間的標志,還可以通過記錄輸出脈沖數,結合發動機和車輪齒輪比、車輪直徑計算行車的路程和速度。

0
回復
主站蜘蛛池模板: 女人高潮一级一片 | 亚洲欧美色视频 | 亚洲精品久久久中文字幕 | 久久综合之合合综合久久 | 在线播放视频 | 国产一区二区在线91 | 香蕉久久夜色精品国产更新时间 | 国产国拍亚洲精品在线 | 国产精品视频xxx | 色婷婷tv | 天美av一区二区三区久久 | 久久男人免费视频 | 色婷婷五月综合久久 | 狠狠做深爱婷婷久久综合一区 | 国产真实夫妇对白视频 | 草留视频 | 成人免费区 | 亚洲欧美国产一区二区三区 | 麻豆人妻少妇精品无码专区 | 成年网站在线观看 | 国产在线精品一区二区三区 | 精品视频1区2区 | 羞羞影院午夜男女爽爽 | xxxx交换夫妇com1| 爱爱欧美| 欧美日韩在线播放 | 好男人好资源在线观看免费视频 | 国精品无码一区二区三区在线 | 精品视频在线观看一区 | 老司机伊人网 | 久草在线色站 | 亚洲AV永久无码天堂网国产 | 久久夜色精品国产噜噜亚洲AV | 免费91看片| 91一区二区三区四区 | 中文在线精品 | 黄页在线免费看 | 草莓AV福利网站导航 | 三级毛片一 | 欧美多人乱大交xxxxx | 2020久天啪天天久久99久久 |