单片机排队叫号系统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获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github