|
实验要求:
利用8255并行接口控制的原理。
TPC-H实验向上有两个七段的LED数码显示管,要求用其做秒表显示(从00~59循环计数),每分钟误差不大于1秒。
利用8255的A口作LED数码显示的段驱动,C口输出作为位驱动(显示刷新频率不低于30次每秒)
TPC-H试验箱上的七段LED刷官位共阴极型,断码采用相同驱动,输入加高电平时被选中的数码管亮,为码采用相反驱动,输入高电平选中。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
电路图的是:
8255的PA0~PA6分别接在led的a~g,位码S0接PB0,位码S1接在PB1,CS接在地址口,剩下的还要接什么就不知道的了。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
写的代码有问题,麻烦看一下:
data segment
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码
buffer1 db 0,0 ;存放要显示的十位和个位
bz dw ? ;位码
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov dx,283h ;将8255设为A口输出
mov al,80h
out dx,al
mov di,offset buffer1 ;设di为显示缓冲区
loop1:mov cx,0300h ;循环次数
loop2:mov bh,02
lll: mov byte ptr bz,bh
push di
dec di
add di, bz
mov bl,[di] ;bl为要显示的数
pop di
mov bh,0
mov si,offset led ;置led数码表偏移地址为SI
add si,bx ;求出对应的led数码
mov al,byte ptr [si]
mov dx,280h ;自8255A的口输出
out dx,al
mov al,byte ptr bz ;使相应的数码管亮
mov dx,282h
out dx,al
push cx
mov cx,3000
delay:loop delay ;延时
pop cx
mov bh,byte ptr bz
shr bh,1
jnz lll
loop loop2 ;循环延时
mov ax,word ptr [di]
cmp ah,09
jnz set
cmp al,09
jnz set
mov ax,0000
mov [di],al
mov [di+1],ah
jmp loop1
set: mov ah,01
int 16h
jne exit ;有键按下则转exit
mov ax,word ptr [di]
inc al
aaa
mov [di],al ;al为十位
mov [di+1],ah ;ah中为个位
jmp loop1
exit:mov dx,282h
mov al,0 ;关掉数码管显示
out dx,al
mov ah,4ch ;返回DOS
int 21h
code ends
end start
剩下的不会弄。
请赐教。
|
|