⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplespiout.c

📁 《dsPIC通用数字信号控制器原理及应用》源码
💻 C
字号:
/**********************************************
** 文件名  :SimpleSPIOut.c                  **
** 功能描述: 8个LED数码管分别显示1到8八个数字**
**********************************************/

#include "p30f6014.h" //ds30f6014头文件

const char Table1[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; // 不带小数点的显示段码表,依顺序为0-F共16个 */

const char Lengths = 8;

//系统初始化子程序,放在程序首部
void InitializeSys()
{
    SRbits.IPL = 7;         //关闭所有可屏蔽中断				
}

//SPI输出初始化子程序
void InitializeSPIOut()
{
    TRISF = TRISF&0xfebf;   //RF6、RF8输出
    TRISG = TRISG&0xfdff;   //RG9输出
    SPI1CON = 0x0379;       // 字节通讯模式,CKP=1,CKE=1,FOSC/32,时钟上升沿发送数据
    SPI1STATbits.SPIEN = 1; //SPI1EN=1
    IFS0bits.SPI1IF = 0;    // 清除SPI1IF标志 
}

//在八个数码管上显示Lens长度的数据
void DisplayOnLED(char Lens, char* DataPtr)
{
    int i = 0;
    for(i=0; i<Lens; i++)
    {
        DataPtr[i] = Table1[DataPtr[i]];
    }
    PORTGbits.RG9 = 0;                 //RG9送低电平,给SPIOut输出锁存做准备
    for(i=0; i<Lens; i++)              //显示所要求的内容
    {
        SPI1BUF = DataPtr[i];
        while(SPI1STATbits.SPITBF == 1);
    }
    for(i=Lens; i<8; i++)              //熄灭多余的数码管
    {
        SPI1BUF = 0xff;
        while(SPI1STATbits.SPITBF == 1);
    }    
    SPI1BUF = 0xff;
    while(SPI1STATbits.SPITBF == 1);
    PORTGbits.RG9 = 1;                 //给锁存信号,显示数据
}

main()					
{
    char Data[Lengths],i;
    for(i=0; i<Lengths; i++)           //初始化化显示数据
    {
        Data[i] = 8-i;
    }
    InitializeSys();  
    InitializeSPIOut();
    DisplayOnLED(Lengths,&Data[0]); 
    while(1)
    {
        ;                              // 用户可编写其他程序 
    }
}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -