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);
}
}
}
我要赚赏金打赏帖 |
|
|---|---|
| 片外存储Flash使用方法(Arduino IDE环境)被打赏¥22元 | |
| 三分钟快速上手ESP-NOW(ArduinoIDE环境)被打赏¥23元 | |
| 【S32K3XX】LPSPI参数配置说明被打赏¥21元 | |
| 在WT9932C61-TINY上实现超声波测距被打赏¥22元 | |
| 基于WT9932C61-TINY的环境构建及OLED屏驱动测试被打赏¥20元 | |
| 【S32K3XX】Core-to-Core 中断使用被打赏¥21元 | |
| 「AI编程记录--含源码」用一晚上的时间写一个esp32的示波器被打赏¥19元 | |
| STM32C0116DK开发探索记(3)被打赏¥30元 | |
| STM32C0116DK开发探索记(2)被打赏¥24元 | |
| STM32C0116DK开发探索记(1)被打赏¥29元 | |
我要赚赏金
