银行排队叫号系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*
硬件材料:用51单片机、4个独立按键(代表四个窗口营业员消号控制端)、1个独立按键叫号(顾客使用)、无源蜂鸣器(起到提示作用)以
及LCD1602显示信息
目的:使人们免于排队浪费时间和体力,能在排队的时间里处理个人事务
用途:银行的排队,医院的挂号等等*
功能:实现自动排队并完成叫号,设置一个排号按键,以及四个柜台用消号按键。
当按下叫号键时,1.若队列不满,LCD显示"Your No.is 01!"的字样。
2.若队列已排满,LCD显示"The queue is full,please wait"的字样。
当按下消号键时,1.若队列无人,LCD显示"Sorry,the queue is empty
!"的字样。2.若队列有人,蜂鸣器响,LCD显示如"No.01 come to No.1
window,please!"的字样。
编程:王健
显示:用LCD1602显示如"No.01 come to No.1window,please!"的字样
要求:通过控制4个独立按键实现窗口控制消号,一个键实现叫号。最大累计允许10人排队,当排队人数超过此人数是系统显示停止排队*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;
sbit key7=P1^7;
sbit cd=P2^7;
sbit BEEP=P2^6;
static uint idata sev=0;
static uint idata sev1=0;
static uint idata sev2=0;
static uint idata sev3=0;
static uint idata sev4=0;
static uint idata rank[10]={0}; //排队叫号存储的数组
uint idata num=0; //窗口消的号码
static uint data jz=0;
static uint idata LengthFlag=0; //队列长度叫一次号时+1,消一次号时-1 static uint idata num_count=1; //排队叫的号码
uchar data test[]="Hello!"; //初始显示的字符
uchar data prompt1[]="Your No.is 00!"; //1062第一行显示的字符
uchar data prompt2[]="No.00 come to No"; //1062第一行显示的字符
uchar data prompt3[]=".0window,please!"; //1062第二行显示的字符
uchar data prompt4[]="The queue is"; //1062第一行显示的字符
uchar data prompt5[]="full,please wait"; //1062第二行显示的字符
uchar data prompt6[]="Sorry,the queue "; //1062第一行显示的字符
uchar data prompt7[]="is empty!"; //1062第二行显示的字符
uchar idata prompt8[]="00 is left";
uchar idata prompt9[]="all is 00";
uchar idata prompt10[]="W1 - 00";
uchar idata prompt11[]="W2 - 00";
uchar idata prompt12[]="W3 - 00";
uchar idata prompt13[]="W4 - 00";
uchar idata prompt14[]="chadui!";
void delay(int n) //延时程序
{ int i,j;
for(i=0;i<=n;i++)
for(j=0;j<=10;j++);
}
void SPEAKER(uint x) //蜂鸣器程序
{
uchar i;
for(i=0;i<=200;i++)
{
delay(x);
BEEP=!BEEP;
}
BEEP=1;
//delay(200);
}
/***********************************LCD程序**********************************************/
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
for(i=0;i for(j=0;j<100;j++); } void LCD_w_com(unsigned com) // 写指令 { RW=0; RS=0; E=1; P0=com; delay1ms(40); E=0; RW=1; } void LCD_w_dat(uchar dat) // 写数据 { RW=0; RS=1; E=1; P0=dat; delay1ms(40); E=0; RW=1; } void gotoxy(unsigned x,unsigned y) //x,y分别代表行列 { if(x==1) LCD_w_com(0x80+y); else LCD_w_com(0xC0+y); } void clear_LCD(void) { LCD_w_com(0x01); //清屏指令 LCD_w_com(0x02); // 光标归位即光标置于左上位置