51單片機雙機串口數(shù)碼管顯示排隊叫號仿真設(shè)計( proteus仿真+程序+報告+講解視頻)
仿真圖proteus 7.8及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設(shè)計編號:S0034
1.主要功能:
設(shè)計要求
采用51單片機作為核心控制器
1、主機通過按鍵完成叫號,數(shù)碼管顯示被叫的號碼,蜂嗚器響,提醒顧客接受服務(wù);
2、從機通過串行通信方式完成排隊職號功能;
3、從機顯示隊列中排在其前面的顧客數(shù);
任務(wù)安排
組員1:多機通信程序設(shè)計
組員2:數(shù)碼管顯示程序設(shè)計功能
組員3:根據(jù)組員1和組員2的子程序完成設(shè)計所需功能程序設(shè)計
從機顯示隊列中排在其前面的顧客數(shù);
以下為本設(shè)計資料展示圖:
2.仿真
開始仿真
點擊開始按鍵后,開始仿真后先取號,點一次取號鍵領(lǐng)取一個號碼。當前是六號,前面還有5個人排隊,正在辦理業(yè)務(wù)的是01號。
3.程序
叫號機代碼
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^4;//按鈕
sbit k2=P3^5;//休息
sbit beep=P2^3;//蜂鳴器
sbit duan=P2^6;
sbit wei=P2^7;//數(shù)碼管
uint beep_time=0;
uchar mode=0;//模式
//數(shù)碼管編碼
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num1=0;//號碼
uchar num2=0;//叫號數(shù)字
//延時
void delay(uint i)
{
while(i--);
}
//主函數(shù)
void main()
{
uchar k=0;
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X21; //設(shè)置計數(shù)器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打開接收中斷
TR1=1; //打開計數(shù)器
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
while(1)
{
//叫號
if(!k1 &&(k!=1))
{
k=1;
if(num2<num1)
{
mode=1;
num2++;
SBUF=num2;while(!TI);TI=0;
beep_time=1000;
}
else
mode=0;
}
//休息
if(!k2 &&(k!=2))
{
k=2;
mode=0;
}
//顯示
if(mode>0)
{
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xfe;wei=1;delay(1);wei=0;//位選
P0=smgduan[num2/10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xfd;wei=1;delay(1);wei=0;//位選
P0=smgduan[num2%10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
}
else
{
P0=0x40;duan=1;delay(1);duan=0;//減號
P0=0;wei=1;delay(1);wei=0;//位選
}
if(k1 && k2)
k=0;
}
}
//定時器0中斷
void Timer0() interrupt 1
{
if(beep_time>0)//蜂鳴器響
{
beep_time--;
beep=!beep;
}
else
beep=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
//串口中斷
void Usart() interrupt 4
{
uchar i;
i=SBUF;//出去接收到的數(shù)據(jù)
RI = 0;//清除接收中斷標志位
num1=i;
}
取號機代碼
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^4;//按鈕
sbit beep=P2^3;//蜂鳴器
sbit duan=P2^6;
sbit wei=P2^7;//數(shù)碼管
uint beep_time=0;
uint time=0;
//數(shù)碼管編碼
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num1=0;//號碼
uchar num2=0;//叫號數(shù)字
//延時
void delay(uint i)
{
while(i--);
}
//主函數(shù)
void main()
{
uchar k=0;
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X21; //設(shè)置計數(shù)器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打開接收中斷
TR1=1; //打開計數(shù)器
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
while(1)
{
//拿號
if(!k1 &&(k!=1))
{
k=1;
num1++;
SBUF=num1;while(!TI);TI=0;
beep_time=500;
time=5000;
}
//顯示
if(time>0)
{
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xfe;wei=1;delay(1);wei=0;//位選
P0=smgduan[num1/10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xfd;wei=1;delay(1);wei=0;//位選
P0=smgduan[num1%10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xef;wei=1;delay(1);wei=0;//位選
P0=smgduan[(num1-num2)/10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隱
P0=0xdf;wei=1;delay(1);wei=0;//位選
P0=smgduan[(num1-num2)%10];duan=1;delay(1);duan=0;//數(shù)據(jù)
delay(50);
}
else
{
P0=0x40;duan=1;delay(1);duan=0;//減號
P0=0;wei=1;delay(1);wei=0;//位選
}
if(k1)
k=0;
}
}
//串口中斷
void Usart() interrupt 4
{
uchar i;
i=SBUF;//出去接收到的數(shù)據(jù)
RI = 0;//清除接收中斷標志位
num2=i;
}
4.設(shè)計報告
報告格式規(guī)范,字數(shù)6584,含各種框圖。
部分內(nèi)容
1.1 設(shè)計背景與意義
排隊論(又稱隨機服務(wù)系統(tǒng))是研究系統(tǒng)由于隨機因素的干擾而出現(xiàn)排隊(或擁塞)現(xiàn)象的規(guī)律的一門學(xué)科,它適用于一切服務(wù)系統(tǒng),包括公共服務(wù)系統(tǒng)、通信系統(tǒng)、計算機系統(tǒng)等??梢哉f,凡是出現(xiàn)擁塞現(xiàn)象的系統(tǒng),都屬于隨機服務(wù)系統(tǒng)。一個對象通過擁塞系統(tǒng)接受服務(wù)必須經(jīng)過三個環(huán)節(jié),即到達、排隊等候處理、接受服務(wù)和離去。例如在醫(yī)院中,排隊流程如下:患者在掛號的同時領(lǐng)取排隊號碼,然后到候診區(qū)候診;當為前一患者完成診斷后,醫(yī)生通過本系統(tǒng)呼叫隊列中下一位患者,患者就可直接到空閑診室行排隊等候服務(wù)。
另一個方面,伴隨著服務(wù)行業(yè)業(yè)務(wù)量不斷增長,業(yè)務(wù)種類日益增多,排隊等候已成為人們經(jīng)常面臨的實際問題。在銀行,醫(yī)院,電信,稅務(wù),工商等營業(yè)大廳里,前擁后擠,雜亂無章的排隊等候,已是司空見慣的現(xiàn)象,影響了服務(wù)質(zhì)量。因此,改善服務(wù)質(zhì)量,樹立良好的企業(yè)形象,解決客戶勞累的排隊現(xiàn)象,創(chuàng)造人性化服務(wù)環(huán)境已成為急需解決的問題。設(shè)計一套排隊抽號的服務(wù)系統(tǒng),可以很好的解決因排隊引起的種種問題。
本系統(tǒng)通過AT89C51單片機直接擴展獨立鍵盤,完成排隊取號流程,單片機控制數(shù)碼管顯示排隊等待情況,控制蜂鳴器發(fā)聲完成叫號功能。該系統(tǒng)有良好的人機交互界面,模擬排隊管理,科學(xué)地處理各種排隊情況,操作簡便,控制靈活,顯示清晰,制作成本低,性價比較高。
1.2 設(shè)計目的
(1)鞏固和加深對單片機原理和接口技術(shù)知識的理解;
(2)培養(yǎng)根據(jù)課題需要選學(xué)參考書籍、查閱手冊和文獻資料的能力;
(3)學(xué)會方案論證的比較方法,拓寬知識,初步掌握工程設(shè)計的基本方法;
(4)掌握常用儀器、儀表的正確使用方法,學(xué)會軟、硬件的設(shè)計和調(diào)試方法;
(5) 能按課程設(shè)計的要求編寫課程設(shè)計報告,能正確反映設(shè)計和實驗成果,能用計算機繪制電路圖、仿真圖和流程圖。
1.3 設(shè)計要求及內(nèi)容
1、主機通過按鍵完成叫號,數(shù)碼管顯示被叫的號碼,蜂嗚器響,提醒顧客接受服務(wù);
2、從機通過串行通信方式完成排隊職號功能;
3、從機顯示隊列中排在其前面的顧客數(shù);
1.4 本文結(jié)構(gòu)安排
本文圍繞著基于51單片機的排隊叫號系統(tǒng)展開設(shè)計,以排隊叫號需求為出發(fā)點,首先明確了研究背景與意義,介紹了設(shè)計目的,并論述了設(shè)計要求及設(shè)計內(nèi)容,接下來的幾章將具體展開相關(guān)設(shè)計與研究:
第二章介紹系統(tǒng)總體方案及相關(guān)理論知識,重點闡述了系統(tǒng)功能需求和系統(tǒng)方案論證,接著簡要介紹了系統(tǒng)硬件及軟件基本知識。
第三章重點展開硬件系統(tǒng)設(shè)計,首先明確叫號機及取號機硬件電路設(shè)計的思路及框架。接著依次介紹了:單片機最小系統(tǒng)、按鍵電路、數(shù)碼管顯示電路、蜂鳴器提醒電路、電源電路等。通過對以上重點電路的介紹,強化了硬件電路設(shè)計的細節(jié)和重點。
第四章展開軟件系統(tǒng)設(shè)計,通過對軟件設(shè)計進行需求分析,明確軟件設(shè)計的目的與需求,進一步通過程序流程圖展示設(shè)計思路及框架。接著依次介紹了主函數(shù)流程、取號機取號流程、叫號機叫號程序流程、蜂鳴器提醒流程。
第五章介紹仿真實現(xiàn)步驟,特別是仿真電路實現(xiàn)的流程和仿真測試,完美實現(xiàn)了設(shè)計需求及目標。
第六章總結(jié)全文,總結(jié)本文所做的工作及貢獻,并根據(jù)存在的問題展望此課題今后的研究方向。
2 總體設(shè)計方案
2.1 系統(tǒng)需求及方案設(shè)計
為了實現(xiàn)基于51單片機的排隊叫號系統(tǒng)的設(shè)計,本文將實現(xiàn)以下設(shè)計需求:
(1)取號機可實時進行取號,較好的現(xiàn)實中的取號情況;
(2)直接、清晰明了的顯示顧客排隊號;
(3)叫號機通過按鍵完成叫號,數(shù)碼管液晶顯示屏顯示被叫的號碼及服務(wù)的柜臺號;同時,蜂鳴器響,以提醒顧客接收服務(wù);
(4)操作簡單、功能完善、精確度高。
5.設(shè)計資料內(nèi)容清單
見文章開頭視頻