中级会员
积分 250
金钱 250
注册时间 2017-6-8
在线时间 46 小时
1 金钱
1638的读写,写能用但是读根本不能用啊,整一天了
void Write_addd1638(u8 add )
{
int i;
STB_0;
DIO_OUT;
for(i=0;i<8;i++)
{
CLK_0;
if(add&0x01)
{
DIO_1;
}
else
{
DIO_0;
}
CLK_1;
add=(add>>1);
}
}
/////////////发送两个字节/////////////////
void Write_data1638(u8 add,u8 data)
{
int i;
STB_0;
DIO_OUT;
for(i=0;i<8;i++)
{
CLK_0;
if(add&0x01)
{
DIO_1;
}
else
{
DIO_0;
}
CLK_1;
add=add>>1;
}
for(i=0;i<8;i++)
{
CLK_0;
if(data&0x01)
{
DIO_1;
}
else
{
DIO_0;
}
CLK_1;
data=data>>1;
}
STB_1;
}
////////////////////////////////////////////
//////////////// 清零函数//////////////////
void zero_all()
{
for(u8 i=0;i<16;i++)
{
Write_data1638(Address[i],0x00);
}
}
/////////////读一个字节但不拉高////////////////
u8 read_one()
{
u8 data;
DIO_IN;
STB_0;
for(u8 i=0;i<8;i++)
{
CLK_0;
if(value==1)
{
data>>=1;
data=(data|0x80);
}
else
{
data>>=1;
}
CLK_1;
}
return data;
}
/////////////////////////////////////
/////////////读4个数据//////////////
void read_data()
{
Write_addd1638(0x42);
delay_us(10);
for(u8 i=0;i<4;i++)
{
byte[i]=read_one();
delay_us(10);
}
STB_1;
}
int main(void)
{
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOB,GPIO_PIN_1,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOB,GPIO_PIN_0,GPIO_MODE_OUT_PP_HIGH_FAST);
Write_add1638(0x88);//打开显示开关并调脉冲(0x88开始到0x8F逐次变亮)
Write_add1638(0x44); //以固定地址发送
zero_all(); //清屏
Write_data1638(0xc1,0x01);
while(1)
{
read_data();
for(u8 i=0;i<4;i++)
{
byte[i]=byte[i]+i*4;
switch(byte[i])
{
case 2:zero_all();
break;
case 6:Write_data1638(0xc3,0x01);
// case 10:ks5
// case 14:ks7
// case 64:ks2
// case 68:ks4
// case 72:ks6
// case 76:ks8
按理说按下ks1应该清零的,,求大神指教
我来回答