打印

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

[复制链接]
1216|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了

使用特权

评论回复
5
恬蔚|  楼主 | 2013-11-21 14:58 | 只看该作者
小营七郎 发表于 2013-11-20 21:50
这个程序是用SPI来显示数码管吗?

用SPI的FIFO来串行输出数字  

使用特权

评论回复
6
zhangmangui| | 2013-11-21 15:40 | 只看该作者
恬蔚 发表于 2013-11-21 14:57
这个是共阳极的LED,msg没错,sellect_bit函数是扫描那个位的数码管亮。不是有四个可以亮的吗   这个程序 ...

那就是四位一体的数码管   这种数码管是有公共端的   你找到公共端  只要那个公共端是高电平  
那个数码管就会亮   用IO口片选一下就可以啦  
用SPI肯定是可以的

使用特权

评论回复
7
恬蔚|  楼主 | 2013-11-21 16:57 | 只看该作者
zhangmangui 发表于 2013-11-21 15:40
那就是四位一体的数码管   这种数码管是有公共端的   你找到公共端  只要那个公共端是高电平  
那个数码 ...

嘿嘿   你说的我还不太懂   可能是学的东西太少了   

使用特权

评论回复
8
小营七郎| | 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);是多长时间呀?

使用特权

评论回复
9
zhangmangui| | 2013-11-21 18:34 | 只看该作者
小营七郎 发表于 2013-11-21 17:46
我学的也太少,听不懂。
想问下楼主
   void delay(Uint32 t)

用SPI控制数码管 肯定是有串转并器件的  
SPI送出要显示的8位段码值  然后控制并行输出就可以啦

使用特权

评论回复
10
zhangmangui| | 2013-11-21 18:35 | 只看该作者
恬蔚 发表于 2013-11-21 16:57
嘿嘿   你说的我还不太懂   可能是学的东西太少了

你看看原理图  上面数码管处理a b c d e f g dp之外   还有一个COM
就是公共端  如果是共阳极的话 需要给高电平

使用特权

评论回复
11
恬蔚|  楼主 | 2013-11-23 15:19 | 只看该作者
小营七郎 发表于 2013-11-21 17:46
我学的也太少,听不懂。
想问下楼主
   void delay(Uint32 t)

嘿嘿  这个我也不懂啊   求版主指导@zhangmangui  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

147

帖子

1

粉丝