sbit _LCLK = LCLK;
sbit _SCLK = SCLK;
sbit _DATA = DATA;
/*******************************************************************************
函数功能:向一片595发送数据
输入参数:数据的地址
输出参数:无
*******************************************************************************/
void Send595(UCHAR * pdat)
{
unsigned char i,j;
j=0x80;
for (i=0;i<8;i++)
{
if((*pdat)&j) _DATA = 1;
else _DATA = 0;
_SCLK = 0;
_SCLK = 1;
j>>=1;
}
}
/*******************************************************************************
函数功能:串行静态显示函数
输入参数:显存的地址
输出参数:无
*******************************************************************************/
code UCHAR DisplayHex[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
};
void DisplayBy595(UCHAR * pdat)
{
UCHAR i;
for(i=0;i<4;i++)
{
Send595(&DisplayHex[*(pdat+i)]);
}
_LCLK=0;
_LCLK=1;
}
void HC595_senddata(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++) //发送一个八位数据
{
if((dat=dat< else MOSIO=1; //否则发送1;
SH_CLK=0; //SH_CLK的上升沿,将数据送进移位寄存器;
NOP();
NOP();
SH_CLK=1;
}
ST_CLK=0; //ST_CLK的上升沿,将数据由移位寄存器送到存储寄存器
NOP(); //并输出到Q0—Q7并口
NOP();
ST_CLK=1;
}
其实就是分两步:1、串行输入数据到595的8个i/o口上;2、输出数据。
数字芯片:74HC595移位寄存器,看我三只以引脚控制数码管,简单实用
串入并出 看一下操作时序,很容易控制