proteus仿真msp430的点阵,但是点阵一直显示错误。。

2019-07-18 09:11发布

这是程序:

#include "include.h"
#include "sys.h"
#define DZ_DATA     P4OUT           //573位选信号的输入管脚
#define CLK_H       P6OUT|=BIT2     //595时钟信号的输入置高
#define CLK_L       P6OUT&=~BIT2    //595时钟信号的输入置低
#define ST_H        P6OUT|=BIT3     //595锁存信号置高
#define ST_L        P6OUT&=~BIT3    //595锁存信号置低
#define DATA_H      P6OUT|=BIT1     //595数据信号输入置高
#define DATA_L      P6OUT&=~BIT1    //595数据信号置低
#define LED_E0      P5OUT|=BIT7     //数码管 573使能置高
#define LED_E1      P5OUT&=~BIT6     //点阵 573使能置低
//点阵数据显示数组
uchar DZDataTab[80]={ 0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,  //0
                      0x00,0x00,0x01,0x21,0x7F,0x01,0x01,0x00,  //1
                      0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,  //2
                      0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00,  //3
                      0x00,0x00,0x0C,0x14,0x24,0x7F,0x04,0x00,  //4
                      0x00,0x00,0x72,0x51,0x51,0x51,0x4E,0x00,  //5
                      0x00,0x00,0x3E,0x49,0x49,0x49,0x26,0x00,  //6
                      0x00,0x00,0x40,0x40,0x40,0x4F,0x70,0x00,  //7
                      0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,  //8
                      0x00,0x00,0x32,0x49,0x49,0x49,0x3E,0x00}; //9
void Portinit();
void Lv595WriteData(uchar dat);
void main()
{
  uchar i=0,j=0,t=0;
  uchar wx;   //位选信号控制
  ClockInit();
  WDTInit();
  PortInit();
  
  while(1)
  {
    if(i==80)
      i=0;
    while(t!=100)   //在此可修改每个数字显示的持续时间
    {                        
      t++;
      wx=0x01;
      for(j=i;j<i+8;j++)
      {
        Lv595WriteData(DZDataTab[j]);
        DZ_DATA=wx;
        DelayMs(1);
        wx<<=1;
      }
    }
    t=0;
    i+=8;
  }
}
/*
****************************************************************************
*                         PortInit()
* 功能说明 ;IO初始化
*   参数   :无
* 返回值   :无
****************************************************************************
*/
void PortInit()
{
  P4SEL=0X00;
  P4DIR=0XFF;
  P6SEL=0X00;
  P6DIR=0XFF;
  P5SEL=0X00;
  P5DIR=0XFF;
  LED_E1;
  LED_E0;
    P1SEL=0X00;
  P1DIR=0XFF;
   P1OUT=0X01;
   
}
/*
****************************************************************************
*                         Lv595WriteData(uchar dat)
* 功能说明 ;向595发送一个字节的数据
*   参数   :dat:发送的数据(一个字节)
* 返回值   :无
****************************************************************************
*/
void Lv595WriteData(uchar dat)
{
  uchar i;
  CLK_H;
  DelayUs(1);
  ST_H;
  for(i=8;i>0;i--)    //循环八次,写一个字节
  {   
    if(dat&0x01)   //发送BIT0 位
      DATA_H;
    else
      DATA_L;
    CLK_L;
    DelayUs(1);
    CLK_H;    //时钟上升沿
    dat=dat>>1;           //要发送的数据右移,准备发送下一位
  }
  ST_L;
  DelayUs(1);
  ST_H;     //锁存数据
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。