📄 sssss.txt
字号:
软件部分是采用汇编语言的。汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但其依赖于具体的机型,不能通用,也不能在不同机型之间移植。部分程序及其注释说明如下:
; 1.2MHz 的晶振
;LCD 寄存器
LCD_CMD_WR equ 0
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3
;LCD指令
LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128
;初始化
org 0000h
jmp start
org 0100h
string1:db ' Welcome to use MSG! '
db 0
string2:db 'Design by Luolixiao! '
db 0
string3:db 'Press enter to start..'
db 0
string4:db 'Select the Wave: '
db 0
string5:db 'Sine Fangbo Sanjiao'
db 0
string5b:db ' Fangbo Sanjiao'
db 0
string5c:db 'Sine Sanjiao'
db 0
string5d:db 'Sine Fangbo '
db 0
string6:db 'Please select the Hz:'
db 0
……(频率、幅度部分定义略)
start: mov A,#038h
call wrcmd
loop: mov A,#LCD_SETVISIBLE+6 ;第一行显示Welcome to use MSG!
call wrcmd
mov DPTR,#string1
call wrstr
mov DPTR,#200
call wtms
loop1: mov A,#LCD_SETDDADDR+64 ; 第二行显示Design by Luolixiao!
call wrcmd
mov DPTR,#string2
call wrstr
mov DPTR,#500
call wtms
;ajmp $
mov A,#LCD_SETDDADDR+64 ; 第二行显示Press enter to start..
call wrcmd
mov DPTR,#string3
call wrstr
mov DPTR,#500
call wtms
jb P2.4,loop1
loop2: mov A,#LCD_CLS ;清屏
call wrcmd
mov A,#LCD_SETVISIBLE+6 ; 第一行显示Select the Wave:
call wrcmd
mov DPTR,#string4
call wrstr
mov DPTR,#200
call wtms
loop3: mov A,#LCD_SETDDADDR+64 ; 第二行显示Sine Fangbo Sanjiao
call wrcmd
mov DPTR,#string5
call wrstr
mov DPTR,#500
call wtms
;mov A,#LCD_CLS ; 清屏
;call wrcmd
mov A,#LCD_SETDDADDR+64 ; 第二行显示Sine
call wrcmd
mov DPTR,#string5b
call wrstr
mov DPTR,#500
call wtms
jnb P2.4,loop4 ;查询确定键有没有按下,有则跳到频率选择子程序
jnb P2.3,loop32 ;查询向下键有没有按下,有则跳到显示Fangbo
ajmp loop3
loop32: mov A,#LCD_SETDDADDR+64 ; 第一行显示Select the Wave:
call wrcmd
mov DPTR,#string5
call wrstr
mov DPTR,#500
call wtms
mov A,#LCD_SETDDADDR+64 ; 第二行显示Fangbo
call wrcmd
mov DPTR,#string5c
call wrstr
mov DPTR,#500
call wtms
jnb P2.4,loop4 ;查询确定键有没有按下,有则跳到频率选择子程序
jnb P2.3,loop33 ;查询向下键有没有按下,有则跳到显示Sanjiao
ajmp loop32
loop33: mov A,#LCD_SETDDADDR+64 ; 第一行显示Select the Wave:
call wrcmd
mov DPTR,#string5
call wrstr
mov DPTR,#500
call wtms
mov A,#LCD_SETDDADDR+64 ; 第二行显示Sanjiao
call wrcmd
mov DPTR,#string5d
call wrstr
mov DPTR,#500
call wtms
jnb P2.4,loop4 ;查询确定键有没有按下,有则跳到频率选择子程序
jb P2.3,loop31 ;查询向下键有没有按下,有则跳到显示Sin
ajmp loop33
loop4: mov A,#LCD_CLS ; 显示Clear screen
call wrcmd
mov A,#LCD_SETVISIBLE+6 ;Please select the Hz:
call wrcmd
mov DPTR,#string6
call wrstr
mov DPTR,#500
call wtms
……(频率、幅度选择部分原理相同,略!)
;显示子程序
wrstr: mov R0,#LCD_DATA_WR
mov R7,#21
wrstr1: djnz R7,wrstr12
ret
wrstr12: clr A
movc A,@A+DPTR
jz wrstr2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2: ret
;Sub routine to write command:
wrcmd: mov R0,#LCD_CMD_WR
movx @R0,A
jmp wtbusy
;Sub routine to write character:
wrchar: mov R0,#LCD_DATA_WR
movx @R0,A
;Subroutine to wait for busy clear
wtbusy: mov R1,#LCD_BUSY_RD
movx A,@r1
jb ACC.7,wtbusy
ret
;延时子程序
wtsec: push ACC
call wtms
pop ACC
dec A
jnz wtsec
ret
wtms: xrl DPL,#0FFh
xrl DPH,#0FFh
inc DPTR
wtms1: mov TL0,#09Ch
mov TH0,#0FFh
mov TMOD,#1
setb TCON.4
wtms2: jnb TCON.5,wtms2
clr TCON.4
clr TCON.5
inc DPTR
mov A,DPL
orl A,DPH
jnz wtms1
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -