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