之前做的,今天在博客上发一下,效果:
CH571蓝牙接收,即刻显示内容
因为没怎么用这个芯片,所以配置还没有完全搞清楚,就先尝试的软件模拟IIC,毕竟只要有两个GPIO就能用。
GPIOA_SetBits(GPIO_Pin_13);
GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA);
GPIOA_SetBits(GPIO_Pin_14);
GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
我用的是P13和14
下面是IIC的实现函数,我是直接改的其他程序的,忘了是哪copy来的了,需要修改的可能就是用不同屏幕或者其他iic设备需要改一下地址。
void delay(unsigned int t){
return;
// while(t--){
// for(int k=6;k>0;k--)
// __nop();
// }
}
void scl(uint8_t n){
if(n==1)
GPIOA_SetBits(GPIO_Pin_13);
else
GPIOA_ResetBits(GPIO_Pin_13);
}
void sda(uint8_t n){
if(n==1)
GPIOA_SetBits(GPIO_Pin_14);
else
GPIOA_ResetBits(GPIO_Pin_14);
}
void sda_in(){
GPIOA_ModeCfg(GPIO_Pin_14,GPIO_ModeIN_PU);
}
void sda_out(){
GPIOA_ModeCfg(GPIO_Pin_14,GPIO_ModeOut_PP_5mA);
}
u8 IIC_Wait_Ack0(void)
{
delay(1);
scl(1);
delay(1);
scl(0);
delay(1);
}
//产生IIC起始信号
void IIC_Start0(void)
{
scl(1);
sda(1);
delay(1);//0.7*6*1
sda(0);
delay(1);
scl(0);
delay(1);
}
//产生IIC停止信号
void IIC_Stop0(void)
{
sda(0);
delay(1);
scl(1);
delay(1);
sda(1);
delay(1);
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
delay(1);
for(t=0;t<8;t++)
{
scl(0);
delay(1);
if((txd&0x80)>>7)
sda(1);
else
sda(0);
txd<<=1;
delay(1);
scl(1);
delay(1);
}
scl(0);
delay(1);
}
void Write_IIC_Data(unsigned char IIC_Data)
{
IIC_Start0();
IIC_Send_Byte(0x78);//地址根据自己使用的设备修改
IIC_Wait_Ack0();
IIC_Send_Byte(0x40);//
IIC_Wait_Ack0();
IIC_Send_Byte(IIC_Data);
IIC_Wait_Ack0();
IIC_Stop0();
}
void Write_IIC_Command(unsigned char IIC_Command)
{
IIC_Start0();
IIC_Send_Byte(0x78);
IIC_Wait_Ack0();
IIC_Send_Byte(0x00);
IIC_Wait_Ack0();
IIC_Send_Byte(IIC_Command);
IIC_Wait_Ack0();
IIC_Stop0();
}