标题: 关于单片机驱动MAX7219程序 的程序问题 [打印本页]

作者: wishxia    时间: 2015-7-4 15:16
标题: 关于单片机驱动MAX7219程序 的程序问题
#include<reg51.h>
#include<intrins.h>
#define u8 unsigned char
#define u16 unsigned int

sbit DIN=P1^7;    //MAX7219  DIN串行数据输入端
sbit CLK=P1^6;    //MAX7219  CLK 时钟线
sbit LD=P1^5;     //MAX7219  LOAD片选端

sbit RET_813=P3^2;   //813        的6脚

void timer_ms(u8 tim)
{
  u8 i;
  while(tim--)
  {
    for(i=0;i<200;i++);   //延时1ms
  }
}

void w_max7219(u8 addr,u8 wdata)
{
   u8 j;
   u8 i;
   u8 temp;
   i=2;
  LD=0;
  while(i<16)
  {
    if(i<8)
        {
           temp=addr;  //先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值
        }
        else
        {
           temp=wdata;
        }
        for(j=0;j<8;j++)
        {
          CLK=0;
          if(temp&0x80)
          {
                    DIN=1;  //先发送数据的最高位
          }
          else
          {
                   DIN=0;
          }

          _nop_();
          CLK=1;
          _nop_();
          temp<<=1;
        }
        i=i+8;
  }
  LD=1;

}




void init_max7219()
{
  w_max7219(0x0c,0x01);  //操作方式,0x00为低功耗模式,0x01为正常操作模式
  w_max7219(0x0f,0x00);  //显示状态,0x00为正常显示,0x01为显示测试
  w_max7219(0x0b,0x07);  //8位扫描显示,取值范围0x01~0x07
  w_max7219(0x09,0x00);  //译码方式,0x00为不译码
  w_max7219(0x0a,0x07);  //显示亮度,取值范围0~f

  timer_ms(2);
}

void main()
{
    u16 m;
        init_max7219();
        while(1)
        {
        //  w_max7219(0X01,0X0F);
        //  w_max7219(0X02,0X0E);
         // w_max7219(0X03,0X0D);
         // w_max7219(0X04,0X0C);
         // w_max7219(0X05,0X10);
         // w_max7219(0X06,0X50);
         // w_max7219(0X07,0XA0);
          //w_max7219(0X08,0XF0);
            m++;
            if(m>15000)
            {
                 m=0;
               
                 RET_813=!RET_813;   //看门狗工作指示灯
            }
         }

}

这个程序是用MAX219控制LED发光二极管,现在出现问题,
只要main函数中注释掉的w_max7219(0X01,0X0F);  这种函数       如果不注释,看门狗的工作指示灯就不亮了,也就是程序死循环了
当注释后,再编译,看门狗正常闪烁,程序正常走,     所以请大侠帮忙看下这个7219程序是哪儿出问题了。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1