74hc595的锁存器控制不是上升沿有效吗 已改是0到1有效但是我的程序里只有1到0才有效
求大神指点
#include<reg52.h> //52单片机头文件声明
#include<intrins.h> //内部包含延时函数_nop_()
#define uchar unsigned char //宏定义
#define uint unsigned int
uchar code datas[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 数组定义
sbit rclk=P3^5; //移出锁存器控制脉冲
sbit srclk=P3^6; //移位时钟脉冲
sbit ser=P3^4; //串行数据输入
uchar temp;
void delayms(uint ms) //延时函数
{
uint i,j;
i=ms;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
/*将数据输入74HC595内部移位寄存器*/
void WR_595(void)
{
uchar j;
for(j=0;j<8;j++)
{
if(0x80&temp)
ser=1;
else
ser=0;
// srclk=0; 当一个八位的变量赋值给一个一位的变量时默认将最低位给 这个一位的变量
// ser=temp>>7; 经试验两种写法一样
_nop_();
_nop_();
srclk=0;
srclk=1; //上升沿有效
temp<<=1;
}
}
/*将移位寄存器的数据锁存到输出寄存器并显示*/
void Red(void)
{
rclk=1;
_nop_(); //此处有一个问题就是当rclk的值是先0后1时程序得到的不是走马灯的效果
_nop_();
rclk=0; //上升沿时有效
}
void main()
{
srclk=0;
rclk=0;
while(1)
{
uchar i;
for(i=0;i<8;i++)
{
temp=datas[i];
WR_595();
Red();
delayms(1000);
}
}
}
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |