何小映
(西安航空學院電子工程學院,陜西西安 710077)
當今社會,企事業單位越來越多,單位大小不同,員工上下班乘坐的交通工具也不相同,大型企事業單位一般都擁有幾輛甚至幾十輛班車,而員工由于居住地不同,中途下車的比較多。一般來說,單位都會在起點到終點之間設置多個固定的停靠點,便于員工上下班乘坐班車,鑒于員工乘坐及下車是隨機的,如果某些員工要在中途某個點下車,而這些員工又坐的離司機駕駛室比較遠,當要下車時就會比較不方便,因為他們要提前去告訴司機,就需要在車輛行駛時從座位上站起來去告訴司機,有時車速較快,在車廂過道中行走比較危險,如果被監控拍下,司機還可能會遭到罰款和扣分的處罰[1]。所以設計了一套下車無線提示系統[2],當員工需要中途下車時,通過按鍵輸入車的編號和站點編號,駕駛室的顯示器通過無線方式接收到信息,就能提前知道某個站點是否有人下車,以及有多少人下車,從而能夠提前做好準備,這樣既方便了司機,也方便了員工,避免了一些交通事故的發生。
該系統包括發送部分和接收部分,兩者在硬件上彼此獨立,通過無線發送模塊和無線接收模塊進行通信,系統的整體結構如圖1 所示[3]。

圖1 系統整體結構圖
在系統中,員工持有的是發送器,駕駛室安裝的是接收器,對每輛班車都進行了編號,如果有5 輛車,則編號從1~5。以一輛班車為例進行介紹,假設該車的車號為“1”,該車中有兩名員工甲和乙,如果員工甲要在中途某站點“1”下車,只需要在發送器的按鍵上按下車牌號及要下站的站點名稱,員工乙要在中途某站點“2”下車,只需要在發送器的按鍵上按下車牌號及他要下站的站點名稱,站點名稱及其編號已在程序中進行了處理。然后再按下發送鍵,發送器就發送車輛編號和站點編號,發送時有兩個指示燈提示發送狀態。接收器收到該車編號信息及站點信息以后,將會在液晶顯示器12864B上相應的站點位置進行加一顯示接收到的要下站的人數。
發送部分電路主要包括STC89C52RC 單片機、矩陣式鍵盤、無線發送模塊NRF24L01、指示電路,其框圖如圖2 所示[4]。

圖2 發送電路框圖
鍵盤采用矩陣式結構,由4×4 按鍵構成[5],電路如圖3 所示。

圖3 矩陣式鍵盤
行線連接到P1.0~P1.3,列線連接到P1.4~P1.7,圖3 中,B1~B8 表示車的編號,S1~S7 表示站點編號,可以實現8 輛車,7 個站點設置,能滿足大多數單位的需求,可以按照實際情況在按鍵上寫上車輛編號及站點名稱。按鍵的分析采用行列反轉法,首先PI口輸出0xF0,讀入PI 口數據并保留高四位,然后PI口輸出0x0F,讀入PI 口數據并保留低四位,兩次數據進行或運算,根據不同的運算結果就能知道哪個鍵被按下。車輛編號與鍵值關系如表1 所示,站點編號與鍵值關系如表2 所示。

表2 站點編號與鍵值關系

表1 車輛編號與鍵值關系
數據的發送采用無線模塊NRF24L01,該模塊與單片機的接口電路如圖4 所示[6]。

圖4 無線發送模塊與單片機接口
無線發送模塊采用NRF24L01[7],該模塊工作在2.4 GHz 全球開放ISM 頻段,需要的3.3 V 電源可以采用ASM1117 模塊提供,該模塊采用SPI 接口方式,管腳CE 為片 選信號,CSN 為SPI 片選 信號,SCK 為SPI 時鐘,MOSI 為SPI 主出/從入信號,MISO 為SPI 從入/主出信號,IRQ 為中斷輸入信號[8]。
指示燈電路部分采用2 個LED 發光二極管[9],其中LED 指示發送過程,該指示燈熄滅表示無數據發送,點亮時表示正在進行發送,如果接收方沒有收到,將會進行閃爍表示持續發送,如果發送完畢并且收到應答信號,則LED 熄滅,LED1 點亮,所以通過這兩個指示燈就可以知道發送的狀態,電路如圖5 所示。

圖5 發送狀態指示電路
發送端程序為循環結構,包括矩陣鍵盤處理程序和無線發送程序,按鍵進行車輛號和站點號的輸入,發送端程序流程如圖6所示。

圖6 發送程序流程圖
整個發送程序為一個循環結構,首先判斷是否有鍵按下,如果沒有就一直等待,如果有就通過行列反轉法求鍵值M 并判斷,如果M 為車號的鍵值,則賦值給數組元素TX_BUF[1],如果M 為站點的鍵值,則賦值給數組元素TX_BUF[2],如果M=0x77,則表示已經輸入完畢,將進行數據發送,當該鍵釋放后就點亮LED,把數組TX_BUF 中的值一個一個地發送出去,每發一個LED 閃爍一次,當發送完畢后,LED 燈滅,LED1 燈亮,從而完成一次信息的發送,然后進入下一次讀鍵。
接收部分電路主要包括STC89C52RC 單片機、無線接收模塊NRF24L01、指示電路、液晶顯示電路[11],框圖如圖7 所示。

圖7 接收框圖
單片機與無線接收模塊的接口與無線發送電路相同,因為無線模塊同時具有發送和接收的功能,該部分電路可參見圖4。
顯示采用12864B 液晶顯示器[12],該顯示器顯示4 行信息,如圖8 所示[13]。

圖8 液晶顯示器顯示內容
圖8所示僅為其中一輛車的顯示內容,一共有4行內容。第一行顯示的是車牌尾號后四位及對應的編號,車輛不同,顯示的信息也不同,對于每輛車來說接收器是固定的。第二行至第四行顯示的是中途下車的站點名稱及人數,這些站點名稱對于每個接收器來說都是相同的。站點后面加一顯示要在該站點下車的員工人數,沒有人下車時無顯示。司機通過接收器顯示的信息就能提前知道中途下車的情況,從而提前做好準備。
指示電路用來指示接收狀態,P2.6 連接發光二極管陰極,當接收到數據P2.6=0,發光二極管點亮,延時3 s 后熄滅[14],從而給司機提示。
接收程序流程圖如圖9所示[15]。接收程序部分首先對12864 進行初始化,包括將其設為8 位并行口,光標及顯示設置,清屏等,接下來顯示初始信息,如圖8 所示,第一行到第四行分別顯示車輛尾號后四位及車輛編號、站點一名稱、站點二名稱、站點三名稱,這些名稱可以進行定制,在編程時初始化寫入程序中。系統使用定時器0 進行300 ms 定時,用來確定接收時間,每300 ms 進行一次數據接收。接下來對接收模塊進行初始化設置,包括設置接收地址、設置自動應答、設置發射功率、數據傳輸率等[16-18],當300 ms 定時時間到后,判斷是否收到數據,如果接收到數據而且數據的第一個字節RBUF[0]為0xa1,再判斷第二個字節RBUF[1]是不是本車編號,如果是,再根據第三個字節RBUF[2]的站點號,對k1~k3的值加一并顯示,k1~k3分別表示在第一個站、第二個站、第三個站下站的人數。

圖9 接收程序流程圖
從實際需求出發,設計了一個員工到站下車無線提示系統,該系統實現了在單位班車上員工下站時給司機發送無線提示信息,在車輛行駛過程中,到達員工需要下車的站點前,員工可以在發送器上隨時按下車輛編號和站點編號,點擊發送鍵即可發送下站提示,司機處的接收器接收到信息后,司機就可以通過觀察顯示器上的數據采取相應的措施,如果有員工下站則提前做好準備,避免了事故的發生,如果沒有一個員工下站,則可以忽略該站,無需停靠,從而提高通行效率,具有一定的實用價值。