main.c
来自「F2812实现电机控制源程序.rar」· C语言 代码 · 共 114 行
C
114 行
/*********************************************************************
** Module Name: Spi_LED **
** Author: Cbq **
** Version: 1.0 **
** CreateDate: 2008-05-15 **
** Description: **
** Remark: Huozq **
** Revision History: 2008-11-10 **
**********************************************************************/
/*********************************************************************
** 实验目的:通过学习本实验来掌握DSP的SPI工作原理 **
** 实验说明:QQ2812通过SPI接口控制LED数码管 **
** SPI是一高速同步的串行输入输出口,它的通信速率和通信数据 **
** 长度都是可编程的,可以接收和发送16位的数据位,并且带有双 **
** 缓冲的.SPI的4个外部引脚由:从输出主输入(SPISOMI),
** 从输入主输出(SPISIMO),从发送使能(/SPISTE),串行时钟 **
** 引脚(SPICLK)组成。 **
** 主要硬件部分:DSP,CPLD,74HC595(串入并出的移位器), **
** 共阳数码管。SPIMOSI和SPICLK直接从DSPJIE接到了74HC595的 **
** SER和SRCLK,作为数据和时钟信号的输入,SPICS由CPLD引出 **
** 来控制74HC595的选通。 **
** 实验结果:可看到数码管从0~F循环显示 **
**********************************************************************/
#include "DSP28_Device.h"
void WriteLED(unsigned char data); //送给数码管的数据函数
//void delay(unsigned long t);
unsigned int * SPI_CS = (unsigned int *) 0x4500; //0X4500是CPLD的SPICS地址
unsigned long int a;
Uint16 SpiCode[]={0x7E7E,0x2929,0x2c2c,0x6666,0xa4a4,0xa0a0,0x3e3e,0x2020,0x2424,0x2222,0xe0e0,0xb1b1,0x6868,0xa1a1,0xa3a3,0xffff,0xdfdf};
//数码管的笔画对应关系如下:
// 6
// 3 7
// 4
// 2 0
// 1 5
//就是说0~7分别对应笔画的a~h,在原理图看就是分别连接的Q0~Q7
//这个数码管的型号是LG3611BH,是共阳级的,也就是说某个笔画为0的时候,
//这个笔画被点亮。
//我们以 "1",0x7E7E为例说明
//7E的二进制是01111110,对应点亮的就是Q0和Q7,也就是'1'了。
//其他的自己拿笔画一下就清楚了。
void main(void)
{ int k;
/*初始化系统*/
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
/* 初始化PIE控制寄存器 */
InitPieCtrl();
/* 初始化PIE参数表 */
InitPieVectTable();
/* 初始化外设寄存器 */
InitPeripherals();
/*设置CPU*/
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
*SPI_CS=0x00; //写0,低电平选中
for(;;)
{
for(k=0;k<17;k++) //循环发送16个数据
{WriteLED(SpiCode[k]); //发送数据函数
for(a=0;a<500000;a++);
}
}
}
void WriteLED(unsigned char data)
{
if(Spi_TxReady() == 1) //当检测到SPI发送准备信号致1时,开始发送数据
SpiaRegs.SPITXBUF = data; //把数据写如SPI发送缓冲区
while( Spi_TxReady()!=1); //没检测到发送准备信号
*SPI_CS=0x01; //关片选
*SPI_CS=0x00; //退出时开片选
}
/*void delay(unsigned long t)
{
while(t>0)
t--;
}*/
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?