1《嵌入式系统原理与应用》实验报告实验序号:05实验项目名称:SPI通信实验学号姓名ZRZ专业、班18计卓1班实验地点指导教师黄鹏程实验时间一、实验目的1.熟悉proteus仿真软件的使用。2.熟悉ADS1.2编译器的使用。二、实验设备(环境)及要求硬件:PC机;软件:PC机操作系统windowsXP,Proteus软件,ADS1.2三、实验内容与步骤实验内容:搭建好环境的基础上,实现SPI通信实验。实验要求如下:利用LPC2138的SPI接口,实现与外围芯片74HC595的通信。控制74HC595实现流水灯效果或者实现八段数码管的显示效果。可根据自己的能力自由发挥。实验步骤:1.在Proteus将实验所需的各个部件连接,确保连接正确无误。2.在ADS当中将相应的代码完成,保证编译通过无异常。3.在Proteus打开相应的hex文件进行仿真实验。2四、实验结果与数据处理(一)1.实验连接图图1实验原理图2.程序代码#includeconfig.h#defineHC595_nCS(10)#defineHC595_RCK(116)voiddelay(inttime){inti;for(;time0;time--)for(i=0;i3300;i++);}voidHC595_Init(void)3{PINSEL0=(PINSEL0&0xffff00ff)|0x00005500;PINSEL0=PINSEL0&0xfffffffc;PINSEL2=PINSEL2&0xfffffff7;IO0DIR=IO0DIR|HC595_nCS;IO1DIR=IO1DIR|HC595_RCK;IO0CLR=HC595_nCS;S0PCCR=0x64;S0PCR=0x30;}uint8HC595_SendData(uint8data){IO1CLR=HC595_RCK;S0PDR=data;while(0==(S0PSR&0x80));IO1SET=HC595_RCK;return(S0PDR);}intmain(void){inti;4HC595_Init();for(i=0;i256;i++){HC595_SendData(i);delay(1000);}return0;}3.实验说明在这个实验中,主要的难点在于如何使用74HC595对LED流水灯进行控制,首先我们要对74HC595进行初始化图274HC595初始化我们初始化完成之后,就可以通过控制不同的位来点亮不同位置的流水灯,这里对各个流水灯高低电平的控制我们可以用HC595_SendData()函数来完成。5图3HC595_SendData()4.实验效果图4实验效果图四、实验结果与数据处理(二)1.实验连接图图5实验原理图62.程序代码#includeconfig.h#defineHC595_nCS(10)#defineHC595_RCK(116)voiddelay(inttime){inti;for(;time0;time--)for(i=0;i3300;i++);}voidHC595_Init(void){PINSEL0=(PINSEL0&0xffff00ff)|0x00005500;PINSEL0=PINSEL0&0xfffffffc;PINSEL2=PINSEL2&0xfffffff7;IO0DIR=IO0DIR|HC595_nCS;IO1DIR=IO1DIR|HC595_RCK;IO0CLR=HC595_nCS;S0PCCR=0x64;S0PCR=0x30;}uint8HC595_SendData(uint8data)7{IO1CLR=HC595_RCK;S0PDR=data;while(0==(S0PSR&0x80));IO1SET=HC595_RCK;return(S0PDR);}voidnums(intx){switch(x){case0:HC595_SendData(0x3F);break;case1:HC595_SendData(0x06);break;case2:HC595_SendData(0x5B);break;case3:HC595_SendData(0x4F);break;case4:HC595_SendData(0x66);break;case5:HC595_SendData(0x6D);break;case6:HC595_SendData(0x7D);break;case7:HC595_SendData(0x07);break;case8:HC595_SendData(0x7F);break;case9:HC595_SendData(0x6F);break;}8}intmain(void){inti;HC595_Init();nums(1);delay(1000);nums(8);delay(1000);nums(1);delay(1000);nums(0);delay(1000);nums(7);delay(1000);nums(1);delay(1000);nums(6);delay(1000);nums(6);delay(1000);nums(4);9delay(1000);nums(3);delay(1000);for(i=0;i=9;i++){nums(i);delay(1000);}return0;}3.实验效果图6实验效果图10图7实验效果图五、分析与讨论在这一次实验中,我学会了使用74HC595来对流水灯和数码管进行控制,初步了解并且掌握了SPI串行通信,我知道了SPI是一个全双工的同步串行接口。在数据传输过程中,总线上只能是一个主机和一个从机进行通信,这些为之后的学习打下了基础。六、教师评语签名:日期:成绩