基于单片机的排队叫号系统设计(5)

2019-08-26 16:57

第7章 系统程序

#include #define uchar unsigned char #define uint unsigned int sbit rs=P2^6; sbit rw=P2^5; sbit e=P2^7; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit sounder=P1^5;

uchar s1[]=\ uchar s2[]=\ uchar s3[]=\ uchar s4[]=\

uint num1=0; //排队叫的号码 uint rank[20]={0}; //排队叫号存储的数组 uint num2=0; //窗口消的号码 int Flag=0; //叫号的标志 int ClearFlag=0; //消号的标志

uint Length=0; //队列长度 叫一次号时+1,消一次号时-1

/*延时函数*/ void delay(uint n) {

while (n--); }

/***************************************** LCD1602 *显示屏命令写入函数*

18

*****************************************/ void write_com(uchar com) { e=0; rs=0; rw=0; P0= com; delay(1000); e=1; delay(1000); e=0; }

/***************************************** LCD1602 *显示屏数据写入函数*

*****************************************/ void write_data(uchar date) { e=0; rs=1; rw=0; P0 = date; delay(1000); e=1; delay(1000); e=0; }

/***************************************** LCD1602 *显示屏清空显示*

*****************************************/ void clear(void) {

write_com(0x01); delay(1000);

19

}

/***************************************** LCD1602 显示屏初始化函数

*****************************************/ void init(void) {

write_com(0x38); /*显示模式设置*/ delay(100); write_com(0x38); delay(100); write_com(0x38); delay(100); write_com(0x38);

write_com(0x08); /*显示关闭*/ write_com(0x01); /*显示清屏*/ write_com(0x06); /*显示光标移动设置*/ delay(100);

write_com(0x0C); /*显示开及光标设置*/ }

/*简单的蜂鸣器提示音*/ void sound() { uint a;

for(a=0;a<500;a++) { } }

/*获取键值函数*/ uint key() {

uint jianzhi;

20

sounder=0; delay(61); sounder=1;

if(key1==0) { } } }

/*****************************************

叫号机 按一次一号键变量+1,最大为20 *****************************************/ void QueueNum() {

if(Flag==1) //判断叫号标志是否有效 {

if ( Length<20) {

num1++;

rank[Length] = num1; return (jianzhi); if(key2==0||key3==0) if(key2==0) jianzhi=2; if(key3==0) jianzhi=3; ClearFlag=1; { delay(1000);

delay(1000); if(key1==0) jianzhi=1; Flag=1;

} Length++; } }

/*****************************************

21

窗口消号处理函数

*****************************************/ void ClearNum() { uint i;

if (ClearFlag==1) //判断消号标志是否有效 {

num2=rank[0]; //把消的号赋给全局变量num

for(i=0;i<19;i++) //让数组整体左移一个存储单元,即把消得号删除 {

rank[i]=rank[i+1]; } Length--; } }

/***************************************** 检测到按键后,检测函数处理及LCD显示处理 *****************************************/ void CheckButton(uint m) //m代表检测到的键值 { uint jz,i; jz=m;

if((jz==1) && (Flag==1)) {

// 当队列人数达到20时,提示 // Queue is full

if( Length>=20 ) { clear();

write_com(0x80+0x02);

delay(100); for(i=0;i<16;i++) {

22


基于单片机的排队叫号系统设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金融综合知识考试题库1000 - 题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: