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

📄 leddisp.s

📁 周立功easyarm2200平台第三章试验源码
💻 S
字号:
;****************************************************************************** 
; 文件名:LEDDISP.S
; 功能:LED显示控制。通过I/O模拟同步串口与74HC595进行连接,控制74HC595驱动LED显示。
; 说明:将跳线器JP8短接。
;****************************************************************************** 
			INCLUDE		LPC2294.INC
			EXPORT  	MAIN	

; 定义SPI控制口
SPI_CS			EQU	    0x00000100		; P0.8
SPI_DATA		EQU	    0x00000040		; P0.6
SPI_CLK			EQU	    0x00000010		; P0.4

SPI_IOCON		EQU	    0x00000150		; SPI接口的I/O设置字
		

			AREA   	LEDDISPC,CODE,READONLY 
		    ENTRY
		    CODE32
		    
MAIN		LDR		SP,=0x40003F00		; 设置堆栈指针
		    LDR	    R0,=PINSEL0			; 设置所有管脚连接GPIO
		    MOV	    R1,#0x00000000		
		    STR	    R1,[R0],#4			; R1 -> [R0],R0 = R0+4			
		    STR	    R1,[R0]

		    LDR	    R0,=IO0DIR			; 设置SPI控制口为输出				
		    MOV	    R1,#SPI_IOCON		
		    STR	    R1,[R0]				
		
		    LDR	    R4,=DISP_TAB
MAIN_LOOP	MOV	    R5,#0
MAIN_LOOP1	LDR	    R7,[R4,R5,LSL #2]	; 查表取得显示数据
			MVN		R2,R7				; 取反数据
		    BL	    HC595_SENDDAT		; 发送显示
		    BL	    DELAYS			    ; 软件延时
			
		    ADD	    R5,R5,#1
		    CMP	    R5,#0x0F
		    BLS	    MAIN_LOOP1
		    B	    MAIN_LOOP

; 显示数据表
DISP_TAB	DCD  0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
		    DCD  0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81, 0x00
 


;******************************************************************************		
; 名称:HC595_SENDDAT
; 功能:向74HC595发送一字节数据
; 入口参数:R2		待发送的数据,低8位有效
; 出口参数:无
; 占用资源:(R0、R1、R2、R7)
;******************************************************************************
HC595_SENDDAT
		    STMFD	SP!,{R0-R12,LR}		; 寄存器入栈保护
		    LDR	    R0,=IO0CLR		    ; SPI_CS = 0
		    MOV	    R1,#SPI_CS
		    STR	    R1,[R0]
		
		    MOV	    R7,#8
HC595_SDL1	LDR	    R0,=IO0CLR		    ; SPI_CLK = 0
		    MOV	    R1,#SPI_CLK
		    STR	    R1,[R0]
		
		    ANDS	R1,R2,#0x00000080	; 判断要发送的数据位,并设置SPI_DAT
		    LDRNE	R0,=IO0SET
		    LDREQ	R0,=IO0CLR
		    MOV	    R1,#SPI_DATA
		    STR	    R1,[R0]
		    MOV	    R2,R2,LSL #1        ; 数据左移一位
		
		    LDR	    R0,=IO0SET		    ; SPI_CLK = 1
		    MOV	    R1,#SPI_CLK
		    STR	    R1,[R0]
		
		    SUBS	R7,R7,#1
		    BNE	    HC595_SDL1		    ; 若数据未发送完毕,再次发送
		
		    LDR	    R0,=IO0SET		    ; SPI_CS = 1,输出显示数据
		    MOV	    R1,#SPI_CS
		    STR	    R1,[R0]
		
		    LDMFD	SP!,{R0-R12,PC}		; 返回  
		    
		    
;******************************************************************************
; 名称:DELAYS
; 功能:软件延时
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYS	
			MOV		R7,#0x00005F00		; 延时参数
DELAYS_L1	SUBS	R7,R7,#1		    ; R7 = R7-1
			BNE		DELAYS_L1          	; 判断R7-1结果是否为0,若不为0则跳转
			MOV		PC,LR				; 返回		    
		    
		    LTORG						; 声明文字池	

			END

⌨️ 快捷键说明

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