求解:89c52 用三个IO口加上3片74hc595 控制16位的8段数码管
好像一般在网上搜的资料都是两个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 ;
ds1302_init(); /*DS302初始化函数*/
ds1302_write_time(); //若用纽扣电池供电,则不需要没每次上电写入,此代码应该屏蔽
delay2ms(15);
while(1)
{
ds1302_read_time();//读取时钟信息
for(i=1;i<8;i++)
{
time=(time_buf&0x70)>>4;
time=time_buf&0x0f;
}
for(i=0;i<16;i++) //有八位数码管,八位依次扫描
{
if(i<8)
{
hc595_in(wei); //先传位码
hc595_in(wei); //再传位码
hc595_in(duan]); //再传段码
}
else
{
hc595_in(wei);
hc595_in(wei);
hc595_in(duan]); //再传段码
}
hc595_out();
delay2ms(1); //延迟时间2ms以内
}
}
}
不知道是哪里错了。 哪位可以看一下哪里出了问题啊
页:
[1]