单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

本文主要是介绍单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、前言

​ 2、程序

资料下载地址:单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

1、前言

系统组成:STC89C52RC+Lcd1602+蜂鸣器+按键

具体介绍:

Lcd1602排队叫号系统,有取号显示窗和叫号显示窗。有取号键和叫号键以及重复叫号键。可以显示你前面有几人在等候。具体看图片上面。

 2、程序

void init()//初始化
{t0=0;windown=0;num=0;buzzer=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;//定时器0	init_lcd2();init_lcd1();		
}void main()
{init();while(1){display_lcd2(num);}
}
void keyscan()//按键检测
{if(k0==0)//患者叫号按键检测{delay(10);//延时消抖if(k0==0)num++;//号码数加1while(!k0);delay(10);//延时消抖while(!k0);//按键松手检测}if(k1==0)//一号诊室呼叫{delay(10);if(k1==0){if(num1<num){windown=1;num1++;TR0=1;num2_1=num1;display_lcd1(num1,windown);//液晶一显示当前呼叫的号码}	}while(!k1);delay(10);//延时消抖while(!k1);//按键松手检测}if(k2==0)//二号诊室呼叫{delay(10);if(k2==0){if(num1<num){windown=2;num1++;TR0=1;num2_2=num1;display_lcd1(num1,windown);//液晶一显示当前呼叫的号码}	}while(!k2);delay(10);//延时消抖while(!k2);//按键松手检测}if(k3==0)//三号诊室呼叫{delay(10);if(k3==0){if(num1<num){windown=3;num1++;TR0=1;num2_3=num1;display_lcd1(num1,windown);//液晶一显示当前呼叫的号码}	}while(!k3);delay(10);//延时消抖while(!k3);//按键松手检测}if(k4==0)//四号诊室呼叫{delay(10);if(k4==0){if(num1<num){windown=4;num1++;TR0=1;num2_4=num1;display_lcd1(num1,windown);//液晶一显示当前呼叫的号码}	}while(!k4);delay(10);//延时消抖while(!k4);//按键松手检测}if(p1==0)//一号诊室重新呼叫{delay(10);if(p1==0){TR0=1;display_lcd1(num2_1,1);			}while(!p1);delay(10);//延时消抖while(!p1);//按键松手检测}if(p2==0)//二号诊室重新呼叫{delay(10);if(p2==0){TR0=1;display_lcd1(num2_2,2);			}while(!p2);delay(10);//延时消抖while(!p2);//按键松手检测}if(p3==0)//三号诊室重新呼叫{delay(10);if(p3==0){TR0=1;display_lcd1(num2_3,3);			}while(!p3);delay(10);//延时消抖while(!p3);//按键松手检测}if(p4==0)//四号诊室重新呼叫{delay(10);if(p4==0){TR0=1;display_lcd1(num2_4,4);			}while(!p4);delay(10);//延时消抖while(!p4);//按键松手检测}					
}void write_order1(uchar order)//写指令函数	 液晶1
{rs1=0;en1=0;P0=order;delay(1);en1=1;delay(1);en1=0;	
}
void write_dat1(uchar dat)//写数据函数	 液晶1
{rs1=1;en1=0;P0=dat;delay(1);en1=1;delay(1);en1=0;	
}void init_lcd1()//液晶1初始化
{write_order1(0x38);write_order1(0x0c);write_order1(0x06);write_order1(0x80+1);
//	write_order1(0x01);//液晶必备的一些初始化for(i=0;i<16;i++)write_dat1(table1_1[i]);write_order1(0x80+0x40); //液晶显示换行for(i=0;i<16;i++)write_dat1(table1_2[i]);	
}void write_add1(uchar address,uchar dat)//指定地址写入数据
{write_order1(0x80+address);write_dat1(dat);
}void display_lcd1(uint num1,uchar windown)//液晶1显示
{uchar a,b,c,d;//用于液晶a=num1/1000;b=num1%1000/100;c=num1%1000%100/10;d=num1%10;write_add1(4,table2[a]);write_add1(5,table2[b]);write_add1(6,table2[c]);write_add1(7,table2[d]);write_add1(0x40,table2[windown]);		
}
void write_order2(uchar order)//写指令函数	 液晶2
{rs2=0;en2=0;P1=order;delay(1);en2=1;delay(1);en2=0;	
}
void write_dat2(uchar dat)//写数据函数	 液晶2
{rs2=1;en2=0;P1=dat;delay(1);en2=1;delay(1);en2=0;	
}void init_lcd2()//液晶2初始化
{write_order2(0x38);write_order2(0x0c);write_order2(0x06);write_order2(0x80);write_order2(0x00);for(i=0;i<12;i++)write_dat2(table2_2[i]);write_order2(0x80+0x40); //液晶显示换行for(i=0;i<12;i++)write_dat2(table2_1[i]);	
}void write_add2(uchar address,uchar dat)//指定地址写入数据
{write_order2(0x80+address);write_dat2(dat);
}
void write_add3(uchar address,uchar dat)//指定地址写入数据
{write_order2(0x80+0x40+address);write_dat2(dat);
}
void display_lcd2(uint num)//液晶2显示
{uchar a,b,c,d;//用于液晶uchar e,f,g,h;//显示等待人数a=num/1000;b=num%1000/100;c=num%1000%100/10;d=num%10;write_add2(12,table2[a]);write_add2(13,table2[b]);write_add2(14,table2[c]);write_add2(15,table2[d]);if(num!=num1)	//显示前面等待的人数{e=(num-num1-1)/1000;f=(num-num1-1)%1000/100;g=(num-num1-1)%1000%100/10;h=(num-num1-1)%10;}else{e=(num-num1)/1000;f=(num-num1)%1000/100;g=(num-num1)%1000%100/10;h=(num-num1)%10;	}write_add3(12,table2[e]);write_add3(13,table2[f]);write_add3(14,table2[g]);write_add3(15,table2[h]);	
}void timer0() interrupt 1
{TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0++;bi(100);if(t0>20){TR0=0;t0=0;buzzer=1;}	
}

这篇关于单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952702

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac