595、573一起驱动数码管,求教!!

able200330 2011-08-03 11:00:53
新手,对开发板上的电路编程,做一个在开发板上数字的显示,自己还不很清楚573与595的用法,我在开发板上写的程序总是不尽人意。帅哥,大叔教小弟一下好吗?
开发板上的图:

我写的程序:
#include<reg52.h>//看了郭天祥视频就写下的程序
#define uchar unsigned char

sbit hc595sck11 = P2^3;
sbit hc595slr12 = P2^4;
sbit duan = P2^1;

uchar code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~9

void my_delay_nms(uchar z)
{
uchar i,j;
for(i = z; i > 0; i --)
for(j = 110; j > 0; j--);
}

void main(void)
{
uchar i;
hc595sck11 = 0;//上升沿移位的寄存器的数据移位//这是弊柄,我不太会用595的串口输入和输出
hc595sck11 = 1;
hc595slr12 = 0x00;//八位全亮
hc595sck11 = 1;
hc595sck11 = 0;

while(1)
{
for(i=0;i<16;i++)
{
duan = 1;
P0 = table[i];
duan = 0;
my_delay_nms(250);
my_delay_nms(250);
}
}

}
结果在流水灯上LED有变化,但是换到数码管就亮都不亮。
帮帮我!
你们可以也重写,只要能教会595与573用法就多给分,谢谢!
...全文
255 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
able200330 2011-08-06
  • 打赏
  • 举报
回复
问题解决了,是我用595写的程序出错了。
谢谢踊跃回复。
able200330 2011-08-06
  • 打赏
  • 举报
回复
谢谢回复,看来我还不能操之过急。
zjh2287 2011-08-05
  • 打赏
  • 举报
回复
573、595的用法你去看它们的技术资料,在资料上一般会有典型的应用电路,把电路弄清楚就行了。
bjtea 2011-08-04
  • 打赏
  • 举报
回复
1)573功能相当于74373,可以做地址锁存器,也可以做一般的数字锁存器,例如锁存8位段码;用C做锁存信号。
2)595功能是串行转并行,类似于74164,但595功能强一些,有锁存信号。也可以用于输出8位段码;
3)138是3-8译码器,8选1输出,只能用于驱动1位LED二极管,或者做数码管的位码信号;但肯定不能做段码控制信号。
northcan 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 able200330 的回复:]
其中while(1)应该算是循环作用啊??
[/Quote]
是死循环的作用。
able200330 2011-08-04
  • 打赏
  • 举报
回复
其中while(1)应该算是循环作用啊??
able200330 2011-08-04
  • 打赏
  • 举报
回复
jybdlp帅哥

恩好的,我再写了一个

#include<reg52.h>
#include<absacc.h>

#define uint unsigned int

sbit hc573_clock = P2^1;
sbit hc595sck = P2^3;
sbit hc595rck = P2^4;
sbit hc595dat = P2^5;

uint code tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~9
uint code led[] = {0xaa,0xaa,0xaa,0xaa};//位选

void my_delay_nms(uint z)
{
uint i,j;
for(i = z; i > 0; i --)
for(j = 110; j > 0; j--);
}

void hc595fun(uint a)
{
{
hc595dat = a;
hc595sck = 0;//上升沿移位进入
hc595sck = 1;
my_delay_nms(1);
hc595sck = 1;//下降沿锁存
hc595sck = 0;
my_delay_nms(1);
hc595rck = 0;//移位数据进入寄存器
hc595rck = 1;
my_delay_nms(1);
hc595rck = 1;//寄存器内数据不变
hc595rck = 0;

}
}

void hc573fun(uint z)
{
hc573_clock = 1;
P0 = tab[z];
hc573_clock = 0;
}

void main(void)
{
uint i;
while(1)
{ for(i = 0; i < 10; i ++)
{
hc595fun(led[2]);
hc573fun(i);
my_delay_nms(1);
my_delay_nms(1);
}
}
}
结果只在开机的瞬间亮一下,我应该怎么样扫描让它一直显示呢?
陌上故人 2011-08-04
  • 打赏
  • 举报
回复
用595,138是必须用扫描的办法,即每秒达到二三十次,才能保证LED灯亮。
哥们,把你的延时去了吧,肯定会亮点~~(不过肯定不会正常显示的!)
还有很多问题,找个老师好好学吧~~~
陌上故人 2011-08-04
  • 打赏
  • 举报
回复
用595,138是必须用扫描的办法,即每秒达到二三十次,才能保证LED灯亮。
able200330 2011-08-03
  • 打赏
  • 举报
回复
之前自己控制流水灯用8个IO口,现在知道用多浪费IO口了

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧