SPI初始化程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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