单片机学习小组
直播中

蒋美燕

7年用户 895经验值
私信 关注

如何使用Multisim威廉希尔官方网站 仿真软件进行教室空座查询仿真?

如何使用Multisim威廉希尔官方网站 仿真软件进行教室空座查询仿真?

回帖(1)

张雯雯

2022-2-15 10:34:13
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所示。
[tr]管脚号管脚功能[/tr]
P00-P02LCD显示屏E Rs Rw控制信号
P11-P1374HC165 控制信号
P20-P27LCD显示屏D0-D7
P30-P3574HC165 QH输入端
代码设计思路只要是轮询几个74HC165的输出信号并进行统计,实时显示到LCD屏幕中,LCD屏幕初始化显示教室信息及相应的关键字,在程序运行中只更新剩余座位数信息。同时***it没法作为形式参数进行传递,则74HC165的控制查询函数需要对每一个进行单独编程,不知道有没有好的解决办法,可以沟通。 /
1/*****************************************************************************Copyright:                            File name:                            main.cDescription:                          main function                                                                                                                                                            ***itÎÞ·¨×÷ΪÐÎʽ²ÎÊý½øÐвÎÊý´«µÝ ËùÒÔÿһ¸ö´®ÐÐоƬµÄ¶ÁÈ¡¶¼ÐèÒªÒ»¸öµ¥¶ÀµÄº¯Êý½øÐпØÖÆAuthor:                               WWVersion:                              1.0Date:                                 History:                              *****************************************************************************/#include #includetypedef enum        {                false=0,true=1        }BOOL;typedef unsigned char uint8;typedef unsigned int uint16;        ***it P10 = P1^0;***it P11 = P1^1;***it P12 = P1^2;***it P13 = P1^3;***it P20 = P2^0;***it P21 = P2^1;***it P22 = P2^2;***it P23 = P2^3;***it P24 = P2^4;***it P25 = P2^5;***it P26 = P2^6;***it P27 = P2^7;***it P00 = P0^0;***it P01 = P0^1;***it P02 = P0^2;***it P30 = P3^0;***it P31 = P3^1;***it P32 = P3^2;***it P33 = P3^3;***it P34 = P3^4;***it 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
举报

更多回帖

发帖
×
20
完善资料,
赚取积分