找了一个74hc595控制两位数码管,发现延时有问题 改却改不好 拿出来请大家帮我改正

2019-07-15 13:56发布

找了一个74hc595控制两位数码管,发现延时有问题 改却改不好 拿出来请大家帮我改正下面是代码
#include<reg51.h>
#include<intrins.h>
sbit DS= P2^1;    //串行数据输入,对应595的14脚SER
sbit SHCP = P2^0;     //移位寄存器时钟输入,对应595的11脚SCK
sbit STCP = P2^2;     //存储寄存器时钟输入,对应595的12脚RCK

unsigned char code duan[]={
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义

                         };
                         //0  1   2   3   4   5   6   7   8   9
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay(unsigned int m)
{
   unsigned char i,j;
   for(i=m;i>0;i--)
   for(j=114;j>0;j--);
}





void in(unsigned char Data)
{
unsigned char i;
for(i = 0; i < 8; i++)   //循环8次,刚好移完8位
{
      SHCP = 0;        //先将移位寄存器控制引脚置为低   
      _nop_();
          _nop_();
      if((Data & 0x80)== 0x80)
           DS =1;
      else
           DS =0;

      Data <<= 1;           //将数据的次高位移到最高位

      SHCP = 1;            //再置为高,产生移位时钟上升沿,上升沿时数据寄存器的数据移位

}
}




void out(void)
{
      STCP = 0;   //先将存储寄存器引脚置为低
     _nop_();
          _nop_();

      STCP = 1;    //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。
}



void main(void)
{
unsigned char i;
for(i=0;i<9;i++)  //有八位数码管,八位依次扫描
{
      in(wei[i]);
          //先传位码
      in(duan[i]);  //再传段码
      out();
      delay(1000);               //延迟时间2ms以内

}
}


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