SPI通信——ARM的Proteus实验

实验原理

使用SPI协议,利用ARM控制数码显示管显示1到F,用串口检验发送的数据是否正确。

Proteus仿真电路图

proteus仿真ARM的SPI通信实验

C语言源程序

下面是主程序文件,串口部分的程序代码与“中断结合串口”相同,所以省略。

#include <LPC21XX.H>
#include "uart0.h"
#define HC595_CS 0x00000100/*P0.8口为74HC595的片选*/
typedef unsigned int uint32;
typedef unsigned char uint8;
char status[] = "Everytnig is fine.";
uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82, 0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint8 rcv_data;
void delay(void) {
unsigned volatile long i,j;
for(i=0;i<10000;i++)
for(j=0;j<30;j++)
;
}
void spiInit(void){
S0SPCCR=0x52; //设置SPI时钟分频
S0SPCR=0x30; //设置SPI接口模式
}
uint8 spiChar(uint8 data){
IO0CLR=HC595_CS; //片选
S0SPDR=data;
while(0==(S0SPSR&0x80)); //等待SPIF置位,即等待数据发送完毕
IO0SET=HC595_CS;
return(S0SPDR);
}
int main(void){
uint8 i;
PINSEL0 = 0x00005505;/*引脚开串口SPI、UART0*/
IO0DIR=HC595_CS;
spiInit();/*初始化SPI接口*/
uart0Init();
while(1){
for (i=0;i<16;i++) {
if(i<10){putchar(i+'0');}
else{putchar(i+7+'0');}
rcv_data=spiChar(DISP_TAB[i]);/*发送显示数据*/
delay();
}
serialPuts(status);
}
}
菜鸟的ARM学习笔记(第一阶段)
  1. LED闪烁——ARM的Proteus实验
  2. 开关控制LED——ARM的Proteus实验
  3. LCD——ARM的Proteus实验
  4. UART——ARM的Proteus实验
  5. Eint1外部中断——ARM的Proteus实验
  6. 多个外部中断——ARM的Proteus实验
  7. 中断结合串口——ARM的Proteus实验
  8. 定时器——ARM的Proteus实验
  9. SPI通信——ARM的Proteus实验
  10. SPI通信(多从设备)——ARM的Proteus实验
  11. ADC数模转换——ARM的Proteus实验

 

返回单片机目录, ARM目录, 返回首页