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);
}
}
}
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
