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

📄 set.asm

📁 用1602和中断式键盘控制一个六层的界面
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***************************************************
;FILE:LED1
;NAME:带键盘的1602液晶显示器
;date:2007年3月1日
;function:  有一个简单的温度设置和密码设置的界面
;           通过按键可以输入温度和密码            
;***************************************************
      RS BIT P3.3          ;寄存器选择,1表示数据寄存器,0表示指令寄存器
      RW BIT P3.5          ;读写信号线,高电平为读,低电平为写,
                           ;RS RW同时为低表示写指令,RS低RW高则是读忙信号,反之写入数据
      E  BIT P3.4          ;液晶显示使能,高到低时执行命令
      key_bit bit 01h      ;键盘标志位
      lcd_jd  bit 02h      ;节电模式标志位
      gbbuf   equ 30h      ;光标寄存器
      symbol1  equ 31h     ;1为温度设置,2为密码设置,3为元素选择,4位供电选择,5为校零
      symbol2  equ 32h     ;用于上下移动标志,区分是光标移动决定功能还是设置密码、温度的加减 
      signal  equ 40h      ;用于表示第几个菜单
      codebuf1 equ 41h     ;密码的第一位数寄存器
      codebuf2 equ 42h     ;密码的第二位数寄存器
      codebuf3 equ 43h     ;密码的第三位数寄存器
      codebuf4 equ 44h     ;密码的第四位数寄存器
      tempbuf1 equ 45h     ;温度的第一位数寄存器
      tempbuf2 equ 46h     ;温度的第二位数寄存器
      keyboard bit P2.6
      lcd_bg bit P1.2      
      output equ P0   
      

      org 0000h
      ajmp init
      org 0003h
      ajmp ankey
      org 000bh     ;T0中断入口
      ajmp lowlight ;节电模式
init: mov sp,#80h
      clr lcd_bg
      clr gbbuf
      mov tempbuf1,#30h
      mov tempbuf2,#30h
      mov codebuf1,#30h
      mov codebuf2,#30h
      mov codebuf3,#30h
      mov codebuf4,#30h
      mov b,#01h      ;清屏
      lcall enable    ;每次操作都要保存
      mov b,#38h      ;功能选择
      lcall enable 
      mov b,#0eh      ;开显示幕
      lcall enable
      mov b,#06h      ;表示光标向右移,屏幕上文字不移动
      lcall enable 
      setb ea              ;中断开放
      setb ex0             ;允许INT0
      setb et0             ;允许T0中断
      setb tr0             ;开启T0计时器
      mov tmod,#01H        ;TO选用方式1,设置定时器
      mov tl0, #00h        ;50MS定时初值(T0用于节电)
      mov th0, #4Ch
      mov r4,#100              ;50ms*100=5s,表示三秒没有按键,则节电标志lcd_jd为1
welcome: mov b,#80h            ;设定第一行起始地址
         lcall enable
         mov dptr,#table1
         lcall display
         mov b,#0c0h
         lcall enable
         mov dptr,#table2
         lcall display
	 mov b,#0ch            ;把光标和显示关闭,防止初始化时按键导致死机
	 lcall enable
main: jnb key_bit,next
      clr key_bit
      ajmp key
next: jnb lcd_jd,next1          ;节电模式
      clr lcd_jd
      setb lcd_bg
next1:nop
      ajmp main
;---------------菜单功能2-----------------------
menu1:lcall busy
      mov b,#01h
      lcall enable
      mov b,#0eh
      lcall enable
      mov b,#81h        ;温度的设置
      lcall enable
      mov dptr,#table3
      lcall display
      mov b,#0c1h       ;密码的设置
      lcall enable 
      mov dptr,#table4
      lcall display 
      lcall gbnum
      ajmp main
menu2:lcall busy
      mov b,#01h
      lcall enable
      mov b,#0eh
      lcall enable
      mov b,#81h         ;选择元素
      lcall enable
      mov dptr,#table5
      lcall display
      mov b,#0c1h        ;选择电源
      lcall enable 
      mov dptr,#table6
      lcall display  
      lcall gbnum
      ajmp main
menu3:lcall busy
      mov b,#01h
      lcall enable
      mov b,#0eh
      lcall enable
      mov b,#81h         ;零点校正
      lcall enable
      mov dptr,#table7
      lcall display
      mov b,#0c1h        ;帮助菜单
      lcall enable 
      mov dptr,#table8
      lcall display
      lcall gbnum  
      ajmp main
gbnum:mov b,gbbuf
      lcall enable
      mov a,#7eh        ;表示-->
      lcall display3
      mov b,#0cfh
      lcall enable
      mov a,signal
      lcall display3
      mov symbol2,#1
      ret
;------------六个菜单的选择和相互间切换--------------------
reduc0:mov a,signal
       inc a
       cjne a,#37h,reduc4
       mov a,#31h
reduc4:mov signal,a
       lcall redplu
       ajmp main
plus0: mov a,signal
       dec a
       cjne a,#30h,plu4
       mov a,#36h
plu4:  mov signal,a
       lcall redplu
       ajmp main
redplu:cjne a,#31h,loopa1
       mov gbbuf,#80h
       ajmp menu1
loopa1:cjne a,#32h,loopa2
       mov gbbuf,#0c0h
       ajmp menu1
loopa2:cjne a,#33h,loopa3
       mov gbbuf,#80h
       ajmp menu2
loopa3:cjne a,#34h,loopa4
       mov gbbuf,#0c0h
       ajmp menu2
loopa4:cjne a,#35h,loopa5
       mov gbbuf,#80h
       ajmp menu3
loopa5:cjne a,#36h,loopa6
       mov gbbuf,#0c0h
       ajmp menu3
loopa6:ret
;----------根据光标位置判对温度哪一位加1----------------------
lop01: clr symbol1
       mov b,gbbuf
       mov a,b
       cjne a,#0c0h,lop11
       mov a,tempbuf1
       inc a  
       cjne a,#3ah,lop03    ;判断其是否为9的后一个符号,
       mov a,#30h           ;如果是,则让其清零(查字库得0为30h)
lop03: mov tempbuf1,a
       lcall display3
       lcall enable         ;为了确保光标的自动右移,而使其仍显示在原位
lop11: mov b,gbbuf
       mov a,b
       cjne a,#0c1h,lop21
       mov a,tempbuf2
       inc a
       cjne a,#3ah,lop13
       mov a,#30h
lop13: mov tempbuf2,a
       lcall display3
       lcall enable
       ret
;----------根据光标位置判对密码哪一位加1----------------------
lop21: clr symbol1
       mov b,gbbuf
       mov a,b
       cjne a,#0c5h,lop31      
       mov a,codebuf1
       inc a
       cjne a,#3ah,lop23
       mov a,#30h
lop23: mov codebuf1,a
       lcall display3
       lcall enable             
lop31: mov b,gbbuf
       mov a,b
       cjne a,#0c6h,lop41
       mov a,codebuf2
       inc a
       cjne a,#3ah,lop33
       mov a,#30h
lop33: mov codebuf2,a
       lcall display3
       lcall enable
lop41: mov b,gbbuf
       mov a,b
       cjne a,#0c7h,lop51
       mov a,codebuf3
       inc a
       cjne a,#3ah,lop43
       mov a,#30h
lop43: mov codebuf3,a
       lcall display3
       lcall enable
lop51: mov b,gbbuf
       mov a,b
       cjne a,#0c8h,lop61
       mov a,codebuf4
       inc a
       cjne a,#3ah,lop53
       mov a,#30h
lop53: mov codebuf4,a
       lcall display3
       lcall enable
lop61: ret
;---------根据光标位置判温度对哪一位减1----------------------
lop02: clr symbol1
       mov b,gbbuf
       mov a,b
       cjne a,#0c0h,lop12
       mov a,tempbuf1
       dec a
       cjne a,#2fh,lop04
       mov a,#39h
lop04: mov tempbuf1,a
       lcall display3
       lcall enable
lop12: cjne a,#0c1h,exit22
       mov a,tempbuf2
       dec a
       cjne a,#2fh,lop14
       mov a,#39h
lop14: mov tempbuf2,a
       lcall display3
       lcall enable
exit22:ret
;---------根据光标位置判密码对哪一位减1----------------------
lop22: clr symbol1
       mov b,gbbuf
       mov a,b
       cjne a,#0c5h,lop32      
       mov a,codebuf1
       dec a
       cjne a,#2fh,lop24
       mov a,#39h
lop24: mov codebuf1,a
       lcall display3
       lcall enable
lop32: cjne a,#0c6h,lop42
       mov a,codebuf2
       dec a
       cjne a,#2fh,lop34
       mov a,#39h
lop34: mov codebuf2,a
       lcall display3
       lcall enable
lop42: cjne a,#0c7h,lop52
       mov a,codebuf3
       dec a
       cjne a,#2fh,lop44
       mov a,#39h
lop44: mov codebuf3,a
       lcall display3
       lcall enable
lop52: cjne a,#0c8h,exit62
       mov a,codebuf4
       dec a
       cjne a,#2fh,lop54
       mov a,#39h
lop54: mov codebuf4,a
       lcall display3
       lcall enable
exit62: ret
;----------------通过左移选择元素-----------------------
elemen0:mov a,gbbuf
        cjne a,#8eh,elemen2
        mov b,#8ch
        mov gbbuf,b
        lcall enable
elemen2:cjne a,#8ch,elemen4
        mov b,#8ah
        mov gbbuf,b
        lcall enable
elemen4:cjne a,#8ah,elemen6
        mov b,#88h
        mov gbbuf,b
        lcall enable
elemen6:cjne a,#88h,elemen8
        mov b,#8eh
        mov gbbuf,b
        lcall enable
elemen8:ajmp main
;----------------通过右移选择元素-----------------------
elemen1:mov a,gbbuf
        cjne a,#88h,elemen3
        mov b,#8ah
        mov gbbuf,b
        lcall enable
elemen3:cjne a,#8ah,elemen5
        mov b,#8ch
        mov gbbuf,b
        lcall enable
elemen5:cjne a,#8ch,elemen7
        mov b,#8eh
        mov gbbuf,b
        lcall enable
elemen7:cjne a,#8eh,elemen9
        mov b,#88h
        mov gbbuf,b
        lcall enable
elemen9:ajmp main
;----------------通过左右移选择供电方式-------------------
power0:mov a,gbbuf
       cjne a,#86h,power1
       mov b,#8bh
       mov gbbuf,b
       lcall enable
       mov a,#7eh
       lcall display3
       mov b,#86h
       lcall enable

⌨️ 快捷键说明

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