十字路口交通灯的变化规律要求
- 格式:doc
- 大小:30.50 KB
- 文档页数:7
十字路口交通灯的变化规律要求:
(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