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

📄 sssss.txt

📁 基于单片机的波形发生器,正弦波,方波.三角波
💻 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 + -