SPI初始化程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//SPI初始化子程序,用于数码管显示

void spi_intial()

{

SpiaRegs.SPICCR.all =0x0047; // 使SPI处于复位方式, 下降沿, 八位数据SpiaRegs.SPICTL.all =0x0006; //主控模式,般时钟模式,使能talk,闭SPI中断SpiaRegs.SPIBRR =0x007F; //配置波特率

SpiaRegs.SPICCR.all =SpiaRegs.SPICCR.all|0x0080; // 退出复位状态EALLOW;

GpioMuxRegs.GPFMUX.all=0x000F;// 设置通用引脚为SPI引脚

EDIS;

}

//IO初始化子程序

void gpio_init()

{

EALLOW;

GpioMuxRegs.GPAMUX.bit.TDIRA_GPIOA11=0; //GPIOA11设置为一般I/O口GpioMuxRegs.GPADIR.bit.GPIOA11=1; //把GPIOA11设置为输出

//将GPIOE0~GPIOE2配置为一般I/O口输出,作138译码

GpioMuxRegs.GPEMUX.all = GpioMuxRegs.GPEMUX.all&0xfff8; GpioMuxRegs.GPEDIR.all = GpioMuxRegs.GPEDIR.all|0x0007;

//将GPIOB8~GPIOB15配置为一般I/O口,D0~D7

GpioMuxRegs.GPBMUX.all = GpioMuxRegs.GPBMUX.all&0x00ff;

EDIS;

GpioDataRegs.GPADAT.bit.GPIOA11=0; //GPIOA11=0;该端口为74HC595锁存信号}

//键扫描子程序K1~K8

int Keyscan1(void)

{

EALLOW;

//将GPIOB8~GPIOB15配置为输入,D0~D7

GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all&0x00ff;

EDIS;

GpioDataRegs.GPEDAT.all = 0xfff8; //选通KEY低8位

for (i=0; i<100; i++){} //延时

//判K1~K8是否按下

if ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

for (i=0; i<30000; i++){} //延时消抖

if ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

KeyReg1=GpioDataRegs.GPBDAT.all ; //读键值

while ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff) //判K1~K8是否松开{

GpioDataRegs.GPDDAT.bit.GPIOD1 = !GpioDataRegs.GPDDAT.bit.GPIOD1;

for (i=0; i<1000; i++){}

}

return (1);

}

}

return (0);

}

//键扫描子程序K9~K16

int Keyscan2(void)

{

EALLOW;

//将GPIOB8~GPIOB15配置为输入,D0~D7

GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all&0x00ff;

EDIS;

GpioDataRegs.GPEDAT.all = 0xfff9; //选通KEY高8位

for (i=0; i<100; i++){} //延时

//判K8~K16是否按下

if ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

for (i=0; i<30000; i++){} //延时消抖

if ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

KeyReg2=GpioDataRegs.GPBDAT.all ; //读键值

while ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff) //判K8~K16是否松开{

GpioDataRegs.GPDDAT.bit.GPIOD1 = !GpioDataRegs.GPDDAT.bit.GPIOD1; for (i=0; i<1000; i++){}

}

return (1);

}

}

return (0);

}

//按键记录次数,显示在16个LED上

void LedOut(Uint16 led)

{

EALLOW;

//将GPIOB8~GPIOB15配置为输出,D0~D7

GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all|0xff00;

EDIS;

GpioDataRegs.GPEDAT.all = 0xfffb; //LEDB选通GpioDataRegs.GPBDAT.all = ~led; //显示高8位

for (i=0; i<100; i++){} //延时

GpioDataRegs.GPEDAT.all = 0xffff; //锁存高8位GpioDataRegs.GPEDAT.all = 0xfffa; //LEDA选通GpioDataRegs.GPBDAT.all = ~(led<<8); //显示低8位for (i=0; i<100; i++){}

GpioDataRegs.GPEDAT.all = 0xffff; //锁存低8位

}

//键散转子程序K1~K8

void KeyFunction1(unsigned int KeyReg1)

{

switch(KeyReg1)

{

case K1: {

LEDReg= 0x00; //键号0

}

break;

case K2: {

LEDReg= 0x01; //键号1

}

break;

case K3: {

LEDReg= 0x02; //键号2

}

break;

case K4: {

LEDReg= 0x03; //键号3

}

break;

case K5: {

LEDReg= 0x04; //键号4

}

break;

case K6: {

LEDReg= 0x05; //键号5

}

break;

case K7: {

LEDReg= 0x06; //键号6

}

break;

case K8: {

LEDReg= 0x07; //键号7

相关文档
最新文档