📄 set.asm
字号:
;***************************************************
;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 + -