max7219显示问题

2019-03-24 19:05发布

我的电路板采用C8051f340,利用max7219驱动4位8段数码管,可是总是点不亮!
不知道是怎么回事,请高人指点。
附显示子程序:
sbit DIN_7219=P1^5;
sbit LOAD_7219=P1^6;
sbit CLK_7219=P1^7;
void init7219(void);
void write_7219(uchar addr,uchar dat);
void displayU(int data1);
void displayD(int data2);
void init7219(void)
{
    write_7219(0x0f, 0x00);   // display test or no, 0 for no test.
    write_7219(0x0b, 0x07);  // scan limit, 7 for using all 8 LED
    write_7219(0x0a, 0x0f);  // brightnes, 0--f    old :04
    write_7219(0x09, 0xff);  // decode mode,  B code
    write_7219(0x0c, 0x01);  // stop or work, 1 for normal work  status
}
void write_7219(char addr,char dat)
{
   char i, j;
   
    LOAD_7219=0;
    for(i=8; i>=1; i--){
        CLK_7219=0;
        if(addr & 0x80) DIN_7219=1; else DIN_7219=0;//&是按位与的意思!
        for(j=0;j<5;j++);
        addr = addr<<1;
        CLK_7219=1;
        for(j=0;j<5;j++);
    }
    for(i=8; i>=1; i--){
        CLK_7219=0;
        if(dat & 0x80) DIN_7219=1; else DIN_7219=0;
        dat = dat <<1;
        for(j=0;j<5;j++);
        CLK_7219=1;
        for(j=0;j<5;j++);
    }
    LOAD_7219=1;
    for(j=0;j<5;j++);
    CLK_7219=0;
}
void displayD(int data2)
{
     
         uchar Nstr2[5];

         /*if(data2 < 0){
                 Nstr2[3]=0x3A;
                data2 = 0 - data2;
         }
         else*/

           Nstr2[3]=(char)(data2/1000);
       
         Nstr2[2]=(char)((data2%1000)/100);
         Nstr2[1]=(char)(((data2%1000)%100)/10);
         Nstr2[0]=(char)(((data2%1000)%100)%10);

         write_7219(0x04, Nstr2[3]);
     write_7219(0x03, Nstr2[2]);   
         
         //write_7219(0x05,0x3A);                         //显示'-'号            //中间一段为G是D0控制
         write_7219(0x02, Nstr2[1]); //  + 0x80是为了显示小数点,小数点是D7最高位,要求赋值1.
         write_7219(0x01, Nstr2[0]);        
}
void displayU(int data1)
{
     
         uchar Nstr1[5];

         Nstr1[3]=(char)(data1/1000);
         Nstr1[2]=(char)((data1%1000)/100);
         Nstr1[1]=(char)(((data1%1000)%100)/10);
         Nstr1[0]=(char)(((data1%1000)%100)%10);

         write_7219(0x08, Nstr1[3]);
         write_7219(0x07, Nstr1[2]);   
         write_7219(0x06, Nstr1[1] + 0x80);          //显示小数点
         write_7219(0x05, Nstr1[0]);
}


我就在主程序while里面调用displayU程序,但是电路没什么反应。
请高人指点!! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。