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

📄 set.asm

📁 用1602和中断式键盘控制一个六层的界面
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       mov a,#20h
       lcall display3
       mov b,#8bh
       lcall enable
power1:cjne a,#8bh,power2
       mov b,#86h
       mov gbbuf,b
       lcall enable
       mov a,#7eh
       lcall display3
        mov b,#8bh
       lcall enable
       mov a,#20h
       lcall display3
       mov b,#86h
       lcall enable
power2:ajmp main
;----------------按键处理1--------------------------------
plus:  mov output,#0ffh
       clr keyboard
       mov a,output
       setb keyboard
       jnb acc.0,plus
       mov a,symbol2
       cjne a,#1,plu1
       mov symbol2,#00
       ajmp plus0
plu1:  mov a,symbol1
       cjne a,#1,plu2          ;对温度进行加一
       lcall lop01
plu2:  cjne a,#2,plu3          ;对输入的密码加一
       lcall lop21
plu3:  ajmp main

reduce:mov output,#0ffh
       clr keyboard
       mov a,output
       setb keyboard
       jnb acc.2,reduce
       mov a,symbol2
       cjne a,#1,reduc1
       mov symbol2,#0
       ajmp reduc0
reduc1:mov a,symbol1
       cjne a,#1,reduc2          ;对温度进行减一
       lcall lop02
reduc2:cjne a,#2,reduc3            ;对输入的密码减一
       lcall lop22
reduc3:ajmp main 

menu: mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.4,menu
      mov signal,#31h             ;初始时显示1
      mov gbbuf,#80h           
      ajmp menu1
      ajmp main
;----------------按键判断---------------------------------
key:  mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.0,plus
      jnb acc.1,left
      jnb acc.2,reduce
      jnb acc.3,right
      jnb acc.4,menu
      jnb acc.5,enter
      ljmp main
;-----------------按键处理2--------------------------------
enter:mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.5,enter
      lcall ente0
      ajmp menu1

left: mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.1,left
      mov b,#0eh
      lcall enable
      mov a,symbol1
      cjne a,#3,lef0
      ajmp elemen0
lef0: cjne a,#4,lef1
      ajmp power0
lef1: mov a,gbbuf
      dec a
      mov gbbuf,a
      mov b,gbbuf
      lcall enable
      mov gbbuf,b
loop9:ajmp main
  
right:mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.3,right
      mov b,#0eh
      lcall enable
      mov a,symbol1
      cjne a,#3,righ0
      ajmp elemen1
righ0:cjne a,#4,righ1
      ajmp power0
righ1:mov a,gbbuf
      inc a
      mov gbbuf,a
      mov b,gbbuf
      lcall enable
      mov gbbuf,b
loop8:ajmp main
;-----------------确认功能键属性--------------------------
ente0:mov symbol1,#0
      mov a,signal
      cjne a,#31h,ente1
      mov signal,#30h
      lcall settemp
ente1:cjne a,#32h,ente2
      mov signal,#30h      ;伪,为了使下次按enter是不会一直跳在此界面
      lcall setcode
ente2:cjne a,#33h,ente3
      mov signal,#30h
      lcall chooseys
ente3:cjne a,#34h,ente4
      mov signal,#30h
      lcall choosedy
ente4:cjne a,#35h,ente5
      mov signal,#30h
      lcall ldjz
ente5:cjne a,#36h,ente6
      mov signal,#30h
      lcall help
ente6:mov gbbuf,#80h
      mov signal,#31h
      ret
;-----------------温度设置子程序--------------------------
settemp:lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;温度的设置
        lcall enable
        mov dptr,#table9
        lcall display
        mov b,#0c0h
	lcall enable
	mov a,tempbuf1
	lcall display3
	mov b,#0c1h
	lcall enable
	mov a,tempbuf2
	lcall display3
        mov b,#0c2h
	lcall enable
	mov a,#0dfh
	lcall display3
        mov b,#0c3h
	lcall enable
	mov a,#43h
	lcall display3
	mov b,#0c0h
	mov gbbuf,b
	lcall enable
	mov symbol1,#1
	mov symbol2,#0
        ajmp main
;-----------------密码设置子程序--------------------------
setcode:lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;密码的设置
        lcall enable
        mov dptr,#table10
        lcall display
	mov b,#0c5h
	lcall enable
	mov a,codebuf1
	lcall display3
        mov b,#0c6h
	lcall enable
	mov a,codebuf2
	lcall display3
        mov b,#0c7h
	lcall enable
	mov a,codebuf3
	lcall display3
	mov b,#0c8h
	lcall enable
	mov a,codebuf4
	lcall display3
	mov b,#0c5h
	mov gbbuf,b
	lcall enable
	mov symbol1,#2
	mov symbol2,#0
        ajmp main
;-----------------选择元素子程序--------------------------
chooseys:lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;温度的设置
        lcall enable
        mov dptr,#table11
        lcall display
	mov b,#88h
	mov gbbuf,b
	lcall enable
	mov symbol1,#3
        ajmp main
;-----------------选择电源--------------------------
choosedy:lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;温度的设置
        lcall enable
        mov dptr,#table12
        lcall display
	mov b,#86h
	mov gbbuf,b
	lcall enable
        mov a,#7eh
        lcall display3
        mov b,#86h
        lcall enable
        mov symbol1,#4
        ajmp main
;-----------------零点校正子程序--------------------------
ldjz:   lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;温度的设置
        lcall enable
        mov dptr,#table13
        lcall display
	mov b,#86h
	mov gbbuf,b
	lcall enable
        ajmp main
;-----------------帮助子程序--------------------------
help:   lcall busy
        mov b,#01h
        lcall enable
        mov b,#80h        ;温度的设置
        lcall enable
        mov dptr,#table14
        lcall display
        ajmp main
;-----------------busy or not-----------------------------
busy:  push acc           ;正常读写操作之前必须检测LCD控制器状态
       mov output,#0ffH
       clr rs             ;RS=0 RW=1 E=高电平
       setb rw
       setb e
wait:  nop                ;DB7: 0 LCD控制器空闲
       jb p0.7,wait        ;     1 LCD控制器忙
       clr e
       pop acc
       RET
;-----------------写入程序寄存器--------------------------
enable:clr rs         ;写指令到寄存器
      clr rw
      clr e          ;先禁止,在第二次进入的时候就有效了
      lcall delay
      mov output,b
      setb e
      clr e
      ret
;------------------写入数据寄存器,显示-------------------
display: mov r1,#00h   
loop1:   mov a,r1
        movc a,@a+dptr 
        clr rw       ;写数据到寄存器
        setb rs
	mov output,a
        setb e
	lcall delay
        clr e
        inc r1
        cjne a,#00h,loop1
        ret	  
;----------------显示-------------------------------------
display3:clr rw 
         setb rs 
	 mov output,a
	 setb e
	 lcall delay
	 clr e
	 ret
;----------------键盘中断---------------------------------
ankey:push acc
      push psw
      setb key_bit
      clr lcd_bg
      mov tl1,#00h    ;重载定时器初值
      mov th1,#4ch
      mov r4,#100
      pop psw
      pop acc
      reti
;----------------T0定时计数器-----------------------------
lowlight: push acc
          push psw
          mov tl1,#00h    ;重载定时器初值
          mov th1,#4ch
          djnz r4, exita
          mov r4,#100
          setb lcd_jd
exita:    pop psw
          pop acc
          reti
;----------------延时程序---------------------------------
delay:mov r7,#100          ;1ms延时
loop2:mov r6,#20
loop3:djnz r6,loop3
      djnz r7,loop2
      ret
table1:db 'welcome to use  ',00h
table2:db 'the system      ',00h
table3:db 'set temperature ',00h
table4:db 'set code        ',00h
table5:db 'choose element  ',00h
table6:db 'choose power    ',00h
table7:db 'check zero point',00h
table8:db 'help            ',00h
table9:db '  Temperature is',00h
table10:db 'input the code: ',00h
table11:db 'element:H;C;O;F;',00H
table12:db 'power: cell 9vAC',00H
table13:db 'zero: 0-0-0-0   ',00h
table14:db 'ask your friends',00h
end

⌨️ 快捷键说明

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