谁有适合28335的LED灯程序,最好是让从0~9输出的

[复制链接]
1603|10
 楼主| 恬蔚 发表于 2013-11-20 18:26 | 显示全部楼层 |阅读模式
不知道我的这个程序为啥不对,只能控制哪个灯亮,不可以输出数字
#include "DSP2833x_Device.h"  
#include "DSP2833x_Examples.h"

//宏定义//
#define LED1_ON   GpioDataRegs.GPBSET.bit.GPIO58=1;
#define LED1_OFF  GpioDataRegs.GPBCLEAR.bit.GPIO58=1;


//变量定义//
unsigned char msg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
Uint16 number=0;



//函数声明//
void Spi_Init_Led(void);
void Spi_Init(void);
void Spi_Init_FIFO(void);
void Spi_mixt(Uint16 ch);

void Spi_Init_Led(void)
{
        EALLOW;
        GpioCtrlRegs.GPBPUD.bit.GPIO58=0;
        GpioDataRegs.GPBSET.bit.GPIO58=1;
        GpioCtrlRegs.GPBMUX2.bit.GPIO58=0;
        GpioCtrlRegs.GPBDIR.bit.GPIO58=1;
       
        EDIS;
       
        LED1_OFF;
          
}


void Sellect_bit(Uint16 i)
{
        switch(i)
        {
                case 1:
                LED1_ON;
                break;
                default:
                break;
               
        }
}


void delay(Uint32 t)
{
        Uint32 i=0;
        for(i=0;i<t;i++)
        {}
}


void Spi_Init(void)
{
        SpiaRegs.SPICCR.all=0x004F;
        SpiaRegs.SPICTL.all=0x0006;
        SpiaRegs.SPIBRR=0x007F;
        SpiaRegs.SPICCR.all=0x00DF;
        SpiaRegs.SPIPRI.bit.FREE=1;
}


void Spi_Init_FIFO(void)
{
        SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;
       
}


void Spi_mixt(Uint16 ch)
{
        SpiaRegs.SPITXBUF=ch;
}


void main()
{
        InitSysCtrl();
        InitPieCtrl();
        InitPieVectTable();
        IER=0x0000;
        IFR=0x0000;
        DINT;
        Spi_Init_Led();
        Spi_Init();
        Spi_Init_FIFO();
       
        for(;;)
        {
                        Sellect_bit(1);
                        Spi_mixt(msg[number]);
                        delay(30000);
                        number++;
                        if(number>9)
                        number=0;
        }
       
}

zhangmangui 发表于 2013-11-20 21:39 | 显示全部楼层
通过SPI控制应该只是一位数码管吧   你说的只能控制哪个灯亮而不能输出0到9是变化的乱码吗
如果是就说明你的msg[10]里面存的数据有问题  看数据不是共阴极的数码管
还是别的现象  你在详细描述一下  最好将硬件电路附上
你的Sellect_bit()函数没明白想要干什么  只是为了LED1_ON吗
接下来咱们在讨论~
小营七郎 发表于 2013-11-20 21:50 | 显示全部楼层
这个程序是用SPI来显示数码管吗?
 楼主| 恬蔚 发表于 2013-11-21 14:57 | 显示全部楼层
zhangmangui 发表于 2013-11-20 21:39
通过SPI控制应该只是一位数码管吧   你说的只能控制哪个灯亮而不能输出0到9是变化的乱码吗
如果是就说明你 ...

这个是共阳极的LED,msg没错,sellect_bit函数是扫描那个位的数码管亮。不是有四个可以亮的吗   这个程序本来是四位亮的  从0000~9999的,后来我想其中一个亮   从0~9的  以前是利用SPI的FIFO来进行数字的输出的   现在只想输出一位   想知道是不是不能用FIFO了
 楼主| 恬蔚 发表于 2013-11-21 14:58 | 显示全部楼层
小营七郎 发表于 2013-11-20 21:50
这个程序是用SPI来显示数码管吗?

用SPI的FIFO来串行输出数字  
zhangmangui 发表于 2013-11-21 15:40 | 显示全部楼层
恬蔚 发表于 2013-11-21 14:57
这个是共阳极的LED,msg没错,sellect_bit函数是扫描那个位的数码管亮。不是有四个可以亮的吗   这个程序 ...

那就是四位一体的数码管   这种数码管是有公共端的   你找到公共端  只要那个公共端是高电平  
那个数码管就会亮   用IO口片选一下就可以啦  
用SPI肯定是可以的
 楼主| 恬蔚 发表于 2013-11-21 16:57 | 显示全部楼层
zhangmangui 发表于 2013-11-21 15:40
那就是四位一体的数码管   这种数码管是有公共端的   你找到公共端  只要那个公共端是高电平  
那个数码 ...

嘿嘿   你说的我还不太懂   可能是学的东西太少了   
小营七郎 发表于 2013-11-21 17:46 | 显示全部楼层
恬蔚 发表于 2013-11-21 14:58
用SPI的FIFO来串行输出数字

我学的也太少,听不懂。
想问下楼主
   void delay(Uint32 t)
{
        Uint32 i=0;
        for(i=0;i<t;i++)
        {}
}
这个延时函数delay(30000);是多长时间呀?
zhangmangui 发表于 2013-11-21 18:34 | 显示全部楼层
小营七郎 发表于 2013-11-21 17:46
我学的也太少,听不懂。
想问下楼主
   void delay(Uint32 t)

用SPI控制数码管 肯定是有串转并器件的  
SPI送出要显示的8位段码值  然后控制并行输出就可以啦
zhangmangui 发表于 2013-11-21 18:35 | 显示全部楼层
恬蔚 发表于 2013-11-21 16:57
嘿嘿   你说的我还不太懂   可能是学的东西太少了

你看看原理图  上面数码管处理a b c d e f g dp之外   还有一个COM
就是公共端  如果是共阳极的话 需要给高电平
 楼主| 恬蔚 发表于 2013-11-23 15:19 | 显示全部楼层
小营七郎 发表于 2013-11-21 17:46
我学的也太少,听不懂。
想问下楼主
   void delay(Uint32 t)

嘿嘿  这个我也不懂啊   求版主指导@zhangmangui  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

147

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部