根据1628芯片手册写出相对应的驱动程序
//**********************************************************//
//**********************************************************//
//*******************1628驱动芯片*************************//
//**********************************************************//
//**********************************************************//
//**********************************************************//
void send_1628_cmd(u8 data)//发8位数据有片选
{
u8 i;
stb=0;
for(i=0;i<8;++i)
{
clk=0;
if(data & 0x01)
{
dio=1;
}
else
{
dio=0;
}
data >>= 1;
clk=1;
}
stb=1;
}
void send_1628_8b(u8 data)//发8位数据无片选
{
u8 i;
for(i=0;i<8;++i)
{
clk=0;
if(data & 0x01)
{
dio=1;
}
else
{
dio=0;
}
data >>= 1;
clk=1;
}
}
void send_1628_16b(u16 data)//发16位数据
{
u8 i;
for(i=0;i<16;++i)
{
clk=0;
if(data & 0x01)
{
dio=1;
}
else
{
dio=0;
}
data >>= 1;
clk=1;
}
}
void send_1628_showall(u8 data)//发送显示内容
{
send_1628_cmd(0x40);
u8 i;
stb=0;
send_1628_8b(0xc0);
for(i=0;i<16;++i)
{
send_1628_8b(data);
}
stb=1;
}
void dsp_1628_init()
{
send_1628_cmd(0x03);
send_1628_cmd(0x8f);
send_1628_showall(0x00);
}
void sm1628_dsp()
{
send_1628_cmd(0x40);
u8 i;
stb=0;
send_1628_8b(0xC0); //显示数据发送地址0xC0
for(i = 0; i < 7; ++i)
{
send_1628_16b(sm1628_send_buf[i]);
}
stb=1;
}
//数据读取
void sm1628_Rec_data()
{
u8 i,j;
stb = 0;
send_1628_8b(0x42); //数据读取模式 0x42
SDI_ENABLE; //端口设置输入
delay_us(1); //延时
for(i = 0; i < 7; ++i)
{
for(j = 0;j < 8; ++j)
{
clk = 0;
sm1628_rec_buf[i] >>= 1;//从低位开始读取
clk = 1;
if(dio)
sm1628_rec_buf[i]|=0x80;
}
}
stb = 1;
SDO_ENABLE;
send_1628_cmd(0x40);
}