AVR单片机MEGA16驱动 74HC595 驱动共阴极8位数码管 自由连线 显示乱码

我们自己的连线方式是:Q0连dpQ1连aQ2连bQ3连cQ4连dQ5连eQ6连fQ7连g(Q0~Q7为74HC595的管脚dp,a~g为数码管笔段)跪求高手给个代码能让所... 我们自己的连线方式是:Q0连dp Q1连a Q2连b Q3连c Q4连d Q5连e Q6连f Q7连g
(Q0~Q7为74HC595的管脚 dp,a~g为数码管笔段)
跪求高手 给个代码 能让所有数码管(21个)0~9走动
拜谢!
最好是C语言的程序!
展开
 我来答
yfhaoa
2012-06-01 · TA获得超过1650个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:554万
展开全部
这种连接方式无所谓的,595可以正向走和反向走,所以不管你怎么接,都有办法,就是改一句代码的事。另外,数码管查表数据可以生成,只要你知道各个端在什么位置就行了。595程序如下,给你注释清楚:
//宏定义
#define SCK_L PORTB &=~BIT(3) //595控制
#define SCK_H PORTB |= BIT(3)
#define RCK_L PORTB &=~BIT(4)
#define RCK_H PORTB |= BIT(4)
#define DAT_L PORTB &=~BIT(5)
#define DAT_H PORTB |= BIT(5)
//595数据发送函数
void set595(uchar data)
{
uchar a,b;
a = data;
SCK_L; //时钟低
RCK_L; //锁存低
for(b=0;b<8;b++) //移发数据
{
if(a&0x01) //如果出来后方向是反的,就改为if(a&0x80)
{
DAT_H; //发数据1
}
else
{
DAT_L; //发数据0
}
SCK_H; //时钟上升沿
a >>= 1; //数据移位,如果上面改成80,那么此处改为a<<=1;一定要对应
NOP();
NOP();
SCK_L; //时钟低
RCK_L; //打开锁存,我的习惯是,8位数据发完后再打开锁存,这样可以消隐
}
}
其他的你自己写吧,很简单的。如果还不行,那你就在我空间留言吧。
jhlwq
2012-05-22 · TA获得超过411个赞
知道小有建树答主
回答量:1048
采纳率:0%
帮助的人:401万
展开全部
你的这个连接办法写起程序来是不是很麻烦了,另外你用的数码管是几位一体的还是全部单个的,要用几个595
追问
就是不知道程序怎么写啊,数码管 全部是单个的8位共阴极数码管,21个数码管 用了21个595,所以焊接量  比较大  不可能拆了 重新焊 只能改程序  单是这个我真不会写
所以希望高手能给个C语言程序用着先 只要不显示乱码就行
追答
实在不好意思,我这只会写51的程序,不会AVR的程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式