本帖最后由 芯圣电子官方QQ 于 2023-7-20 11:15 编辑
在HC89F003内部具有A/D转换单元,使用它可进行模拟信号的采集,使用新近得到的一个spi接口的OLED屏则能充当采样数据的显示器,其构成如图所示。
电压检测构成及执行效果
该spi接口的OLED显示屏共有7个引脚,其引脚排列及用途如下: 1. GND 电源地 2. VCC(3.3v~5.0V) 3. SCLK 时钟信号端 4. SDIN 数据信号端 5. CS 片选信号端 6. RST 复位信号端 7. DC 指令/数据选择端
在使用中它与HC89F003的连接关系如下: SCLK--P07 SDIN--P06 CS--P22 RST--P20 DC--P02
为与OLED的例程相衔接,对效果引脚的高低电平输出定义如下: #define OLED_SCLK_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_7); #define OLED_SCLK_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_7); #define OLED_SDIN_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_6); #define OLED_SDIN_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_6); #define OLED_CS_Clr() GPIO_WriteLow(GPIOT2,GPIO_PIN_2); #define OLED_CS_Set() GPIO_WriteHigh(GPIOT2,GPIO_PIN_2); #define OLED_RST_Clr() GPIO_WriteLow(GPIOT2,GPIO_PIN_0); #define OLED_RST_Set() GPIO_WriteHigh(GPIOT2,GPIO_PIN_0); #define OLED_DC_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_2); #define OLED_DC_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_2);
在利用单通道A/D采集例程的基础上,实现采样值显示的主程序如下: void main(void)
{
u16 s;
u8 n;
System_Init();
GPIO_Init(GPIOT0,GPIO_PIN_0,GPIO_MODE_IN_AN);
ADC_Cmd(ENABLE);
ADC_Init(DATA10,RIGHT_ALIGN,ADC_CLOCK_OSC_16);
ADC_VrefConfig(VREF_IN_VDD);
ADC_ChannelConfig(ADC_AN0);
GPIO_Init(GPIOT0,GPIO_PIN_6, GPIO_MODE_OUT_PP);
GPIO_Init(GPIOT0,GPIO_PIN_7, GPIO_MODE_OUT_PP);
GPIO_Init(GPIOT2,GPIO_PIN_2, GPIO_MODE_OUT_PP);
GPIO_Init(GPIOT2,GPIO_PIN_0, GPIO_MODE_OUT_PP);
GPIO_Init(GPIOT0,GPIO_PIN_2, GPIO_MODE_OUT_PP);
OLED_Init();
OLED_Clear();
OLED_ShowString(8,2,"ADC TEST");
OLED_ShowString(8,4,"A/D:");
OLED_ShowString(8,6,"V= ");
while(1)
{
ADC_StartConversion();
while(ADC_GetITFlag() != SET);
ADC_ClearITFlag();
s=ADC_GetResault();
n=s/1000+'0';
OLED_ShowChar(40,4,n);
n=s%1000/100+'0';
OLED_ShowChar(48,4,n);
n=s%100/10+'0';
OLED_ShowChar(56,4,n);
n=s%10+'0';
OLED_ShowChar(64,4,n);
s=s*33/1024;
n=s%100/10+'0';
OLED_ShowChar(40,6,n);
OLED_ShowChar(48,6,'.');
n=s%10+'0';
OLED_ShowChar(56,6,n);
OLED_ShowChar(64,6,'V');
delay_ms(500);
}
}
|