当前位置: 首页 > news >正文

基于单片机教室人数实时检测系统仿真及源程序

一、系统方案
1、本设计采用51单片机作为主控器。
2、红外传感器检测进出人数,液晶1602显示。
3、按键最多容纳人数,烟雾报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
void lcd_init()
{
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);

}
2、液晶显示程序
void check_busy()
{
P0=0xff;
do
{
rs=0;
wr=1;
en=0;
en=1;
} while(busy==1);
en=0;
}
/****
*******1602写数据忙函数
*/
void lcd_write_date(uchar date)
{
check_busy();
en=0;
LCD_PORT=date;
rs=1;
wr=0;
en=1;
en=0;
}
/

*******1602写命令函数
*/
void lcd_write_com(uchar com)
{
check_busy();
en=0;
LCD_PORT=com;
rs=0;
wr=0;
en=1;
en=0;
}
/

*******1602写温度函数
*****/
void lcd_wendu(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
lcd_write_com(add);
lcd_write_date(shi+‘0’);
lcd_write_date(ge+‘0’);
}
3、按键程序
void keyscan()
{

	if(K1==0){delayms(10);	//消除抖动if(flag1==0){flag1=1;count++;if(count>=100) count=99;buf_3[0]=count/10+'0';buf_3[1]=count%10+'0';lcd_write_str(0x80+0x40+8,buf_3);}}else flag1=0;if(K2==0)		//检测按键K2(反转)是否按下
{delayms(10);	//消除抖动if(flag2==0){flag2=1;if(count>=1)count--;buf_3[0]=count/10+'0';buf_3[1]=count%10+'0';lcd_write_str(0x80+0x40+8,buf_3);}}	
else flag2=0;

if(K30) //检测按键K2(反转)是否按下
{
delayms(10); //消除抖动
if(K3
0)
{
if(count >= set)
LED = 0;
else
{
BUZ = 0;
delayms(500);
BUZ = 1;
delayms(500);
BUZ = 0;
delayms(500);
BUZ = 1;
delayms(500);
}
}
while(!K3) //检测按键是否松开
{
delayms(3000);
BUZ = 1;
LED = 1;
}

}	

if(s10) //检测按键K2(反转)是否按下
{
delayms(10); //消除抖动
if(s1
0)
{
set++;
if(set>=100) set=99;
buf_3[0]=set/10+‘0’;
buf_3[1]=set%10+‘0’;
lcd_write_str(0x80+8,buf_3);
}
while(!s1) //检测按键是否松开
{

	}}	if(s2==0)		//检测按键K2(反转)是否按下
{delayms(10);	//消除抖动if(s2==0){if(set>=1) set--;buf_3[0]=set/10+'0';buf_3[1]=set%10+'0';lcd_write_str(0x80+8,buf_3);}while(!s2) //检测按键是否松开{}}	

}

4、核心算法程序
/┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数功能:主函数
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
/
void main(void)
{
uint i;
count = 0;
TMOD = 0x01; //T0 16位工作方式
IR_1=1; //发射端口常态为高电平

lcd_init();
lcd_write_str(0x80,buf_1);
lcd_write_str(0x80+0x40,buf_2);
lcd_write_str(0x80+0x40+8,"00");

while(1)
{
keyscan();
if(yw==0) BUZ=0;
else BUZ=1;
}
}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

http://www.lryc.cn/news/230032.html

相关文章:

  • 【Linux笔记】Linux环境变量与地址空间
  • 【springboot】@restcontroller和@controller的区别
  • oracle 不支持的字符集 orai18n.jar ZHS16GBK 异常问题解决
  • 设计模式-04-原型模式
  • D. Jumping on Walls bfs
  • preg_replace调用system(“ls“)
  • MT8788核心板主要参数介绍_联发科MTK安卓核心板智能模块
  • Matlab批量提取图片特征向量
  • 数据库系统原理与实践 笔记 #8
  • Ubuntu 和 Windows 文件互传
  • 如何在WPF应用程序中全局捕获异常
  • 自定义Matplotlib中的颜色映射(cmap)
  • Ansible的filter
  • Qt绘制各种图表
  • 【科研新手指南4】ChatGPT的prompt技巧 心得
  • 龙蜥社区联合浪潮信息发布《eBPF技术实践白皮书》(附下载链接)
  • 屏幕截图软件 Snagit mac中文版软件特点
  • 四、Ribbon负载均衡
  • 【Git】第二篇:基本操作(创建本地仓库)
  • vuex——重置vuex数据
  • WebSphere Liberty 8.5.5.9 (三)
  • 如何区分一个项目是react还react native
  • 网易有道开源语音合成引擎“易魔声”
  • [量子计算与量子信息] 2.1 线性代数
  • 【PG】PostgreSQL 目录结构
  • H5游戏源码分享-超级染色体小游戏
  • NOIP 2017 宝藏----Java题解
  • 数据结构和算法的重要性
  • 2023.11.10 信息学日志
  • 0基础学习VR全景平台篇第120篇:极坐标处理接缝 - PS教程