微型计算机系统实验总结(学习性实验:IO地址译码,可编程并行接口8255,交通灯控制实验 + 自主设计实验:汽车信号灯控制系统,电风扇控制器,洗衣机控制系统,霓虹灯,电梯控制系统)

该博客总结了微型计算机系统的多个实验,包括IO地址译码、8255可编程并行接口的使用,以及交通灯、汽车信号灯、电风扇、洗衣机、霓虹灯和电梯控制等多个实际应用系统的实验。每个实验详细介绍了实验目的、原理、接线和编程实现,提供了实验资源链接和实验结果展示。
摘要由CSDN通过智能技术生成

实验配套软件: https://download.csdn.net/download/qq_39932172/11221584

实验指导用书:

8个实验Word文档:

实验一: IO地址译码


实验目的
       掌握I/O地址译码电路的工作原理。

实验原理和内容
在这里插入图片描述
       实验电路如原理图所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

例如:执行下面两条指令
         MOV  DX,2A0H
         OUT  DX,AL(或IN  AL,DX)
      Y4输出一个负脉冲,执行下面两条指令
         MOV  DX,2A8H
         OUT  DX,AL(或IN  AL,DX)
      Y5输出一个负脉冲。

       利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。

实验过程和结果

  1. 实验台接线
    根据上面的实验原理图,具体的接线情况是:
    Y4(IO地址)<–> CLK(D触发器)
    Y5(IO地址)<–> CD(D触发器)
    D(D触发器)<–> SD(D触发器)
    Q(D触发器)<–> 逻辑笔

  2. 实验接线图及显示结果
    程序执行后的界面:
    在这里插入图片描述
    实验台接线及显示结果:
    在这里插入图片描述

  3. 具体编程实现代码:
    实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。
    在这里插入图片描述


实验二: 可编程并行接口8255


实验目的
       掌握8255方式的工作原理及使用方法。

实验原理和内容

  1. 实验电路原理图与流程图如下,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
  2. 编程从8255C口输入数据,再从A口输出。
    在这里插入图片描述

实验过程和结果

  1. 实验台接线
    根据上面的实验原理图,具体的接线情况是:
    PC0~PC7(8255)<–> K0~K7(逻辑电平开关)
    PA0~PA7(8255) <–> L0~L7(LED显示)
    CS(8255) <–> Y1(IO地址)

  2. 具体编程实现代码:
    在这里插入图片描述

  3. 实验接线图及显示结果
    程序执行后的界面:
    在这里插入图片描述
    实验台接线及显示结果:
    在这里插入图片描述

实验三: 交通灯控制实验


实验目的
       通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

实验原理和内容:
       实验电路原理图与流程图如下,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。
在这里插入图片描述

实验过程和结果

  1. 实验台接线
    根据上面的实验原理图,具体的接线情况是:
    PC0~PC7(8255)<–> L0~L7(LED显示)
    CS(8255)<–> Y1(IO地址)

  2. 实验接线图及显示结果
    程序执行后的界面:
    在这里插入图片描述
    实验台接线及显示结果:
    在这里插入图片描述

  3. 具体编程实现代码:
    编程提示: 十字路口交通灯的变化规律要求:
    (1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。
    (2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
    (3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。
    (4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
    (5) 转(1)重复。
    在这里插入图片描述

实验四: 汽车信号灯控制系统


1. 设计目的

       汽车作为现代交通工具已大量进入人们的生活,随着电子技术的发展,对于汽车的控制电路,已经从过去的全人工开关控制发展到了智能控制。在夜晚或因天气原因能见度不高的时候,人们对汽车安全行驶要求很高,汽车尾灯控制系统给大家带来了方便。汽车尾灯控制器是随汽车智能化技术的发展而迅速发展起来的,汽车尾灯一般是用基于微处理器的硬件电路结构构成,本文主要是介绍汽车信号灯的控制,其中汽车信号灯包括了左前灯、右前灯、左后灯、右后灯、仪表盘上的左右转弯信号灯、故障信号灯。其主要内容是使汽车在行驶过程中通过信号灯来传达汽车诸如转弯、刹车、闭合紧急开关、停靠等一系列操作信号。信号灯控制的实现主要是通过电路与汇编程序的结合来完成,电路部分的设计是通过PIT++来完成的,其中灯的模拟采用了发光二极管,发光二极管有熄灭、点亮和闪烁三种信号,其中闪烁信号的产生分别运用了硬件和软件来实现,而汽车一系列的操作采用了相应的开关来模拟,所有的电路元件都是用PIT++软件上的虚拟元件来代替,这样方便了电路图的设计,而且大大提高了调试与仿真的效率。同时,展示了计算机技术在汽车行业的应用,也为人们的日常交通生活提供了便利与安全保障。

2. 设计要求

  • 设计并制作汽车信号灯仪表盘控制系统,实现汽车左右转弯,紧急状态, 刹车,停靠瞬间的操作和信号灯指示功能,编译相应的汇编语言程序并进行系统调试。
  • 仪表盘信号灯包括左右转弯灯,左右头灯和左右尾灯,驾驶员的操作动作由相应的开关状态完成,发光二极管用于信号指示。

3. 设计指导

驾驶员的操作动作与信号灯对应关系如下:

  1. 左右转弯,控制左右转弯开关,左右转弯灯,左右头灯和左右尾灯闪烁。
  2. 紧急状态,闭合紧急开关,所有信号灯以30hz的频率闪烁。
  3. 刹车,闭合刹车开关,左右尾灯点亮
  4. 左右转弯刹车,控制左右转弯开关同时闭合刹车开关,左右转弯灯,左右头灯,左右尾灯闪烁,然后点亮左右尾灯。
  5. 停靠瞬间,闭合停靠开关,头灯尾灯以30hz闪烁。

4. 设计原理
       系统主要以8255A模块为工作核心,八位逻辑电平输入和八位逻辑电平输出为辅助模块;并行接口8255A为通用接口芯片,有三个数据端口A、B、C,每个端口均八位,并可以设置输入输出方式,能够实现并行输入输出。工作状态下,系统通过并行接口8255A模块读入八位逻辑电平输出端数据,并由B口输出8255A模块寄存器中的数据,显示在八位逻辑电平显示端。系统可以通过预设五个变量,每个变量对应一种汽车尾灯状态。当系统工作时,在输出端输出数据即时与系统预设的变量一一比较,相等则跳转到相应的汽车尾灯状态

5. 实验程序代码

#include<stdio.h>
#include<conio.h>
#include "ApiExusb.h"
#include<iostream>
using namespace std;
#pragma comment(lib,"ApiExusb.lib")
void main()
{
   
	byte data;
	if (!Startup())
	{
   
		printf("ERROR: Open Device Error!\n");
		return;
	}
	printf("Press any key to exit!\n");
	int Go = 0;
	while(!kbhit())
	{
   
		PortWriteByte(0x28b,0x8b);
		PortReadByte(0x28a,&data);
		int temp = int(data);
		if(temp==1)Go=0;//左转
		if(temp==2)Go=1;//右转
		if(temp==4)Go=2;//紧急
		if(temp==8)Go=3;//刹车
		if(temp==16)Go=4;//左转刹车
		if(temp==32)Go=5;//右转刹车
		if(temp==64)Go=6;//停靠瞬间
		cout<<Go<<endl;
		if(Go==0){
   
			int tt = 0xe0;
			PortWriteByte(0x288,tt);
			Sleep(500);
			tt = 0x00;
			PortWriteByte(0x288,tt);
			Sleep(500);			
		}
		if(Go==1){
   
			int tt = 0x07;
			PortWriteByte(0x288,tt);
			Sleep(500);
			tt = 0x00;
			PortWriteByte(0x288,tt);
			Sleep(500);			
		}
		if(Go==2){
   
			int tt = 0xe7;
			PortWriteByte(0x288,tt);
			Sleep(500);
			tt = 0x00;
			PortWriteByte(0x288,tt);
			Sleep(500);			
		}
		if(Go==3){
   
			int tt = 0x84;
			PortWriteByte(0x288,tt);		
		}
		if(Go==4){
   
			
			for(int i=0;i<3;i++){
   
				int tt = 0xe0;
				PortWriteByte(0x288,tt);
				Sleep(500);
				tt = 0x00;
				PortWriteByte(0x288,tt);
				Sleep(500);		
			}
			int tt = 0x80
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lil Wing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值