十字路口交通灯的变化规律要求

  • 格式:doc
  • 大小:30.50 KB
  • 文档页数:7

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

十字路口交通灯的变化规律要求:

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

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

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

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。

(5)转(1)重复。

通过连接的七段数码管动态显示绿灯剩余时间

本次试验环境为 tcp-usb实验板,清华大学出的板子。

下面是我的实现的全部代码,附带注释。

代码遵循gpl协议,欢迎修改。

*************************************************************

;data: 20:13 2009-9-8

;author: muzi

;@zzu

.model small

.stack

.data

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码gewei word 8 ;存放要显示的个位和十位

shiwei word 8

counter byte 10

intoff word ? ;保存原中断服务程序的偏移地址

intseg word ? ;....................段基地址

.code

.startup

mov dx,28bh ;初始化 8255,设置a口,c 口输出

mov al,80h

out dx,al

;初始化 8253,输出1HZ 的方波,作为中断输入

mov al,00110110b ;初始化计数器0,工作方式3,计数初值为1000 mov dx,283h

out dx,al

mov ax,1000

mov dx,280h

out dx,al

mov al,ah

out dx,al

mov al,01110110b ;初始化计数器1,工作方式3,计数初值为1000 mov dx,283h

out dx,al

mov ax,1000

mov dx,281h

out dx,al

mov al,ah

out dx,al

;设置中断,中断号 0bh

mov ax,350bh ;设置系统0b号中断

int 21h

mov intoff, bx

mov intseg, es

cli

push ds

mov dx,offset new0bh

mov ax,seg new0bh

mov ds,ax

mov ax,250bh

int 21h

pop ds

in al,21h ;读取imr

and al,0f7h ;允许irq3,其他不变

out 21h,al ;设置imr

sti

go:

mov counter,30 ;南北绿灯倒计时秒数

call greenn ;南北绿灯,东西黄灯,30s

go2:

call xianshi

mov al,counter

add al,2

cmp al,1

jb go1

jmp go2

go1:

cli ; 关中断

call yellown ; 南北黄灯闪

sti ;开中断

mov counter,30

call greene

go3:

call xianshi

mov al,counter

add al,2

cmp al,1

jb go4

jmp go3

go4:

cli

call yellowe

sti

jmp go

.exit

delay0 proc ; 延时子程序,控制数码管显示时间(亮度)timer=2

push bx

push cx

mov bx,timer

delay1: xor cx,cx

delay2: loop delay2

dec bx

jnz delay1

pop cx

pop bx

ret

delay0 endp

closeled proc ;关闭数码管显示子程序 mov al,00000000b ;关闭数码管 pc0=0

mov dx,28bh

out dx,al

mov al,00000010b ;关闭数码管 pc1=0

mov dx,28bh

out dx,al

ret

closeled endp

new0bh proc

push bx

push ax

push cx

push si

push ds

mov ax,@data

mov ds,ax

mov bl,10

mov al,counter

mov ah,0

div bl

mov bx,ax

mov ah,0

mov shiwei,ax

mov bl,bh

mov bh,0

mov gewei,bx

dec counter

mov al,20h ;发送eoi命令

out 20h,al

pop ds

pop si

pop cx

pop ax

pop bx

iret

new0bh endp

xianshi proc

call closeled

mov ax,shiwei

mov si,offset led ;置led数码表偏移地址为

SI

add si,ax

mov al,byte ptr [si] ;求出对应的led数码

mov dx,288h ;自8255A的口输出

out dx,al

mov al,00000011b ;使相应的数码管亮,显示十位 pc1=1

mov dx,28bh

out dx,al