Multisim 教室空座信息查询系统仿真

使用Multisim电路仿真软件进行教室空座查询仿真

尝试性仿真No.1

仿真目的

对不同教室的空座情况进行查询统计,并显示在控制端,便于根据教室空座情况,选择不同的教室学习。

仿真软件

采用电路仿真软件Multisim,版本号:14.0,同时选择单片机作为控制芯片,需要Keil软件进行程序编写,Keil版本号:V5.0。

仿真思路

采用LED灯作为座位的提示信号,如果灯亮则表示座位被占用,如果灯熄灭则表示座位为空。对Multisim的随机信号产生不太明白,所以采用Multisim中的字产生器进行LED灯控制信号产生。在Multisim中单片机只提供51跟52单片机,相对管脚比较有限,所以采用74HC165并串转换软件节省管脚资源,74HC165的信号输入单片机,在单片机中统计1的个数,即表示被占用的座位数,最后控制LCD进行统计显示。

一、教室座位提示
通过LED灯的亮灭提示空座情况,仿真过程中设计两个教室,第一个教室32个座位,第二个教室16个座位。
二、字符发生器用以产生“随机信号”
Multisim中没有找到专门的随机信号发生装置,找到的资料都提示需要通过单片机产生随机信号,为了简便,用Multisim中的字符发生器来模拟信号。

在字符发生器中选择下数计数模式,也可以通过外部的软件产生计数信号,导入字符发生器中,如果选择系统默认的计数信号,缓冲区最大为0x2000,同时设置字发生器的频率为500Hz。在第一个教室中总的座位数为32,使用一个字发生器即可满足。
三、使用74HC165节约管脚资源”
使用74HC165并串转换软件将8个座位信息转换为1路输出信号。74HC165的主要控制管脚包括SH~LD、LNH、CLK,SH/LD是移位和锁存并行数据端,LNH为时钟控制端,CLK为时钟信号,如果想详细了解可以自己下载Datasheet,CSDN上写芯片使用的博客也挺多的,要注意很多Datasheet上芯片的管脚名称与Multisim中的名称不太一致,但功能是一样的,仔细看也比较容易分辨。在设计中使用了4块74HC165控制芯片。
时序图及相关说明可参照

四、单片机控制程序”
设计中使用的是Multisim库中的51单片机,管脚资源分配如表1所示。

管脚号 管脚功能
P00-P02 LCD显示屏E Rs Rw控制信号
P11-P13 74HC165 控制信号
P20-P27 LCD显示屏D0-D7
P30-P35 74HC165 QH输入端
代码设计思路只要是轮询几个74HC165的输出信号并进行统计,实时显示到LCD屏幕中,LCD屏幕初始化显示教室信息及相应的关键字,在程序运行中只更新剩余座位数信息。同时sbit没法作为形式参数进行传递,则74HC165的控制查询函数需要对每一个进行单独编程,不知道有没有好的解决办法,可以沟通。
/*****************************************************************************
Copyright:
File name:                            main.c
Description:                          main function    sbitÎÞ·¨×÷ΪÐÎʽ²ÎÊý½øÐвÎÊý´«µÝ ËùÒÔÿһ¸ö´®ÐÐоƬµÄ¶ÁÈ¡¶¼ÐèÒªÒ»¸öµ¥¶ÀµÄº¯Êý½øÐпØÖÆ
Author:                               WW
Version:                              1.0
Date:
History:
*****************************************************************************/#include <reg51.h>
#include<intrins.h>typedef enum{false=0,true=1}BOOL;typedef unsigned char uint8;
typedef unsigned int uint16;sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;#define CLK_H                      P11 = 1
#define CLK_L                      P11 = 0
#define SHLD_Enable                P12 = 0
#define SHLD_Disable               P12 = 1
#define CLK_Enable                 P13 = 0
#define CLK_Disable                P13 = 1#define LCD_Data                   P2
#define LCD_E_High                 P00 = 1
#define LCD_E_Low                  P00 = 0
#define LCD_Rs_High                P01 = 1
#define LCD_Rs_Low                 P01 = 0
#define LCD_Rw_Read                P02 = 1
#define LCD_Rw_Write               P02 = 0#define QH_11                      P30
#define QH_12                      P31
#define QH_13                      P32
#define QH_14                      P33
#define QH_21                      P34
#define QH_22                      P35void Delay(int dec)
{uint16 i = 0;for(i =0;i<dec;i++);
}void Delay_ms(int dec)
{uint16 i = 0;uint16 j = 0;for(i =0;i<dec;i++){for(j = 0;j<82;j++);}
}void LCD_Write(uint8 buffer)
{LCD_Rs_Low;LCD_Rw_Write;LCD_Data = buffer;Delay(5);LCD_E_Low;Delay(5);LCD_E_High;
}void LCD_WriteData(uint8 buffer)
{LCD_Rs_High;LCD_Rw_Write;LCD_Data = buffer;Delay(5);LCD_E_Low;Delay(5);LCD_E_High;
}
//LCD ³õʼ»¯³ÌÐò MultisimÖÐʹÓÃHITACHIµÄLCDÇý¶¯ ¸ù¾ÝÊÖ²á˵Ã÷µÄ³õʼ»¯Îĵµvoid LCD_Init()
{LCD_E_Low;Delay(10);LCD_E_High;//Çå³ýÆÁÄ»ÏÔʾLCD_Write(0x01);//¹¦ÄÜÉèÖà 8bitÏÔʾLCD_Write(0x38);//Display onLCD_Write(0x0E);//Mode SetLCD_Write(0x06);
}
//LCD ÏÔʾ³õʼ»¯Îĵµ void LCD_WriteInit()
{LCD_Write(0x80);LCD_WriteData(0x4A); //"J"LCD_Write(0x81);LCD_WriteData(0x53); //"S"LCD_Write(0x82);LCD_WriteData(0x31); //"1"LCD_Write(0x83);LCD_WriteData(0x20); //" "LCD_Write(0x84);LCD_WriteData(0x54); //"T"LCD_Write(0x85);LCD_WriteData(0x6F); //"o"LCD_Write(0x86);LCD_WriteData(0x3A); //":"LCD_Write(0x87);LCD_WriteData(0x33); //"3"LCD_Write(0x88);LCD_WriteData(0x32); //"2"LCD_Write(0x89);LCD_WriteData(0x20); //" "LCD_Write(0x8A);LCD_WriteData(0x4C); //"L"LCD_Write(0x8B);LCD_WriteData(0x65); //"e"LCD_Write(0x8C);LCD_WriteData(0x3A); //":"LCD_Write(0x8D);LCD_WriteData(0x20); //" "LCD_Write(0x8E);LCD_WriteData(0x20); //" "LCD_Write(0xC0);LCD_WriteData(0x4A); //"J"LCD_Write(0xC1);LCD_WriteData(0x53); //"S"LCD_Write(0xC2);LCD_WriteData(0x32); //"1"LCD_Write(0xC3);LCD_WriteData(0x20); //" "LCD_Write(0xC4);LCD_WriteData(0x54); //"T"LCD_Write(0xC5);LCD_WriteData(0x6F); //"o"LCD_Write(0xC6);LCD_WriteData(0x3A); //":"LCD_Write(0xC7);LCD_WriteData(0x31); //"1"LCD_Write(0xC8);LCD_WriteData(0x36); //"6"LCD_Write(0xC9);LCD_WriteData(0x20); //" "LCD_Write(0xCA);LCD_WriteData(0x4C); //"L"LCD_Write(0xCB);LCD_WriteData(0x65); //"e"LCD_Write(0xCC);LCD_WriteData(0x3A); //":"LCD_Write(0xCD);LCD_WriteData(0x20); //" "LCD_Write(0xCE);LCD_WriteData(0x20); //" "
}//»ñÈ¡µÚÒ»ÅŵÄ×ùλÊý
uint8 SerialInput_Get11(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_11){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}//»ñÈ¡µÚ¶þÅŵÄ×ùλÊý
uint8 SerialInput_Get12(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_12){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}//»ñÈ¡µÚÈýÅŵÄ×ùλÊý
uint8 SerialInput_Get13(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_13){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}//»ñÈ¡µÚËÄÅŵÄ×ùλÊý
uint8 SerialInput_Get14(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_14){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}//»ñÈ¡µÚÒ»ÅŵÄ×ùλÊý
uint8 SerialInput_Get21(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_21){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}//»ñÈ¡µÚ¶þÅŵÄ×ùλÊý
uint8 SerialInput_Get22(void)
{uint8 QH_buffer = 0x00;uint8 clc_i = 0x00;//Ëø´æ²¢ÐÐÊäÈëÊý¾ÝCLK_Disable;CLK_H;SHLD_Disable;SHLD_Enable;Delay(10);SHLD_Disable;CLK_Enable;for(clc_i = 0;clc_i<8;clc_i++){//²úÉúclkÉÏÉýÑÓ ÓÃÒÔ¶ÁÈ¡»º´æCLK_L;_nop_();CLK_H;if(QH_22){QH_buffer = QH_buffer+1;}_nop_();}return QH_buffer;
}void main()
{uint8 QH_output11 = 0x00;uint8 QH_output12 = 0x00;uint8 QH_output13 = 0x00;uint8 QH_output14 = 0x00;uint8 QH_output21 = 0x00;uint8 QH_output22 = 0x00;uint8 QH_Total1 = 0x00;uint8 QH_Total2 = 0x00;uint8 Total_num1 = 32;uint8 Total_num2 = 16;P1 = 0xff;P2 = 0xff;P0 = 0xff;P3 = 0xff;LCD_Init();LCD_WriteInit();while(1){QH_output11 = SerialInput_Get11();QH_output12 = SerialInput_Get12();QH_output13 = SerialInput_Get13();QH_output14 = SerialInput_Get14();QH_output21 = SerialInput_Get21();QH_output22 = SerialInput_Get22();QH_Total1 = QH_output11 + QH_output12 + QH_output13 + QH_output14;QH_Total2 = QH_output21 + QH_output22;//дÈëÏÔʾÊý¾ÝLCD_Write(0x8D);LCD_WriteData(((Total_num1- QH_Total1-1)/10)+0x30);LCD_Write(0x8E);LCD_WriteData(((Total_num1- QH_Total1-1)%10)+0x30);LCD_Write(0xCD);LCD_WriteData(((Total_num2- QH_Total2-1)/10)+0x30);LCD_Write(0xCE);LCD_WriteData(((Total_num2- QH_Total2-1)%10)+0x30);}
}

最终程序已上传到资源,地址https://download.csdn.net/download/weixin_42057864/12721521

Multisim教室空座信息查询系统仿真相关推荐

  1. WMI Series :管理对象的信息查询和方法访问

    管理对象的信息查询和方法访问   在这一节内容,我们将通过几个实例来学习如何查询管理对象信息和访问管理对象提供的方法,这一部分内容将使用到我们在前面讲述到的System.Management命名空间中 ...

  2. mysql8.0登录不上去怎么回事_速看!智慧团建系统登录平台及信息查询入口

    被逐步的边缘化.作为一款紧凑车型来说.115PS是发动机的最大马力.它也采用了全新的设计手法.在灯光衬托下显得光彩夺目.途胜l这款SUV的侧面车身与途胜的设计有些相似.起亚为这款车全系搭载1.5升的发 ...

  3. 企业工商信息查询API开发文档

    服务主要功能描述 企业工商信息查询增强版服务(翔云),实时联网权威数据源,通过企业(个体)名称.企业信用代码查询工商信息,当天注册信息,次日可查.返回的字段包含企业及个体营业执照照面信息.经营状态.曾 ...

  4. CPU信息查询与CPU测试方法总结

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请征得博主同意并附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/mainmaster/ar ...

  5. WML信息查询与后端信息发布系统实现-java -(报告+源码)

    1.1项目研究背景 在信息化时代的今天,如何方便快捷地进行信息的交互已经成为人们的热门话题.随着无线通讯技术以及手机终端的发展,随时随地进行信息的交互已经成为现实,WAP技术的出现犹如无线通讯的世界的 ...

  6. Django rest_framework 后端接口开发 开发与用户相关的一组接口 登录注册与用户信息查询修改

    Django rest_framework 后端接口开发 开发与用户相关的一组接口 Django DRF框架用起来还是有一些难度的,需要做的配置,需要导的包很多,所以需要多多练习才能掌握它的使用.此文 ...

  7. 航班信息查询和检索系统

    课程设计 哈夫曼编码/译码器 教室数据管理 电网建设造价计算 计算机竞赛管理系统 文章目录 一.设计任务及要求 二.设计导向 1. 设计目的 2. 总体设计方案 3. 详细设计 4. 系统测试与结果分 ...

  8. 课程设计:飞机航班信息查询系统

    题目名称 一.实验内容 [问题描述] 对飞机航班信息进行排序和查询.航班信息包括:航班号,起点,终点,航班日期(周一到周日,分别用1,2...7数字表示),起飞时间,到达时间,机型,票价. 以线性表作 ...

  9. 接入百度智能云的营业执照识别接口、工商信息查询(基础版)接口到实际业务,参考代码

    我的代码放在公共模块如下: 1.根据百度云官方文档-SDK中心,下载sdk对应jar包,我下载下来的版本是bce-java-sdk.0.10.254 2.使用mvn命令手动引入jar mvn inst ...

最新文章

  1. 牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!
  2. linux oracle 数据库导出
  3. 2021-05-10 linux中的find命令——查找文件名
  4. 什么是Java Marker Interface(标记接口)
  5. javascript获取asp.net后台代码的方法
  6. 响应式编程优点 有效_什么是响应式编程?
  7. 9 SD配置-企业结构-分配-给公司代码分配销售组织
  8. QT for android 比较完美解决 全屏问题
  9. 零基础学python书籍-非IT行业,零基础自学Python,选什么书?
  10. 标志位操作指令七条CLC,STC,CLD,STD,CLI,STI,CMC
  11. Visual Studio2013修改IDE集成开发环境视图风格
  12. 前端怎么通过后台来判断已读状态_微前端自检清单
  13. 微服务架构设计模式 pdf_分享一份美团T9大牛总结的神仙微服务架构设计模式PDF...
  14. windows10怎么卸载计算机,win10易升,详细教您如何彻底卸载删除win10易升
  15. vue.js 菜鸟学习
  16. MFC实现FTP服务器和FTP客户端
  17. 吊打天猫精灵等“本土”智能音箱,HomePod做得到吗?...
  18. Win11系统注销在哪?Win11系统注销的方法
  19. 使用FTPClient封装FtpUtil
  20. CPU也能加速AlphaFold2!英特尔最新发布:23倍通量优化指南!

热门文章

  1. L3-021 神坛 (30分)(图论)
  2. F - Construct Highway
  3. 问:如何在SBO报表设计器中对LastName+FirstName进行条件查询
  4. 音频转文本、图片翻译、字幕翻译
  5. Slope Trick
  6. 精华游戏算法整理_整理游戏
  7. TVS的典型应用(图文详解)
  8. 【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令
  9. Zephry传感器模型介绍和bme240测试
  10. 【Mycat】作为Mycat核心开发者,怎能不来一波Mycat系列文章?