求解:89c52 用三个IO口加上3片74hc595 控制16位的8段数码管

2020-02-04 09:25发布

        好像一般在网上搜的资料都是两个595级联,而很少3个级联。有三个级联的也好像没发现只用三个IO口控制的。之前在论坛里看到有一个是将整个P1口做位选控制24位数码管。于是我弄了一下不用P1做位选,而是两个595作位选,一个595作段选来显示实时时钟。但是显示是一堆乱乱的东西。求解释。

    主程序如下:
#include "reg51.h"       
#include "intrins.h"
#include "ds1302.h"
#include "hc595.h"


/*---------------------------------------------*/


void main(void)

{

unsigned char i;
unsigned char time[16] ;
ds1302_init(); /*DS302初始化函数*/
ds1302_write_time(); //若用纽扣电池供电,则不需要没每次上电写入,此代码应该屏蔽
delay2ms(15);

while(1)
{
ds1302_read_time();//读取时钟信息
for(i=1;i<8;i++)
  {
  time[2*i-2]=(time_buf&0x70)>>4;
  time[2*i-1]=time_buf&0x0f;
  }
for(i=0;i<16;i++)   //有八位数码管,八位依次扫描

{
          if(i<8)
          {
       hc595_in(wei);   //先传位码

           hc595_in(wei[8]);                         //再传位码

       hc595_in(duan[time]);   //再传段码

      
           }
           else
           {
              hc595_in(wei[8]);
                  hc595_in(wei[8-i]);
                  hc595_in(duan[time]);   //再传段码
           }
           hc595_out();
       delay2ms(1);              //延迟时间2ms以内

}
}
}


QQ截图20120327195702.jpg (657.76 KB, 下载次数: 1) 下载附件 2012-3-27 19:57 上传

不知道是哪里错了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。