Mr5Tao 发表于 2015-7-27 20:24

2812不能直接驱动595让数码管显示

新手自己编写了一段接收串口数据,然后把接收到的数据显示在数码管上的程序。程序不能直接直接驱动74HC595是数码管显示,必须要运行其他能正常让数码管显示的程序后再运行我编的程序,数码管才能正常显示。简单而言,就是需要别的数码管程序跑一遍,再跑我的程序才能正常运行,但是一单断开仿真器在连接的话有需要跑一次其他程序。求大神指点


程序如下:
#include "DSP28_Device.h"
unsigned int Sci_VarRx;
unsigned int i;            
unsigned int Send_Flag;   
int A,B,C,D,E,F,X,Z,temp;
void delay(unsigned int);
void ldelay(unsigned int);
void WriteLED(unsigned int);

void main(void)
{
    InitSysCtrl();
      DINT;
      IER = 0x0000;   
      IFR = 0x0000;   

      InitPieCtrl();
      InitPieVectTable();
      InitGpio();
      InitPeripherals();
    for(i = 0; i < 100; i++)
    {
            Sci_VarRx = 0;
    }
    i = 0;
    Send_Flag = 0;

      for(;;)
      {

                if((SciaTx_Ready() == 1) && (Send_Flag == 1))

                {

                        SciaRegs.SCITXBUF = Sci_VarRx;
                            X=Sci_VarRx;
                                 WriteLED(temp);
                              ldelay(10);
                        Send_Flag = 0;//清标志位
                        i++;
                        if(i == 100)
                        {
                              i = 0;

                        }

                }

      if(SciaRx_Ready() == 1)
                {
                        Sci_VarRx = SciaRegs.SCIRXBUF.all;
                        Send_Flag = 1;   
                }
         }
}

/*判断中间变量X的值,并在数码管上显示对应值*/
void WriteLED(unsigned int index)
{
         if(X==0){Z=0XF03F;}
      else if (X==1){Z=0XFE7F;}
      else if (X==2){Z=0XE93F;}
      else if (X==3){Z=0XEC3F;}
      else if (X==4){Z=0XE67F;}
      else if (X==5){Z=0XE4BF;}
      else if (X==6){Z=0XE0BF;}
      else if (X==7){Z=0XFE3F;}
      else if (X==8){Z=0XE03F;}   
      else if (X==9){Z=0XE43F;}
      else if (X==0xA){Z=0XE23F;}
      else if (X==0xB){Z=0XE0FF;}
      else if (X==0xC){Z=0XF1BF;}
      else if (X==0xD){Z=0XE87F;}
      else if (X==0xE){Z=0XE1BF;}
      else if (X==0xF){Z=0XE3BF;}      
      else{Z=0X3FC0;}
      if(Spi_TxReady() == 1)
      SpiaRegs.SPITXBUF = Z;
      delay(50000);
      GpioDataRegs.GPACLEAR.all|=0x8000;
      delay(1000);
      GpioDataRegs.GPASET.all|=0x8000;
}
void ldelay(unsigned int k)
{
    while(k>0)
    {
      k--;
      delay(50000);
      }
}      
void delay(unsigned int t)
{
      while(t>0)
                t--;
}

JY-DX-JY 发表于 2015-7-28 13:22

程序问题,好好检查检查。

海中水 发表于 2015-7-28 15:09

但看你现在的代码好像看不出来什么问题,在仔细看看。你说要运行别的数码管程序是什么意思呢?

Mr5Tao 发表于 2015-7-28 22:01

海中水 发表于 2015-7-28 15:09
但看你现在的代码好像看不出来什么问题,在仔细看看。你说要运行别的数码管程序是什么意思呢? ...

因为我是在开发板上运行的,我的程序必须要在开发板自带的数码管显示程序运行一次过后才能正常运行,好像是需要正确的程序先把74HC595驱动了才能运行我的程序,不知道到底是什么原因

Mr5Tao 发表于 2015-7-28 22:03

JY-DX-JY 发表于 2015-7-28 13:22
程序问题,好好检查检查。

我检查过的,也对照其他能正常运行的程序看过,没找到问题所在,所以求大神帮忙看看

海中水 发表于 2015-7-29 09:31

Mr5Tao 发表于 2015-7-28 22:01
因为我是在开发板上运行的,我的程序必须要在开发板自带的数码管显示程序运行一次过后才能正常运行,好像 ...

不应该啊!你驱动没有写吗?

Mr5Tao 发表于 2015-8-4 20:03

海中水 发表于 2015-7-29 09:31
不应该啊!你驱动没有写吗?

写了的,在某些时候是能正常运行的,但是一旦断掉仿真器,然后再连接的话又不行了,又需要运行一遍其他数码管程序才能正常运行

zhangmangui 发表于 2015-8-4 23:07

难道是2812的SCI有bug
曾经用SCI的时候经常遇到的问题是使用SCI的自动波特率侦测时
刚上电 第一次肯定是失败   复位一下就可以正常工作了

海中水 发表于 2015-8-5 08:42

Mr5Tao 发表于 2015-8-4 20:03
写了的,在某些时候是能正常运行的,但是一旦断掉仿真器,然后再连接的话又不行了,又需要运行一遍其他数 ...

仔细查看一下,如果别的程序没有问题。那么就是这个程序的问题了,耐心点,仔细查找一下。

Mr5Tao 发表于 2015-8-17 22:41

zhangmangui 发表于 2015-8-4 23:07
难道是2812的SCI有bug
曾经用SCI的时候经常遇到的问题是使用SCI的自动波特率侦测时
刚上电 第一次肯定 ...

这个倒不清楚,我的如果运行时复位的话再重新运行的话是可以的,只要不断开仿真器就行

Mr5Tao 发表于 2015-8-17 22:45

海中水 发表于 2015-8-5 08:42
仔细查看一下,如果别的程序没有问题。那么就是这个程序的问题了,耐心点,仔细查找一下。 ...

最近一直在做板子,没时间搞程序了,我估计问题是在初始化或者与仿真器的连接上

zhangmangui 发表于 2015-8-18 08:21

肯定不是驱动数码管芯片的问题程序重新下载启动 肯定与上一个代码没关系建议你看看复位电路有问题没建议你程序除了驱动数码管外在加其他功能 上点后看看其他功能正常没 确定一下代码引导运行起来了没

海中水 发表于 2015-8-18 10:12

Mr5Tao 发表于 2015-8-17 22:45
最近一直在做板子,没时间搞程序了,我估计问题是在初始化或者与仿真器的连接上 ...

抽空还是要看一下。

Mr5Tao 发表于 2015-10-11 13:56

zhangmangui 发表于 2015-8-18 08:21
肯定不是驱动数码管芯片的问题程序重新下载启动 肯定与上一个代码没关系建议你看看复位电路有问题没   ...

前段时间忙着其他事了,这两天检查程序发现是SpiaRegs.SPITXBUF = Z;这个语句出了问题,不能对SpiaRegs.SPITXBUF些数据,不知为何。

Mr5Tao 发表于 2015-10-11 13:56

海中水 发表于 2015-8-18 10:12
抽空还是要看一下。

前段时间忙着其他事了,这两天检查程序发现是SpiaRegs.SPITXBUF = Z;这个语句出了问题,不能对SpiaRegs.SPITXBUF些数据,不知为何。

Mr5Tao 发表于 2015-10-11 13:57

JY-DX-JY 发表于 2015-7-28 13:22
程序问题,好好检查检查。

前段时间忙着其他事了,这两天检查程序发现是SpiaRegs.SPITXBUF = Z;这个语句出了问题,不能对SpiaRegs.SPITXBUF些数据,不知为何。

Mr5Tao 发表于 2015-10-14 22:14

问题已解决。

Mr5Tao 发表于 2016-9-5 18:33

原因是SPI时钟没有使能,使能了就可以了
页: [1]
查看完整版本: 2812不能直接驱动595让数码管显示