本帖最后由 zhijie428 于 2014-2-19 21:51 编辑
#include<reg51.h> //51芯片管脚定义头文件
#include<intrins.h> //内部包含延时函数 _nop_();
#include<STRING.H>
#define uchar unsigned char
#define uint unsigned int
sbit SDATA_595=P2^1; //串行数据输入
sbit SCLK_595 =P2^0; //移位时钟脉冲
sbit RCK_595 =P2^2; //输出锁存器控制脉冲
uchar temp;
/********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0; k<50; k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/* */
/*将显示数据送入74HC595内部移位寄存器 */
/* */
/********************************************************/
void WR_595(void)
{
uchar j;
for (j=0;j<8;j++)
{
temp=temp<<1;
SDATA_595=CY; //发送74HC595一位串行数据
SCLK_595=1; //上升沿发生移位
_nop_();
_nop_();
SCLK_595=0;
}
SDATA_595=1;
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 */
/* */
/********************************************************/
void OUT_595(void)
{
RCK_595=0;
_nop_();
_nop_();
_nop_();
RCK_595=1; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
RCK_595=0;
}
void main()
{
SCLK_595=0;
RCK_595=1;
while(1)
{
temp=0x80; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x40; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x20; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x10; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x08; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x04; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x02; //取显示数据
WR_595();
OUT_595();
delay(800);
temp=0x01; //取显示数据
WR_595();
OUT_595();
delay(800);
}
} |