⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianfengshan.asm

📁 该源代码为单片机的电风扇课程设计源代码
💻 ASM
字号:
data segment
  isend db 0
  n0 db 0
  n1 db 0
  n2 db 0
  isright db 1
  keykind db 0
  oldkey db 0
  kind db 0
  isstop db 0
  flags db 0
  numbers db 3fh,6,5bh,0,0,0,0,0,0,0
data ends
code segment
  assume cs:code,ds:data
main:;主程序
        cli
        mov ax,cs
        mov ds,ax
        mov kind,0
        mov isright,1
        mov keykind,0ah
        mov oldkey,0ah
        mov kind,0
        mov isstop,0
        mov flags,0
        mov isend,0
        mov n0,0
        mov n1,0
        mov n2,0
        call initnumbers
        call init8255
        call init8259
        call init8253
        call modifyint
        mov dx,212h
        mov al,0
        out dx,al
        call cleardevice
        call display
        mov al,0
        mov dx,22ah
        out dx,al
        mov al,30h
        out dx,al
        mov al,7fh
        sti
dowhat:
  push ax
dowait:
  mov al,0ffh;单色灯清零
  mov dx,211h
  out dx,al
  mov dx,210h
  in al,dx
  test al,1;判断开关
  jz dowait
  pop ax
  call readakey
  cmp keykind,0ah
  jnz a1
  mov kind,2
  call gotonext
  jmp aa
a1:;判断风速改变
  cmp keykind,0bh
  jnz a2
  mov kind,1
  call gotonext
  jmp aa
a2:
  cmp keykind,0ch
  jnz a3
  mov kind,0
  call gotonext
  jmp aa
a3:
  cmp keykind,0dh
  jnz a4
  push ax
  mov dx,212h
  mov al,0
  out dx,al
  pop ax
  mov isstop,0
  push ax
  mov al,oldkey
  mov keykind,al
  call reading
  mov dx,212h
  mov al,0ffh
  out dx,al
  pop ax
  sti
  jmp aa
a4:
  cmp keykind,0eh
  jnz aa
  not flags
  push ax
  mov al,oldkey
  mov keykind,al
  pop ax
aa:
  jmp dowhat
gotonext:;单色灯循环亮灭
  cmp isright,1
  jnz left
  mov dx,211h
  out dx,al
  cmp flags,0
  jnz noror
  ror al,1
noror:
  cmp al,0feh
  jnz continue
  mov isright,0
  jmp continue
left:
  mov dx,211h
  out dx,al
  cmp flags,0
  jnz norol
  rol al,1
norol:
  cmp al,7fh
  jnz continue
  mov isright,1
continue:
  cmp kind,2
  jnz mm1
  call speed2
  jmp mm3
mm1:;改变风速
  cmp kind,1
  jnz mm2
  call speed1
  jmp mm3
mm2:
  cmp kind,0
  jnz mm3
  call speed0
mm3:
  push ax
mm33:
  cmp isstop,0
  jz mm4
  mov dx,211h
  mov al,0ffh
  out dx,al
  mov dx,210h
  in al,dx
  test al,1
  jnz mm33
  mov isstop,0
  cli
mm4:
  pop ax
  ret
readakey:;读取键盘输入
  push ax
  mov al,keykind
  mov oldkey,al
  mov dx,22ah
  in al,dx
  and al,0fh
  cmp al,0
  jz gotoexit
  mov al,40h
  mov dx,22ah
  out dx,al
  mov dx,228h
  in al,dx
  mov keykind,al
gotoexit:
  pop ax
  ret
speed1:;速度设置
  push cx
  mov cx,18000
sp1:
  loop sp1
  pop cx
  ret
speed2:
  push cx
  mov cx,50000
sp2:
  loop sp2
  pop cx
  ret
speed0:
  push cx
  mov cx,8000
sp0:
  loop sp0
  pop cx
  ret
readisd:
key:
         mov dx,22ah
         in al,dx
         and al,0fh
         cmp al,0
         jz key
         mov al,40h
         out dx,al
         mov dx,228h
         in al,dx
         cmp al,0dh
         jnz key
         ret
reading:;输入时间
         push ax
         mov n0,0
         mov n1,0
         mov n2,0
         call readanumber
         mov n0,al
         call display
         call readanumber
         cmp al,0dh
         jz readexit
         mov ah,n0
         mov n0,al
         mov n1,ah
         call display
         call readanumber
         cmp al,0dh
         jz readexit
         mov ah,n0
         mov n0,al
         mov al,n1
         mov n1,ah
         mov n2,al
         call display
         call readisd
readexit:
         pop ax
         ret
readanumber:
key2:
  mov dx,22ah
  in al,dx
  and al,0fh
  cmp al,0
  jz key2
  mov al,40h
  out dx,al
  mov dx,228h
  in al,dx
  ret
initnumbers:
  push bx
  mov bx,offset numbers
  mov byte ptr[bx],3fh
  mov byte ptr[bx+1],6
  mov byte ptr[bx+2],5bh
  mov byte ptr[bx+3],4fh
  mov byte ptr[bx+4],66h
  mov byte ptr[bx+5],6dh
  mov byte ptr[bx+6],7dh
  mov byte ptr[bx+7],7
  mov byte ptr[bx+8],7fh
  mov byte ptr[bx+9],6fh
  pop bx
  ret
display:;时间显示
  call cleardevice
  mov bx,offset numbers
  mov al,80h
  mov dx,22ah
  out dx,al
  mov al,n0
  xor ah,ah
  add bx,ax
  mov al,[bx]
  mov dx,228h
  out dx,al
  mov bx,offset numbers
  mov al,81h
  mov dx,22ah
  out dx,al
  mov dx,228h
  mov al,n1
  xor ah,ah
  add bx,ax
  mov al,[bx]
  out dx,al
  mov bx,offset numbers
  mov al,82h
  mov dx,22ah
  out dx,al
  mov dx,228h
  mov al,n2
  xor ah,ah
  add bx,ax
  mov al,[bx]
  out dx,al
  ret
intcount:
  push ax
  push bx
  push dx
  cmp n0,0
  jz next1
  dec n0
  jmp next4
next1:
  mov n0,9
  cmp n1,0
  jz next2
  dec n1
  jmp next4
next2:
  mov n1,9
  cmp n2,0
  jz next3
  dec n2
  jmp next4
next3:
  mov n2,9
next4:
  cmp n0,0
  jnz next5
  cmp n1,0
  jnz next5
  cmp n2,0
  jnz next5
  mov isstop,1
  mov dx,212h
  mov al,0
  out dx,al
next5:
  call display
  pop dx
  pop bx
  pop ax
  iret
init8255:
  mov al,90h
  mov dx,213h
  out dx,al
  ret
init8259:
  mov al,13h
  mov dx,220h
  out dx,al
  mov dx,221h
  mov al,30h
  out dx,al
  mov al,3
  out dx,al
  mov al,0feh
  out dx,al
  ret
modifyint:
  push ds
  push bx
  push ax
  xor ax,ax
  mov ds,ax
  mov bx,30h*4
  mov ax,offset intcount
  mov [bx],ax
  mov ax,8100h
  mov [bx+2],ax
  pop ax
  pop bx
  pop ds
  ret
init8253:
  push ax
  mov al,35h
  mov dx,203h
  out dx,al
  mov ax,0ffffh
  mov dx,200h
  out dx,al
  mov al,ah
  out dx,al
  mov al,75h
  mov dx,203h
  out dx,al
  mov ax,27
  mov dx,201h
  out dx,al
  mov al,ah
  out dx,al
  pop ax
  ret
cleardevice:
  push ax
  push dx
  mov al,0c1h
  mov dx,22ah
  out dx,al
wait1:
  mov dx,22ah
  in al,dx
  test al,80h
  jnz wait1
  pop dx
  pop ax
  ret
code ends
   end main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -