实验配套软件: https://download.csdn.net/download/qq_39932172/11221584
实验指导用书:
- 教师版: https://download.csdn.net/download/qq_39932172/11221447
- 学生版:https://download.csdn.net/download/qq_39932172/11221449
8个实验Word文档:
- 3个学习性实验:
- 5个自主设计实验:
- 汽车信号灯控制系统:https://wenku.baidu.com/view/261e400c6aec0975f46527d3240c844769eaa0a7
- 电风扇控制器:https://wenku.baidu.com/view/e8402a18e43a580216fc700abb68a98271feaca6
- 洗衣机控制系统:https://wenku.baidu.com/view/9f9a6172162ded630b1c59eef8c75fbfc77d94a6
- 霓虹灯:https://wenku.baidu.com/view/c34214d6ff4733687e21af45b307e87101f6f8a6
- 电梯控制系统:https://wenku.baidu.com/view/a4432d4351e2524de518964bcf84b9d528ea2ca6
实验一: 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闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
实验过程和结果:
-
实验台接线
根据上面的实验原理图,具体的接线情况是:
Y4(IO地址)<–> CLK(D触发器)
Y5(IO地址)<–> CD(D触发器)
D(D触发器)<–> SD(D触发器)
Q(D触发器)<–> 逻辑笔 -
实验接线图及显示结果:
程序执行后的界面:
实验台接线及显示结果:
-
具体编程实现代码:
实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。
实验二: 可编程并行接口8255
实验目的:
掌握8255方式的工作原理及使用方法。
实验原理和内容:
- 实验电路原理图与流程图如下,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
- 编程从8255C口输入数据,再从A口输出。
实验过程和结果:
-
实验台接线
根据上面的实验原理图,具体的接线情况是:
PC0~PC7(8255)<–> K0~K7(逻辑电平开关)
PA0~PA7(8255) <–> L0~L7(LED显示)
CS(8255) <–> Y1(IO地址) -
具体编程实现代码:
-
实验接线图及显示结果:
程序执行后的界面:
实验台接线及显示结果:
实验三: 交通灯控制实验
实验目的:
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
实验原理和内容:
实验电路原理图与流程图如下,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。
实验过程和结果:
-
实验台接线
根据上面的实验原理图,具体的接线情况是:
PC0~PC7(8255)<–> L0~L7(LED显示)
CS(8255)<–> Y1(IO地址) -
实验接线图及显示结果:
程序执行后的界面:
实验台接线及显示结果:
-
具体编程实现代码:
编程提示: 十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
实验四: 汽车信号灯控制系统
1. 设计目的
汽车作为现代交通工具已大量进入人们的生活,随着电子技术的发展,对于汽车的控制电路,已经从过去的全人工开关控制发展到了智能控制。在夜晚或因天气原因能见度不高的时候,人们对汽车安全行驶要求很高,汽车尾灯控制系统给大家带来了方便。汽车尾灯控制器是随汽车智能化技术的发展而迅速发展起来的,汽车尾灯一般是用基于微处理器的硬件电路结构构成,本文主要是介绍汽车信号灯的控制,其中汽车信号灯包括了左前灯、右前灯、左后灯、右后灯、仪表盘上的左右转弯信号灯、故障信号灯。其主要内容是使汽车在行驶过程中通过信号灯来传达汽车诸如转弯、刹车、闭合紧急开关、停靠等一系列操作信号。信号灯控制的实现主要是通过电路与汇编程序的结合来完成,电路部分的设计是通过PIT++来完成的,其中灯的模拟采用了发光二极管,发光二极管有熄灭、点亮和闪烁三种信号,其中闪烁信号的产生分别运用了硬件和软件来实现,而汽车一系列的操作采用了相应的开关来模拟,所有的电路元件都是用PIT++软件上的虚拟元件来代替,这样方便了电路图的设计,而且大大提高了调试与仿真的效率。同时,展示了计算机技术在汽车行业的应用,也为人们的日常交通生活提供了便利与安全保障。
2. 设计要求
- 设计并制作汽车信号灯仪表盘控制系统,实现汽车左右转弯,紧急状态, 刹车,停靠瞬间的操作和信号灯指示功能,编译相应的汇编语言程序并进行系统调试。
- 仪表盘信号灯包括左右转弯灯,左右头灯和左右尾灯,驾驶员的操作动作由相应的开关状态完成,发光二极管用于信号指示。
3. 设计指导
驾驶员的操作动作与信号灯对应关系如下:
- 左右转弯,控制左右转弯开关,左右转弯灯,左右头灯和左右尾灯闪烁。
- 紧急状态,闭合紧急开关,所有信号灯以30hz的频率闪烁。
- 刹车,闭合刹车开关,左右尾灯点亮
- 左右转弯刹车,控制左右转弯开关同时闭合刹车开关,左右转弯灯,左右头灯,左右尾灯闪烁,然后点亮左右尾灯。
- 停靠瞬间,闭合停靠开关,头灯尾灯以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