本帖最后由 老老实实 于 2011-2-22 14:07 编辑
/****************************************************************** 显示时间部分
- 函数说明:HC595串行接收一个字节
- 隶属模块:内部
- 参数说明:无
- 返回说明:byte:需要送的数据
- 注 :在时钟的下升沿将数据写进去,先写最高位,最后写最低位
******************************************************************/
void HC595_Recieve_Byte(INT8U byte)
{
INT8U i = 0;
for(i=0 ; i<8 ; i++)
{
SMG_DIN = byte & (0x80 >>i); //先写最高位
SMG_SCK = 0;
SMG_SCK = 1; //产生一个上升沿
}
}
/******************************************************************
- 函数说明:HC595并行输出一个字节
- 隶属模块:内部
- 参数说明:无
- 返回说明:byte:需要输出的数据
- 注 :HC595_LC产生一个上升沿,就可以并行输出了
******************************************************************/
void HC595_Output_Byte(INT8U byte)
{
HC595_Recieve_Byte(byte);
SMG_LC = 0;
SMG_LC = 1;
}
以上是595输出一个字节是的两个函数
如果要输出两个字节,很明显,只要随便改动一下即可
#define INT16U unsigned int
void HC595_Recieve_Byte(INT16U word)
{
INT8U i = 0;
for(i=0 ; i<16 ; i++)
{
SMG_DIN = word & (0x8000 >>i); //先写最高位
SMG_SCK = 0;
SMG_SCK = 1; //产生一个上升沿
}
}
void HC595_Output_Byte(INT16U word)
{
HC595_Recieve_Byte(word);
SMG_LC = 0;
SMG_LC = 1;
}
===》以此类推,输出多个字节,就很好搞掂了, |