首页 > 其他分享 >○接口TPC-ZK交通灯综合系统

○接口TPC-ZK交通灯综合系统

时间:2024-06-07 17:03:37浏览次数:20  
标签:TPC ZK AL 交通灯 MOV SI POP DX PUSH

  主要参考了这篇微机原理-TPC-ZK板-交通灯模拟系统超详细(含硬件连线)_用到tpc-zk实验系统的微机实验-CSDN博客在此基础上增加了步进电机,8x8双色点阵

选用TPC-ZK-Ⅱ综合开放式微机原理及接口技术实验系统作为系统设计平台,运用8259、8254、8255、0832、直流电机、蜂鸣器、8x8双色点阵等元件实现预计功能.

设备与环境:

  1. 硬件设备:PC机一台,TPC-ZK-Ⅱ综合开放式微机原理及接口技术实验系统
  2. 软件环境:TPC-USB V1.0.7.25.exe

系统总电路图:

图 1 交通灯模块电路连线图

图 2车辆控制模块电路连线图

图 3实物连线图

图 4连线图

系统说明:

本系统主要分为两大模块 第一部分是交通灯,第二部分是车辆控制速度模块

十字路口交通灯(这部分内容可以直接看那篇博客,这里就不多赘述了)

利用8255端口C控制LED发光管。LED发光管L7(红)、L6(黄)、L5(绿)作为南北路口的交通灯与8255的PC7、PC6、PC5相连,L2(红)、L1(黄)、L0(绿)作为东西路口的交通灯与PC2、PC1、PC0相连。编程使6个灯按交通灯变化规律亮灭。十字路口交通灯的变化规律要求:

(1)南北路口的绿灯、东西路口的红灯同时亮30秒。

(2)南北路口的黄灯闪烁5秒,同时东西路口的红灯继续亮。

(3)南北路口的红灯、东西路口的绿灯同时亮30秒。

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁5秒

(5)转(1)重复。

。。。。。

。。。。。

。。。。。

智慧交通车辆控制部分

在基于交通灯部分添加直流电机,8x8双色点阵和电平输入开关,以实现当东边路口绿灯(L5)亮起时,电机启动,点阵显示“行”,当绿灯熄灭红灯亮起时电机启动,点阵显示“P”.

而K0-K5则可以控制直流电机的速度,K0速度最慢,K5速度最快

直流电机模块:

直流电机的转速是由0832的Ub输出脉冲的占空比例来决定的,正向占空比例越大,电机转速越快,反之越慢。

0832的输出Ub为双极性,当输入量小于80H时,输出为负,电机反转。等于80H时,输出为0,电机停止转动。大于80H时,输出为正,电机正转。而0832输出80H的持续时间是不变的,输出FFH的持续时间越长,电机转动时的速度就越快,持续长短用开关K0-K5来控制,共5个档,达到使电机加速、减速的目的。K0对应的速度最慢,K5对应的速度最快。

而0832的引脚图如图所示,各引脚功能

CS:片选使能,低电平芯片使能

CH0:模拟输入通道0,或作为IN+/-使用;

CH1:模拟输入通道1,或作为IN+/-使用;

GND:芯片参考零电位(地);

DI :数据信号输入,选择通道控制;

DO :数据信号输出,转换数据输出;

CLK:芯片时钟输入;

Vcc/REF:芯片电源

图 5 0832时序逻辑图

图 6 电机流程图

8x8双色点阵显示:

74HC273 8D触发器。内部包含8个D触发器,它们使用公共的时钟脉冲及异步清零信号,触发方式为边沿触发。

图 7 真值表

单片点阵LED:

图 8 LED显示原理

由于点阵LED显示器有8位行信号和8位列信号,故需要两片74HC273锁存器分别加以锁存,并需要占用两个地址空间。其地址分配如图4所示,当A1A0 = 00时,D7—DO为列信号,当AIA0 =01时为行信号。

工作时,可以让点阵LED显示器分8行逐行显示,也可以逐列显示。以前者为例,先向行地址输出数据80H,这时只有第一行为高电平,被选中,再向列地址输出相应的数据(注意因为点阵LED是共阳极,故列信号为低电平时对应的LED被点亮),就可以显示第一行。同样的,逐次向行地址输出40H , 20H ,…,01H ,选中相应的行,并显示各行信息,如此循环显示八个行,注意在显示两个行之间加入适当的延时(约1 ms),以确保LED被充分点亮,这样在视觉上就可以显示出完整的信息。

多片点阵:

图 9 双色点阵电路图 

为实现汉字的显示,希望有四片点阵LED显示器同时工作。在电路上不能简单地按照上一节的方案来实现,这是因为按上述方案,每片显示器要占用两个地址空间,四片就需要8个地址,而J7接线端子只能提供4个地址(两根地址线),显然地址线不够用。

为使四片显示器同时工作,必须重新分配地址,一种方案如图5所示。按照电路,当行2地址为00H 或10H 时,第(3 )、(4)片显示器没有行被选中,故它们都没有显示,这时行1(地址01H)可以用来选中(1 ).(2)片的同一行,地址0OH 和10H用来选择两列中的某一列(连D触发器的CLK 引脚),当列1、列2输入不同数据时,( 1 ).(2)片被选中的行可以显示各自的信息。

  1. .行列数据编码

想让点阵点亮最重要的是进行数据编码,对显示字符进行编码,高电平为1,低电平为0由于是动态刷新行显示,所以LED的每一行都要编码LED点阵的行是共阳极,所以选通行要给高电平,给其他行低电平。列是共阴极,给选通的列低电平,其他列高电平。

图 10 点阵编码

由于不同机器的影响,具体编码可能有所不同,需要根据点阵结果来实际编码。

        

图 11 实际点阵结果图

源码:(由于机器问题,不能实现电机速度控制,实际效果是当led灯变化后,电机就启动)

DATAS SEGMENT

MESS DB 'TPCA INTERRUPT3!',0DH,0AH,'$'

WARN DB 'WARNING!',0DH,0AH,'$'

TIPS DB '1-night:[n] 2-change light:[c], 3-exigency red light[e]',0DH,0AH,'$'

D8255A EQU 288H ;常量


D8255B EQU 289H

D8255C EQU 28AH

D8255S EQU 28BH

proth EQU 2a0h

protlr EQU 298h

protly EQU 290h

LIGHT DB 34H ; 0011 0100


DB 54h ; 0101 0100


DB 91H ; 1001 0001


DB 92H ; 1001 0010


DB 0FFH

NUM DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ; 9,8,7,6,5,4,3,2,1,0


TENS DB 5BH,06H,3FH ; 2,1,0


YELLOWNUM DB 5BH,06H,3FH ; 2,1,0


min1 DB 00h,01h,02h,03h,04h,05h,06h,07h

BUFF DB 50H,5FH,52H,10H,0c0H,3fH,90H,50H

MESS1 DB 00H,0F0H,90H,90H,90H,0ffH,00H,00H

DATA ENDS

STACKS SEGMENT

X DB 100 DUP(?)

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX ; 载入


MOV DX,OFFSET TIPS

MOV AH,09H

INT 21H

;; 设置8254


MOV DX,283h

MOV AL,36h ; 00110110 方式三,方波


OUT DX,AL

MOV AX,1000

MOV DX,280h

OUT DX,AL

MOV AL,AH

OUT DX,AL

MOV DX,283h

MOV AL,76h ; 01110110 方式三,方波


OUT DX,AL

MOV DX,281h

MOV AX,1000

OUT DX,AL

MOV AL,AH

OUT DX,AL

;; 初步设置8259

;; 设置8255


MOV DX,D8255S

MOV AL,80H

OUT DX,AL

MAINLP:

CALL MAIN

JMP MAINLP

EXIT:

MOV AH,4CH

INT 21H

MAIN PROC

MOV BX,0

MOV SI,0

LP1:

MOV DX,D8255C

MOV AL,LIGHT[BX]

CMP AL,0FFH

JZ EX1

OUT DX,AL

CMP AL,91H

JE SHOW_XING

; 其他情况显示"P"


; CALL SHOW_P


CALL DISPLAY_DOT_MATRIX ; 显示点阵字符


INC BX

TEST AL,21H

JZ S1

CALL GREEN

JMP LP1

S1:

CALL YELLOW ; 再次调用{黄色显示}


JMP LP1 ; 循环判断


EX1:

RET

MAIN ENDP

DISPLAY_DOT_MATRIX PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH SI

MOV CX,01H ;共存21组点阵代码,21帧图案


MOV BX,00H

WORDTIMES1:

MOV CX,40H

MOV SI,0

A1:

MOV AH,01H

PUSH CX

MOV CX,8 ; 8x8 点阵


MOV SI,0

NEXT1:

MOV AL,[MESS1+SI+BX] ; 分别得到第1组到第21组行代码首址


MOV DX,2a0H ; 行开始信号 CS1 接 280H


OUT DX,AL

MOV AL,AH ; 得到列代码


MOV DX,298H ; 列开始信号 CS2 接 288H

OUT DX,AL ; 显示行


MOV AL,0

OUT DX,AL

SHL AH,1 ; 滚屏左移一位


INC SI ; SI 加 1


CALL DELAY ; 显示一列后延时

LOOP NEXT1

POP CX

CALL DELAY ; 显示一行后延时


LOOP A1

MOV AL,0

MOV DX,298H

OUT DX,AL

ADD BX,8 ; BX 加 8,8 为每组点阵代码的大小


CALL DELAY

;LOOP WORDTIMES1


POP SI

POP DX

POP CX

POP BX

POP AX

RET

DISPLAY_DOT_MATRIX ENDP

SHOW_XING PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH SI

MOV CX,01H ;共存21组点阵代码,21帧图案


MOV BX,00H

WORDTIMES2:

MOV CX,40H

MOV SI,0

A11:

MOV AH,01H

PUSH CX

MOV CX,8 ; 8x8 点阵


MOV SI,0

NEXT2:

MOV AL,[MESS1+SI+BX] ; 分别得到第1组到第21组行代码首址


MOV DX,2a0H ; 行开始信号 CS1 接 280H


OUT DX,AL

MOV AL,AH ; 得到列代码

MOV DX,290H ; 列开始信号 CS2 接 288H


OUT DX,AL ; 显示行


MOV AL,0

OUT DX,AL

SHL AH,1 ; 滚屏左移一位

INC SI ; SI 加 1

CALL DELAY ; 显示一列后延时


LOOP NEXT2

POP CX

CALL DELAY ; 显示一行后延时


LOOP A11

MOV AL,0

MOV DX,290H

OUT DX,AL

ADD BX,8 ; BX 加 8,8 为每组点阵代码的大小


CALL DELAY

;LOOP WORDTIMES1


POP SI

POP DX

POP CX

POP BX

POP AX

RET

SHOW_XING ENDP

DELAY PROC NEAR ; 延时子程序


PUSH CX

MOV CX,0FFH

L: LOOP L

POP CX

RET

DELAY ENDP

 DCmotor proc
        push dx
        push ax
        
         
        
        MOV     DX,D8255S
        MOV     AL,82h       ; Modify to configure PORT B as input
        
        OUT     DX,AL            ;8255 PORT B INPUT
        
LLL:            MOV     AL,80h
        MOV     DX,proth
        OUT     DX,AL             ;D/A OUTPUT 0V
        
               
INTK:           MOV     DX,D8255B
        IN      AL,DX             ;READ SWITCH
        
      
        JMP     LLL
        pop ax
        pop dx
        

        
        ret
        Dcmotor endp


GREEN PROC ;; 绿色显示(和红色)


PUSH CX

PUSH BX

PUSH AX

PUSH DX

PUSH SI ; 保留现场,减少不必要的麻烦


MOV CX,3

MOV SI,0

REDBREAK:

CLI ; 设置红色计时中断


PUSH DS

MOV AX,SEG REDTIME

MOV DS,AX

MOV DX,OFFSET REDTIME

MOV AX,250BH

INT 21H

IN AL,21H

AND AL,0F7H ; 开启三号口


OUT 21H,AL

POP DS

STI

LP2:

MOV DI,0

PUSH CX

LP3:

; MOV CX,5 ; 红绿色延时时间


LP4:

MOV AL,22H ; 由于存在两位数码管,因此需要在两位数码管之间快速刷新


MOV DX,D8255A

OUT DX,AL

MOV AL,TENS[SI]

MOV DX,D8255B

OUT DX,AL

CALL DELAY_02S ; 调用延时函数


MOV AL,NUM[DI]

MOV DX,D8255B

OUT DX,AL

MOV AL,11H

MOV DX,D8255A ; 把0001 0001传递给A口


OUT DX,AL

CALL DELAY_02S


; LOOP LP4 ; 循环50次执行完50次才会改变数值

; JMP LP4


; INC DI


CMP DI,10

JNE LP3

INC SI

POP CX ; CX初始为3,即循环三次


LOOP LP2

POP SI

POP DX

POP AX

POP BX

POP CX ; 还原现场


RET

GREEN ENDP ; 退出数码管倒计显示

REDTIME PROC ; 红灯计时


STI

PUSH AX

INC DI

MOV AL,20H

OUT 20H,AL

POP AX

IRET

REDTIME ENDP

YELLOW PROC ; 黄灯闪烁情况下的计时与显示

PUSH SI

PUSH CX

PUSH BX

PUSH DX ; 保护现场


PUSH AX

CLI

PUSH DS

MOV AX,SEG YELLOTIME

MOV DS,AX

MOV DX,OFFSET YELLOTIME

MOV AX,250BH

INT 21H

IN AL,21H

AND AL,0F7H ; 开启三号口


OUT 21H,AL

POP DS

STI

MOV AL,11H

MOV DX,D8255A ; A口 0001 0001


OUT DX,AL

SHOW:

MOV AL,YELLOWNUM[SI] ; 2 2 1 1 0 0


MOV DX,D8255B

OUT DX,AL ; B口传递2,2,1,1,0,0


BACK:

MOV BX,0003H

CMP SI,BX

JNZ SHOW ; 此处循环三次 用loop比较混乱


POP DX

POP AX

POP BX

POP CX

POP SI

RET

YELLOW ENDP

YELLOTIME PROC ; 实现SI和BX加一


STI

PUSH DX

PUSH AX

INC SI ; 慎重


MOV AL,20H

OUT 20H,AL

POP AX

POP DX

iret

YELLOTIME ENDP

DELAY_02S PROC ; 循环 60*4000次,0.2大约


PUSH CX

PUSH SI

MOV CX,60

DD1: MOV SI,4000

DD2: DEC SI

JNZ DD2

LOOP DD1

POP SI

POP CX

RET

DELAY_02S ENDP

DELAY_05S PROC ; 循环4000*3000次大约0.5秒


PUSH CX

PUSH SI

MOV CX,4000

D1: MOV SI,4000

D2: DEC SI

JNZ D2

LOOP D1

POP SI

POP CX

RET

DELAY_05S ENDP

CODES ENDS

END START

标签:TPC,ZK,AL,交通灯,MOV,SI,POP,DX,PUSH
From: https://blog.csdn.net/jax2730/article/details/139531092

相关文章

  • HttpContext.Current 和 IHttpContextAccessor 的区别
    "HttpContext.Current"和"IHttpContextAccessor"是两个不同的方式,用来访问当前的HTTP上下文(即与HTTP请求相关的信息,如请求、响应、用户、会话等)。"HttpContext.Current"定义:"HttpContext.Current"是在ASP.NET(旧版.NETFramework)中用于访问当前HTTP上下文的静态属......
  • HttpContext探究之RequestServices
    HttpContext探究之RequestServices在一篇随笔中提到了中间件的构造方式,主要有两种,第一种是直接从容器里面获取,第二种是构造函数的参数从容器里面获取,这两者都离不开容器,也就是serviceprovide,而RequestService则是里面重要的内容RequestServices是什么HttpContext.RequestServi......
  • [转帖]测试TPCC性能
    下载TPCC标准测试工具BenchmarkSQL5.0。将目录lib/postgresql下面的*.jar替换为openGauss适配的jar包。$pwd/yourpath/benchmarksql-5.0/lib/postgres$lspostgresql.jar#openGaussjdbc驱动。postgresql-9.3-1102.jdbc41.jar.bak#自带jar备份。openGauss适......
  • C#使用HttpClient上传文件至阿里云oss失败的解决方案。
    ThebodyofyourPOSTrequestisnotwell-formedmultipart/form-data在使用C#的HttpClient上传文件到阿里云oss的时候,根据postman生成的代码,但是用C#发起请求的时候会返回400错误以及错误信息>ThebodyofyourPOSTrequestisnotwell-formedmultipart/form-data主要因......
  • [转帖]TPCH 22条SQL语句分析
    https://www.cnblogs.com/xibuhaohao/p/11413669.html 使用TPC-H进行性能测试,需要有很多工作配合才能获得较高性能,如建立索引,表数据的合理分布(使用表空间和聚簇技术)等。本文从查询优化技术的角度,对TPC-H的22条查询语句和主流数据库执行每条语句对应的查询执行计划进行分析,......
  • 4.HttpClient,微信小程序,SpringCache
    HttpClient,微信小程序,SpringCacheHttpClient:简介:HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议;导入:在maven项目中的pom.xml文件直接导入<dependency> <group......
  • FPGA交通灯进阶
    1.进阶要求➢十字路分为主干道Highway和乡村公路Farmroad;➢路口的检测器C,没有检测到Farmroad上有等候的车子,Highway上的交通灯(HL)保持为绿灯;➢C检测到Farmroad上有车后HL再保持一段时间(例如30秒)才通过黄灯(例如3秒)变为红灯,同时Farmroad上的交通灯(FL)从红灯变为绿灯;➢Farm......
  • 使用HttpClient发送请求
    导入依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>相关案例@TextpublicvoidtestGet()throwsException{//创建......
  • Jmeter - BeanSell 后置处理器 结合 HttpClient 使用
    背景:在后置处理器中发送POST请求,请求体为JSON数据疑问:1.如果获取Cookie?2.HttpClient怎么发送POST?3.HttpClient怎么添加Cookie?解决:1.如果获取Cookie?importorg.apache.jmeter.protocol.http.control.CookieManager;importorg.apache.jmeter.protocol.http.control.Coo......
  • 安装zk
    安装zk AddZooKeeperServer   添加好2个zk 这时候先别启动新增的两个zk   这里没有要重启zk   (停1个非leader的zk,保留2个旧zk)重启全部zk  while:;do echo-n "                 ";date;for......