基于STM8的ADC0832采集及蓝牙通信系统
TypeDef)DO_GPIO_PINS); /*在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号*/
asm("nop");
asm("nop");
GPIO_WriteLow(CS_GPIO_PORT, (GPIO_Pin_TypeDef)CS_GPIO_PINS); //使能ADC0832
asm("nop");
asm("nop");
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteLow(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS); //形成下降沿1
asm("nop");
asm("nop"); /*在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能*/
if( i==0 )
GPIO_WriteLow(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
if( i==1 )
GPIO_WriteHigh(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteLow(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS); //形成下降沿2
asm("nop");
asm("nop");
if( i==0 )
GPIO_WriteLow(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
if( i==1 )
GPIO_WriteHigh(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteLow(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS); //形成下降沿3
asm("nop");
asm("nop");
}
/********************************************************
函数名称:uchar AD_read()
函数作用:读取ADC0832转换的数据
参数说明:无
函数返回:返回8位的数据
********************************************************/
u8 AD_read()
{
u8 temp1 = 0;
u8 temp2 = 0;
uchar i = 0;
GPIO_WriteHigh(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
asm("nop");
asm("nop");
ioChange(1); //作为输入
for(i = 0; i < 8; i++)
{
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteLow(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS); //形成下降沿
asm("nop");
asm("nop");
temp1 = temp1 << 1;
if(GPIO_ReadInputPin(DI_GPIO_PORT, (GPIO_Pin_TypeDef)DI_GPIO_PINS) !=0)
temp1 |= 0x01;
else temp1 |= 0x00;
}
for(i = 0; i < 8; i++)
{
temp2 = temp2>>1;
if(GPIO_ReadInputPin(DI_GPIO_PORT, (GPIO_Pin_TypeDef)DI_GPIO_PINS) !=0)
temp2 = temp2|0x80;
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteLow(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS); //形成下降沿
asm("nop");
asm("nop");
}
GPIO_WriteHigh(CLK_GPIO_PORT, (GPIO_Pin_TypeDef)CLK_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteHigh(DO_GPIO_PORT, (GPIO_Pin_TypeDef)DO_GPIO_PINS);
asm("nop");
asm("nop");
GPIO_WriteHigh(CS_GPIO_PORT, (GPIO_Pin_TypeDef)CS_GPIO_PINS); //使能ADC0832
asm("nop");
asm("nop");
if(temp1 == temp2)
return temp1;
else
return 0;
}
#endif
再说说安卓上位机,一个简单蓝牙接收的apk,用于实时画图,可以显示和画出一段时间内的STM8采样的数值,从后台接收数据,发送消息至进程更新UI。
为了方便大家学习,工程已经打包上传,http://download.csdn.net/detail/devintt/8029389
- stm8s开发(六) EXIT的使用:做一个外部中断的按钮!(09-18)
- 如何设计基于STM8的ADC0832采集及蓝牙通信系统?(09-27)
- stm8s开发(五) TIMER的使用:定时!(09-18)
- stm8s开发(八) IIC的使用:IIC主机通信!(09-19)
- stm8s开发(四) CLOCK的使用:时钟控制!(09-14)
- stm8s开发(七) SPI的使用:SPI主机通信!(09-19)