微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 找了一个74hc595控制两位数码管,发现延时有问题 改却改不好 拿出来请大家帮我改正

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

时间:10-02 整理:3721RD 点击:
找了一个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以内
}
}


主函数main 里面加一个while(1);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top