银行排队系统的设计51单片机.docx
- 文档编号:1238163
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:11
- 大小:76.44KB
银行排队系统的设计51单片机.docx
《银行排队系统的设计51单片机.docx》由会员分享,可在线阅读,更多相关《银行排队系统的设计51单片机.docx(11页珍藏版)》请在冰点文库上搜索。
银行排队系统的设计51单片机
《单片机原理及应用》实训说明
微电班。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
实训名称:
银行排队系统的设计
实训教学内容:
(一)硬件
AT89S51单片机
2个独立按键叫号(顾客使用)
2个独立按键(代表两个窗口营业员控制端)、
8个七段数码管显示信息
无源蜂鸣器、发光二极管(起到提示作用)
(二)任务要求
1.数码管显示:
(1)排队号码显示:
数码管Q1Q2作普通业务,Q3Q4作VIP业务排队号码显示(显示号为“P*”,*代表序号);
普通业务最大累计 允许10人排队,VIP业务最大累计 允许5人排队。
当排队人数超过此人数时数码管显示OV。
(2)当前业务办理号码显示:
数码管Q5Q6作窗口1,Q7Q8作窗口2业务办理序号显示。
2.按键控制
(1)两个按键作为“普通业务”、“VIP业务”的选择(顾客使用);
(2)两个按键分别作为两个窗口叫号的选择(窗口营业员控制)。
初始叫号从号码01或P1开始。
短按表示跳到下一位办理,此时相应窗口数码管闪动显示,并加入声光提示;长按1秒表示业务办理中;
3.*在定时10S后如无人办理,自动跳转显示下一位序号(要求选择时VIP业务优先于普通业务)。
4.答辩,展示、介绍程序运行结果。
已基本实现功能而有待改进的程序:
P0口数码管的段选,P2口是位选。
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineYH10//普通用户名额
#defineVP5//VIP名额
sbitdian=P0^7;//定义数码管小数点
sbitS1=P3^0;//定义普通用户按键
sbitS2=P3^1;//定义贵宾用户按键
sbitS3=P3^2;//定义窗口1按键
sbitS4=P3^3;//定义窗口2按键
sbitLED1=P1^2;
sbitLED2=P1^3;
sbitFM=P1^4;
uintm1=1,m2=1,m3=1,m4=1;//定义全局变量m1标记S1,m2标记S2,m3标记S3,m4标记S4;
uintYONGHU,VIP,CK1,CK2;//定义全局变量分别是用户,vip,窗口1,窗口2;
bitout1,out2,out3,out4;//溢出标记
longdengdai10s1;dengdai10s2;//等待10s标记;
ucharN=0;
voiddelay(unsignedintj)//基本延时单位1ms
{
unsignedinte,f;
for(e=0;e for(f=0;f<=110;f++); } voidanjian()//按键识别 { if(S1==0)//按键S1按下,用户人数+1,具有防抖功能 { if(m1! =0)//判断上一次按键是否松开 { m1++;//达到50ms时人数加1 if(m1>50) { YONGHU++; m1=0; } } } elsem1=1; if(S2==0)//按键S2按下,VIP人数+1 { if(m2! =0) { m2++; if(m2>50) { VIP++; m2=0; } } } elsem2=1; if(S3==0)//按键S3按下,窗口1 { if(m3! =0) { m3++; if(m3>=1000) { dengdai10s1=0;//长按达到1s,关断10秒计时 m3=0; out3=0; } } } else { if(m3>50) { CK1=99;//短按时是下一位 dengdai10s1=1;//启动10s计时 out3=1; } m3=1; } if(S4==0)//按键S4按下,窗口2 { if(m4! =0) { m4++; if(m4>=1000) { dengdai10s2=0; out4=0; m4=0; } } } else { if(m4>50) { CK2=99; dengdai10s2=1; out4=1; } m4=1; } } voidxianshi(longa)//显示部分 { inti=0; intshuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; N++; if(N==15) N=0; if(out3==1||out4==1) FM=~FM; for(i=0;i<8;i++)//输出数字 { P0=0Xff; P2=0x01< P0=shuzi[a%10]; if(out3==1) { LED1=~LED1; if(N<5) if(i==3||i==2) { P0=0xff; } } elseLED1=0; if(out4==1) { LED2=~LED2; if(N<6) if(i==1||i==0) { P0=0xff; } } elseLED2=0; if(out2==1) { if(i==4) P0=0xc1; if(i==5) P0=0xc0; } else if(i==5) P0=0x8C; if(out1==1) { if(i==6) P0=0xc1; if(i==7) P0=0xc0; } dian=1; if(i==2||i==4||i==6) dian=0; a=a/10; delay (2); P0=0Xff; } } main() { uintyonghu=0; uintvip=0; longhe; TMOD=0x01;//使用定时器0,工作方式1,1ms计时; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1;//总中断允许; ET0=1;//允许定时中断; TR0=1;//启动定时器0; while (1) { if(CK1==99) { if(vip elseif(yonghu CK1=++yonghu; else out3=0; } if(CK2==99) { if(vip elseif(yonghu CK2=++yonghu; else out4=0; } he=YONGHU*1000000+VIP*10000+CK1*100+CK2; xianshi(he); } } voidTOJI(void)interrupt1//定时器0中断程序; { TH0=(65526-1000)/256; TL0=(65526-1000)%256; anjian();//按键识别,得到四个数据 if(dengdai10s1! =0) { dengdai10s1++; if(dengdai10s1==10000) { dengdai10s1=1; CK1=99; } } if(dengdai10s2! =0) { dengdai10s2++; if(dengdai10s2==10000) { dengdai10s2=1; CK2=99; } } if(YONGHU>YH)//判断用户名额 { YONGHU=YH; out1=1; } if(VIP>VP)//判断VIP名额 { VIP=VP; out2=1; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行 排队 系统 设计 51 单片机