当前位置:文档之家› 基于51单片机的银行排队系统方案

基于51单片机的银行排队系统方案

机电职业技术学院
课程设计(实训)任务书
电子1101班
根据教学计划的安排,于本学期2013年1月7日- 11日为期壹周进行课程设计(实训),望做好准备。

实训名称:银行排队系统的设计
提交成果:1.实训报告;2.编写的软件
实训容与要求(见附件)。

专业负责人:
系主任:
电气工程系
2012年12月31日
附件:《单片机原理及应用》实训说明
一、实训目的、任务与要求:
本课程实训目的:通过对单片机程序的设计,基本掌握51单片机开发系统的操作、编程技巧,实现让学生对单片机的了解从感性认识上升为理性认识。

实训任务:完成排队系统的控制功能。

二、时间安排
周一、三、五:8:00-11:30,14:30-16:30
周二:8:00-10:30 周四:8:00-10:30 ,14:30-16:30
三、实训教学容:
实训容:
1.控制数码管显示:数码管Q1-Q4分别作两个不同窗口业务办理序号显示;
2.分别用两个按键作为“普通业务”、“VIP业务”的选择,剩余两个按键分别作为两个窗口叫号的选择,长按1秒表示业务办理中;当按下“下一位”键的时候,相应窗口数码管闪动显示,并加入声光提示;
3.*在定时3S后如无人办理,自动显示下一位序号(要求选择时VIP业务优先于普通业务且显示号为“P*”,*代表序号)。

4.答辩,展示、介绍程序运行结果。

四、考核方式
1.无故不能缺勤;
2.要求按规定时间完成设计和实训报告;
3.进行答辩。

4.总成绩=10%(平时考勤)+60%(演示、答辩)+30%(实训报告)
附:实训报告要求
1.实训目的
2.实训容
3.流程图
4.源程序
5.实训心得
银行排队系统
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit b1=P3^2;//VIP用户排队键
sbit b2=P3^3;//普通用户排队键
sbit b3=P3^4;//窗口一
sbit b4=P3^5;//窗口二
sbit b5=P3^7;//蜂鸣器
uint i,j,i0,j0,i1,j1;
uchar s1,s2,s3,s4,k1,k2,k3,k4;
uchar y1,y2,v1,v3,v4,m1,m2,m3,m4;
uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//0到9 void delay(uint x)
{
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void xianshi1();//千位和百位显示
void xianshi2();//十位和个位显示
void jianpan(); //键盘扫描
void dingshi(); //定时
void panduan1();//窗口一判断
void panduan2();//窗口二判断
void main()
{
EA=1;
TMOD=0x11;
ET0=1;
ET1=1;
TH0=(65536-45600)/256;
TL0=(65536-45600)%256;
TH1=(65536-45600)/256;
TL1=(65536-45600)%256;
while(1)
{
jianpan();//键盘扫描
xianshi1();//扫描显示
xianshi2();
dingshi(); //定时判断
}
}
void int1() interrupt 1 //窗口一定时
{
TH0=(65536-45600)/256;
TL0=(65536-45600)%256;//定时50ms(晶振11.0592M) m1++;
if(m1==120)//定时120*50ms=6s
{
m1=0;
m3++;
}
}
void int2() interrupt 3 //窗口二定时
{
TH1=(65536-45600)/256;
TL1=(65536-45600)%256;
m2++;
if(m2==120)
{
m2=0;
m4++;
}
}
void dingshi()
{
if(m3==1) //如果m3=1,调用判断1函数 {
m3=0;
panduan1();
}
if(m4==1)
{
m4=0;
panduan2();
}
}
void xianshi1()
{
P2=0x10; //千位
if(y1>0) //y1>0,显示“P”
P0=0x8c;
else P0=a[k1];
delay(1);
P2=0x00;
P0=0xff;
P2=0x20; //百位
P0=a[k2];
delay(1);
P2=0x00;
P0=0xff;
}
void xianshi2()
{
P2=0x40; //十位
if(y2>0) //y2>0,显示“P” P0=0x8c;
else P0=a[k3];
delay(1);
P2=0x00;
P0=0xff;
P2=0x80; //个位
P0=a[k4];
delay(1);
P2=0x00;
P0=0xff;
}
void jianpan()
{
if(b1==0) //VIP用户排队
{
delay(8);
if(b1==0)
{
while(!b1);
TR0=1; //开定时器0
TR1=1; //开定时器1
y1=1;
s1++;
v1++;
s3=0;
s4=0;
k1=s1/10;
k2=s1%10;
xianshi1();
if(s1>=9)
s1=0;
}
}
if(b2==0) //普通用户排队 {
delay(8);
if(b2==0)
{
while(!b2);
TR0=1;
TR1=1;
s2++;
y2=0;
k3=s2/10;
k4=s2%10;
xianshi2();
if(s2>99)
s2=0;
}
}
if(b3==0) //窗口一
{
delay(8);
if(b3==0)
{
while(!b3)
{
j0++;
i0=110;
while(i0--);
}
if(j0>=200)//如果长按超过1s,关闭定时器0
TR0=0;
else
{
TR0=1;
panduan1();
}
j0=0;
}
}
if(b4==0) //窗口二
{
delay(8);
if(b4==0)
{
while(!b4)
{
j1++;
i1=110;
while(i1--);
}
if(j1>=200)//如果长按超过1s,关闭定时器1
TR1=0;
else
{
TR1=1;
panduan2();
}
j1=0;
}
}
}
void panduan1()
{
b5=0;
P1=0xf0;
delay(200);
b5=1;
P1=0xff;
m1=0;
s3++;
if((s1>0||s2>0)&&(s3+s4)<=v1)//显示VIP {
y1=1;
k1=(s3+s4)/10;
k2=(s3+s4)%10;
xianshi1();
}
else //显示普通
{
y1=0;
v3++;
k1=(v3+v4)/10;
k2=(v3+v4)%10;
xianshi1();
if((v3+v4)>=s2)
{
v3=0; v4=0;
s1=0; s2=0; s3=0; s4=0;
TR0=0; TR1=0;
}
}
}
void panduan2()
{
b5=0;
P1=0x0f;
delay(200);
b5=1;
P1=0xff;
m2=0;
s4++;
if((s1>0||s2>0)&&(s3+s4)<=v1)//显示VIP {
y2=1;
k3=(s3+s4)/10;
k4=(s3+s4)%10;
xianshi2();
}
else //显示普通
{
y2=0;
v4++;
k3=(v3+v4)/10;
k4=(v3+v4)%10;
xianshi1();
if((v3+v4)>=s2)
{
v3=0; v4=0;
s1=0; s2=0; s3=0; s4=0;
TR0=0; TR1=0;
}
}
}。

相关主题