标题: 8086设计-可控时间间隔且可变换闪烁方式的流水灯仿真程序 [打印本页]

作者: zhixing_x    时间: 2023-11-5 23:10
标题: 8086设计-可控时间间隔且可变换闪烁方式的流水灯仿真程序
有关于一个8086的程序设计

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



  1. sseg segment                    ;2023年11月5日       编辑人;YX
  2.         dw 200 dup (?)
  3. sseg ends
  4. dseg segment
  5.         num      dw 0;初始化数字变量为0
  6. ;3种不同的灯光变幻组合
  7. data1 db 0FEh,0FCh,0F8h,0F0h,0E0h,0C0h,80h,00h,00h
  8. data2 db 00h,00h,0FFh,00h,0FFh,00h,0FFh,00h,80h,0C0h,0E0h,0F0h,0F8h,0FCh,0FEh,0FFh
  9. data3 db 7Eh,3Ch,18h,00h,0FFh,00h,0FFh,00h,0FFh,00h,18h,3Ch,7Eh,0FFh
  10. dseg ends
  11. cseg segment para public 'code'
  12.         assume ss:sseg,cs:cseg,ds:dseg
  13. start:
  14.                 mov ax,dseg
  15.                 mov ds,ax
  16.                 mov dx,0206h        ;取8255的控制端口的地址
  17.                 mov al,82h                ;初始化8255的A口为输出模式,B口为输入模式
  18.                 out dx,al
  19. exut:
  20.                 mov num,0h
  21.                 mov dx,0200h        ;取8255的端口A的地址
  22.                 mov aL,0FFh                ;使8255的 PAO-PA7全为1
  23.                 out dx,al                ;使所有的灯LED全灭
  24. begin:
  25.                 call ledflash        ;调用灯光变幻过程
  26.                 mov num,0
  27.                 ret
  28. ledflash proc                ;检测开关闭合,以便确定哪种闪烁方式
  29.                 mov dx,0202h        ;取8255的端口B的地址
  30.                 in        al,dx                ;检测B口输入信号
  31. choice1:
  32.                 cmp al,0f7h
  33.                 jne choice2
  34.                 mov si,offset data1                ;置第一种灯光变幻组合
  35.                 jmp set
  36. choice2:
  37.                 cmp al,0efh
  38.                 jne choice3
  39.                 mov si,offset data2                ;置第二种灯光变幻组合
  40.                 jmp set
  41. choice3:
  42.                 cmp al,0dfh
  43.                 jne speed1
  44.                 mov si,offset data3                ;置第三种灯光变幻组合
  45.                 jmp set
  46. speed1:                                                ;检测加速按键并设置cx的值
  47.                 cmp al,0fdh
  48.                 jne speed2        
  49.                 mov cx,000fh                        ;设置较小的cx
  50.                 jmp here
  51. speed2:                                                ;检测减速按键并设置cx的值
  52.                 cmp al,0fbh
  53.                 jne choice4               
  54.                 mov cx,05ffh                        ;设置较大的cx
  55.                 jmp here
  56. choice4:                        ;每盏灯亮完检测开关,如果停止开关没有按下跳到choice5,如果停止开关按下灯全灭
  57.                 cmp al,0bfh
  58.                 jne choice5
  59.                 jmp exit
  60. choice5:                        ;检测num是否为0,若为0扫描开关,若不为0继续执行
  61.                 cmp num,0h
  62.                 jne set
  63.                 jmp ledflash
  64. set:
  65.                 mov cx,005fh                        ;设置初始cx
  66.                 jmp here
  67. here:
  68.                 mov bx,num
  69.                 mov al,[si+bx]
  70.                 mov dx,0200h                ;取8255的端口A的地址
  71.                 out dx,al                        ;输出加电数据到端口A
  72.                 inc num                                ;改变数字变量的值
  73.                 cmp num,09h
  74.                 je exit
  75. dl4:        mov bx,00ffh
  76. dl3:         dec bx
  77.                 jnz dl3
  78.                 dec cx
  79.                 jnz dl4
  80.                 jmp ledflash
  81. exit:
  82.                 mov num,0
  83.                 ret
  84. ledflash endp
  85. cseg    ends
  86.                 end start
复制代码

仿真程序: 8086设计--可控时间间隔且可变换闪烁方式的流水灯.zip (135.8 KB, 下载次数: 10)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1