📄 11.1.c
字号:
/**************************************************************
**功能描述: SPI程序,通过SPI操作8个LED数码管,显示数字1~8**
**************************************************************/
#include "DSP28_Device.h"
Uint16 table[10]={0xc000,0xf900,0xA400,0xB000,0x9900,0x9200,0x8200,
0xF800,0x8000,0x9000};
void spi_intial() // SPI初始化子程序
{
SpiaRegs.SPICCR.all =0x0047; // 使SPI处于复位模式, 下降沿, 8位数据
SpiaRegs.SPICTL.all =0x0006; // 主控模式,一般时钟模式,使能talk,关闭SPI中断
SpiaRegs.SPIBRR =0x007F; // 配置波特率
SpiaRegs.SPICCR.all =SpiaRegs.SPICCR.all|0x0080; // 退出复位状态
EALLOW;
GpioMuxRegs.GPFMUX.all=0x000F; // 设置通用引脚为SPI引脚
EDIS;
}
void gpio_init()
{
EALLOW;
GpioMuxRegs.GPAMUX.bit.TDIRA_GPIOA11=0; // GPIOA11设置为一般I/O端口
GpioMuxRegs.GPADIR.bit.GPIOA11=1; // 把GPIOA11设置为输出
EDIS;
GpioDataRegs.GPADAT.bit.GPIOA11=0; // GPIOA11端口为74HC595锁存信号
}
void main(void)
{
unsigned int k=0;
InitSysCtrl(); // 系统初始化子程序,该程序包含在DSP28_SysCtrl.C中
DINT; // 关闭总中断
IER = 0x0000;
IFR = 0x0000;
spi_intial(); // SPI初始化子程序
gpio_init(); // GPIO初始化子程序
while(1)
{
GpioDataRegs.GPADAT.bit.GPIOA11=0; // 给LACK信号一个低电平
for(k=0;k<8;k++)
{
SpiaRegs.SPITXBUF = table[k+1]; // 给数码管送数
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1){}
SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
}
GpioDataRegs.GPADAT.bit.GPIOA11=1; // 给LACK信号一个高电平为锁存HC595
for(k=0;k<10;k++){}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -