实验原理
使用SPI协议,利用ARM控制数码显示管显示1到F,用串口检验发送的数据是否正确。
Proteus仿真电路图
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); } } [ i]
复制代码