STM8L15X单片机,IAR软件,初学者
初学stm8l15x芯片,看了下网上的一些例程,改写了一个使用STM8L152K4芯片读取外部光敏电阻电压值,并使用芯片内部ad转换,将对应电压转换为光敏值,同时在高于2.0时触发高报继电器,低于1.0时触发低报继电器;
主函数部分
/*采集外部光敏电压输出值,通过内置12位ad转换显示出对应的光敏值,
高于x1触发继电器一,低于x2触发继电器二,
同时将采集到的光敏值通过lcd四位显示出来
2020-08-13
by 倪sir*/
#include "stm8l15x.h"
#include "lcd.h"
unsigned char Ht1621Tab[]={
0x00,0x00,0x00,0x00};
//以下定义LED与按键的接口
#define LED1_GPIO_PORT GPIOC //BLUE
#define LED1_GPIO_PINS GPIO_Pin_1
#define LED2_GPIO_PORT GPIOC //RED
#define LED2_GPIO_PINS GPIO_Pin_0
/*不精确延时函数*/
void Delay(__IO uint16_t nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
}
}
/*ad的初始化函数*/
void ad_init()
{
CLK_PeripheralClockConfig (CLK_Peripheral_ADC1,ENABLE);
ADC_Init (ADC1,ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);//ADC1,单次采样,12位,1分频
ADC_SamplingTimeConfig(ADC1,ADC_Group_FastChannels,ADC_SamplingTime_384Cycles);//采样周期设置
//ADC_VrefintCmd(ENABLE);//内部基准电压使能
ADC_ChannelCmd (ADC1,ADC_Channel_8,ENABLE);//adc1的8通道为pd6引脚
//ADC_ChannelCmd (ADC1,ADC_Channel_Vrefint,ENABLE);
ADC_Cmd(ADC1,ENABLE);//ADC1使能
}
void gpio_init()
{
GPIO_Init(LED1_GPIO_PORT, LED1_GPIO_PINS, GPIO_Mode_Out_PP_Low_Slow);//初始化LED1,GPC4高速高电平推挽输出
GPIO_Init(LED2_GPIO_PORT, LED2_GPIO_PINS, GPIO_Mode_Out_PP_Low_Slow);//初始化LED2,GPC4高速高电平推挽输出
CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE); //使能外设时钟,STM8L默认所有外设时钟初始时关闭,使用前徐开启
}
int main( void )
{
u16 u16_adc1_value;
u16 VoltageValue;
InitLCD();
gpio_init();
ad_init();
while(1)
{
ADC_SoftwareStartConv (ADC1);//开启软件转换
while(!ADC_GetFlagStatus (ADC1,ADC_FLAG_EOC));