專案 排隊叫號系統設計

2021-10-25 19:26:09 字數 3190 閱讀 7990

文章首發於我的個人部落格

【專案對你有幫助的話,就star/fork走一波吧!】

類似食堂取餐的模式。首先,學生排隊,服務員使用鍵盤給顧客分配號碼,按下確定鍵,數碼管顯示當前佇列中的人數、剛剛進入佇列的號碼,並通過串列埠通訊的方式將佇列人數和當前分配的號碼傳送給從機,從機將資料顯示在1602液晶屏上。另外,主機通過鍵盤按鍵選擇取餐功能,按下出隊鍵,叫到要取餐的號碼,並通過語音播報取餐號碼。

src:主機和從機 c**

client(從機**)

resources:晶元手冊、電路圖等

queuesystem_proteus_simulation:proteus電路**

硬體數量(個)

stc89c52rc(dip-40)

211.0592mhz無源晶振

274hc573

24位共陰數碼管

21602a液晶顯示屏

14x3薄膜鍵盤

11k 9針排阻

2yf017語音晶元

1揚聲器

110k變阻器

130pf陶瓷電容

4104陶瓷電容

2在src目錄下提供了主機和從機的源**,您可以先新建兩個keil專案(51微控制器),然後分別將這兩部分**新增到你新建的keil工程下面,編譯並生成hex檔案。

****:**然後使用proteus開啟queuesystem_proteus_simulation目錄下的proteus**電路,並將上一步生成的兩個hex檔案分別新增到兩塊8051微控制器中,進行**。

麵包板連線注意事項:

我是用的是102孔麵包板,這種麵包板左右兩側和上下兩側的電源不是連通的,需要你自己用跳線連線。

盡量使用跳線進行連線,最終的電路美觀而且執行穩定。(不建議大範圍使用杜邦線)

對於51微控制器來說,要進行雙機串列埠通訊,兩個微控制器的晶振應當相同,我建議使用11.0592mhz的無源晶振,再加兩個30pf的陶瓷電容連城晶振電路。(11.0592mhz計算的波特率無誤差)

數碼管應注意是共陰還是共陽。

51微控制器p0口要接1k的上拉電阻(使用9針排阻)。

**專案執行邏輯:**先通過4x3薄膜鍵盤輸入兩位數字,然後按下#按鍵(即確定鍵),即可將該號碼新增到佇列中,並且在左面第乙個4位數碼管的前兩位顯示剛叫到的號碼,第4位顯示佇列中的人數。同時觀察到從機連線的1602顯示屏上顯示的queue_sum:number:欄位也同步顯示了佇列中的總人數和剛入隊的號碼。按下*鍵,表示叫號取餐,右側數碼管顯示需要取餐的號碼(佇列中第乙個),同時佇列中第乙個人出佇列,佇列中總人數減一。

分幾大功能模組進行說明:主機(4x3薄膜鍵盤驅動、數碼管動態顯示、yf017語音晶元驅動、串列埠通訊傳送端),從機(1602a驅動、串列埠通訊接收端)

從proteus**電路中可以看到,薄膜鍵盤4行a、b、c、d分別接在p2.0、p2.1、p2.2、p2.3口,3列1、2、3分別接在p2.4、p2.5、p2.6口。一開始我本打算用驅動矩陣鍵盤的類似**來寫薄膜鍵盤的驅動程式,但是在測試過程種卻不盡人意,同樣的**並沒有像矩陣鍵盤一樣獲取按鍵事件。因此用了笨辦法,每一行每一列都分開檢測,並且取消了按鍵消抖延時。

sbit r1 = p2^0;

sbit r2 = p2^1;

sbit r3 = p2^2;

sbit r4 = p2^3;

sbit c1 = p2^4;

sbit c2 = p2^5;

sbit c3 = p2^6;

intscankey()

使用兩塊74hc573暫存器晶元第一塊晶元控制數碼管位選,第二塊晶元控制數碼管段選。p1.6和p1.7口分別定義為dulawela變數來控制位選和段選。微控制器p0口接到74hc573的d0-d7口。第一塊的q0-q7口分別接到兩個4位共陰數碼管的a-g、dp管腳,第二塊的q0-q7口接到兩個4位共陰數碼管的1-4段選管腳。這塊的**簡單而且網上例子很多,就不再此貼上多餘**了,只需注意共陰和共陽數碼管的編碼是不同的。硬體連線的時候注意74hc573和數碼管的引腳需對應即可(在resources目錄下有4位數碼管和74hc573的管腳圖)

yf017**鏈結

yf017系列語音晶元是針對市場推出的一款具有pwm輸出的otp語音標準晶元。共有3個io口,外圍最低僅需要乙個104電容就可以穩定的工作。yf017系列語音晶元內建電阻,沒有外圍元件,外圍電路只需要乙個104電容。

下圖所示是yf017內部位址儲存的32段語音,對於本專案我們只用到位址1-11的內容。

yf017的驅動程式(根據之前提到的yf017脈衝控制原理,得到如下**):

void

music

(int z)

}

要在微控制器實現程式並行執行無非兩種方法:硬體(定時器)或軟體程式設計控制。在本專案中,我使用定時器來實現這種「一定程度的程度並行」。通過定時器計時得到1s(區域性變數累加)的時長。然後定義乙個區域性變數sound_times,當計時到1s時,區域性變數+1,根據這個區域性變數的值再加乙個if條件判斷即可實現music()的1s延時。具體實現可以參考src/server/main.c中的**。

通過設定序列控制暫存器scon,tmod、thx、tlx設定波特率。串列埠通訊原理在這裡不再詳述。只是在具體地使用send()函式和receive()進行傳送時需要注意,我們傳送兩個資料:佇列人數和當前通過按鍵獲取的號碼,因此需要使用兩個變數作為flag標誌,傳送資料前先傳送該資料的flag,接收資料時先對該flag進行判斷然後再接收資料並賦值。

5.4串列埠通訊傳送端

排隊叫號python程式設計 排隊叫號系統源程式

include config.h include include.h int main void var init 變數初始化 io init 引腳初始化 ti cc spisetup spi 初始化ti cc powerupresetcc x reset cc x writerfsettings ...

排隊叫號系統方案 如何選購微信排隊叫號系統?

而到了現場的顧客,如果有手機,可以直接使用手機排隊。如果個別顧客,比如老年人,沒有手機,則可以列印小票排隊。以上三種排隊方式是並列的關係。可以根據客戶的前方人數,自動提醒顧客,比如前方人數少於5人時,可以自動提醒顧客做好準備,如果不在現場,請盡快趕到現場等待叫號。如果顧客離開了現場,返回時如果不了解...

模擬銀行排隊叫號機 2011 04 18

銀行 看到排隊叫號機,自不量力模擬實現以下。include using namespace std include listlistint void putin int a listint.push back a void getout if listint.size 0 coutelse cout...