📄 ht1380.c
字号:
#include <reg51.h>
#include "HT1380.h"
//极短延时函数:nNop()
void nNop(uchar x)
{
for(;x>0;x--);
}
//向SPI写一字节数据函数:SPI_WriteByte()
void SPI_WriteByte(uint x)
{
uchar i;
uint temp = 0x01;
SetPinDIO(0);
for(i=0;i<8;i++)
{
PinDIO = x & temp;
SetSCLK(1);
temp = temp << 1;
SetSCLK(0);
}
}
//向SPI读一字节数据函数:SPI_ReadByte()
uint SPI_ReadByte(void)
{
uchar i;
uint temp = 0x00;
SetPinDIO(1);
for(i=0;i<8;i++)
{
SetSCLK(1);
temp = (temp >> 1) | PinDIO;
SetSCLK(0);
}
return(temp);
}
//写命令加写数据函数:WriteByte()
void WriteByte(uint x, uint y)
{
uchar i,j;
SetPinDIO(0);
for(i=0;i<8;i++)
{
PinDIO = x & 0x01;
SetSCLK(1);
x >>= 1;
SetSCLK(0);
}
for(j=0;j<8;j++)
{
PinDIO = y & 0x01;
SetSCLK(1);
y >>= 1;
SetSCLK(0);
}
}
//写命令加读数据函数:ReadByte()
uint ReadByte(uint x)
{
uchar i,j;
uint temp = 0x00;
uint temp1;
SetPinDIO(0);
for(i=0;i<8;i++)
{
PinDIO = x & 0x01;
SetSCLK(1);
x >>= 1;
SetSCLK(0);
}
SetPinDIO(1);
for(j=0;j<8;j++)
{
SetSCLK(1);
temp1 = PinDIO;
temp1 <<= j;
temp = temp | temp1;
SetSCLK(0);
}
return(temp);
}
//使能(启动)时钟函数:StartClock()
void StartClock(void)
{
SetREST(0);
nNop(1);
SetREST(1);
WriteByte(0x8e,0x00); //置WP = 0
SetREST(0);
nNop(1);
SetREST(1);
WriteByte(0x80,0x00); //置CH = 0
SetREST(0);
}
//单字节模式对HT1380写数据函数:HT1380_Single_Write()
void HT1380_Single_Write(uint RegNum, uint Data)
{
uint Cmd;
Cmd = 0x80 | (RegNum << 1);
//StartClock();
SetREST(1);
WriteByte(Cmd,Data);
SetREST(0);
//nNop(10);
}
//单字节模式对HT1380读数据函数:HT1380_Single_Read()
uint HT1380_Single_Read(uint RegNum)
{
uint Data;
uint Cmd;
Cmd = 0x81 | (RegNum << 1);
SetREST(1);
Data = ReadByte(Cmd);
SetREST(0);
return(Data);
}
//多字节模式对HT1380写数据函数:HT1380_Burst_Write()
void HT1380_Burst_Write(uint Data_Array[])
{
uint i,j,k;
uint Cmd = 0xbe;
uint temp;
SetPinDIO(0);
SetREST(1);
for(i=0;i<8;i++)
{
PinDIO = Cmd & 0x01;
SetSCLK(1);
Cmd >>= 1;
SetSCLK(0);
}
for(j=0;j<8;j++)
{
temp = Data_Array[j];
for(k=0;k<8;k++)
{
PinDIO = temp & 0x01;
SetSCLK(1);
temp >>= 1;
SetSCLK(0);
}
}
SetREST(0);
}
//多字节模式对HT1380读数据函数:HT1380_Burst_Read()
void HT1380_Burst_Read(uint Data_Array[])
{
uint i,j,k;
uint Cmd = 0xbf;
uint temp;
SetPinDIO(0);
SetREST(1);
for(i=0;i<8;i++)
{
PinDIO = Cmd & 0x01;
SetSCLK(1);
Cmd >>= 1;
SetSCLK(0);
}
SetPinDIO(1);
for(j=0;j<8;j++)
{
for(k=0;k<8;k++)
{
SetSCLK(1);
temp = PinDIO;
temp >>= k;
Data_Array[j] |= temp;
SetSCLK(0);
}
}
SetREST(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -