?? 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 + -