📄 spidisp.s
字号:
;******************************************************************************
; 文件名:SPIDISP.S
; 功能:使用硬件SPI接口输出控制LED显示。(硬件:74HC595输出控制数码管D1显示)
; 说明:将跳线器JP3短接。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
SPI0_BASE EQU 0xE0020000
HC595_CS EQU (1<<29) ; P0.29口为74HC595的片选
AREA SPIDISPC,CODE,READONLY
MAIN LDR SP,=0x40003F00 ; 设置堆栈指针SP
LDR R0,=PINSEL0 ; 设置SPI0接口有效
MOV R1,#0x00005500
STR R1,[R0]
LDR R0,=IO0DIR ; 设置HC595片选控制口为输出
MOV R1,#HC595_CS
STR R1,[R0]
; 设置SPI接口
LDR R0,=SPI0_BASE
MOV R1,#0x52
STR R1,[R0,#0x0C] ; S0PCCR=0x52,设置SPI时钟
MOV R1,#0x30
STR R1,[R0] ; S0PCR=0x30,设置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
; 使用SPI进行数据发送(查表)
LDR R4,=DISP_TAB
MAIN_LOOP MOV R5,#0
MAIN_LOOP1 LDR R2,[R4,R5,LSL #2] ; 查表取得显示数据
LDR R0,=IO0CLR ; HC595_CS=0
MOV R1,#HC595_CS
STR R1,[R0]
BL MSEND_DAT ; 发送显示
LDR R0,=IO0SET ; HC595_CS=1
MOV R1,#HC595_CS
STR R1,[R0]
BL DELAYS ; 软件延时
ADD R5,R5,#1
CMP R5,#0x0F
BLS MAIN_LOOP1
B MAIN_LOOP
DISP_TAB DCD 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
DCD 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
;******************************************************************************
; 名称:MSEND_DAT
; 功能:通过SPI接口向74HC595发送一字节数据
; 入口参数:R2 待发送的数据,低8位有效
; 出口参数:R1 接收到的从机数据
; 占用资源:R0、R1、R2
;******************************************************************************
MSEND_DAT
LDR R0,=SPI0_BASE
LDR R1,[R0,#0x04] ; 读取S0PSR,清除各种标志位
STR R2,[R0,#0x08] ; 发送数据
MSEND_DTL1 LDR R1,[R0,#0x04]
ANDS R1,R1,#0x80
BEQ MSEND_DTL1
LDR R1,[R0,#0x08] ; 接收从机的数据
MOV PC,LR
;******************************************************************************
; 名称:DELAYS
; 功能:软件延时
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYS
MOV R7,#0x000FF000 ; 延时参数
DELAYS_L1 SUBS R7,R7,#1 ; R7=R7-1
BNE DELAYS_L1 ; 判断R7-1结果是否为0,若不为0则跳转
MOV PC,LR ; 返回
ALIGN ; 数据字对齐
LTORG ; 声明文字池
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -