好像一般在网上搜的资料都是两个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 上传
不知道是哪里错了。
一周热门 更多>