既然要用到74hc595,那么就要写一个595的驱动程序,以便后面的 *** 作简单化。
sbit hc595_si =P2^5; //数据引脚sbit hc595_sck =P2^4; //移位寄存器
sbit hc595_rck =P2^7; //输出寄存器
/595驱动/
void HC595(unsigned char ch)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
hc595_si = (ch & 0x80); //取写入数据的最高位送入595的数据引脚
ch <<= 1; //相当于ch = ch << 1; 数据左移1位,低位往高位移
hc595_sck=0; //送到移位寄存器
hc595_sck=1;
}
hc595_rck=0;
hc595_rck=1;//输出数据
}
做完这些,接下来只需要往595里写数据就可以了,例如:HC595(0xfe); 则595芯片的Q0(最低位)输出端为“0”。可用仿真软件尝试一遍便知效果。
用两片595,需要级联,上片控制段选,下片位选。ST-CP存储时钟,在每个上升沿将移位寄存器数据存储至存储寄存器。SH-CP移位时钟,也是在每个上升沿将14脚即串行数据输入脚移至移位寄存器。注意:首先写入数据的最高位
用两片595,需要级联,上片控制段选,下片位选。ST-CP存储时钟,在每个上升沿将移位寄存器数据存储至存储寄存器。SH-CP移位时钟,也是在每个上升沿将14脚即串行数据输入脚移至移位寄存器。
注意:首先写入数据的最高位
你的这个不是乱码就有问题了!~
你仔细理解一下这段
void wr595(uchar dat)
{
uchar a;
for(a=8;a>0;a--)
{
SH_CP=0;
DS=dat&0x80;
dat<<=1;
SH_CP=1;
_nop_();
_nop_();
SH_CP=0;
_nop_();
_nop_();
SH_CP=1;
}
}
你的for循环是有问题的
以为你的每个字节移了多次
所以就乱码了
void wr595(uchar dat)
{
uchar a;
for(a=8;a>0;a--)
{
SH_CP=0;
DS=dat&0x80;
dat<<=1;
SH_CP=1;
_nop_();
_nop_();
}
}
你看看下面的
去掉一个
以上就是关于单片机初学者,求老师写一个74hc595控制两个数码管或流水灯的简单程序,参考参考,真心不懂该怎么全部的内容,包括:单片机初学者,求老师写一个74hc595控制两个数码管或流水灯的简单程序,参考参考,真心不懂该怎么、如何使用74HC595控制数码管、单片机怎么控制74HC595进行数码管显示0~99!如果C详细代码无上感谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)