#include "stm32f10x.h"
#define RS(x) (x)?GPIO_SetBits(GPIOC,GPIO_Pin_9):GPIO_ResetBits(GPIOC,GPIO_Pin_9)
#define EN(x) (x)?GPIO_SetBits(GPIOC,GPIO_Pin_8):GPIO_ResetBits(GPIOC,GPIO_Pin_8)
#define COM 0
#define DAT 1
void Init_LCD_Pin(void)
{
GPIO_InitTypeDef MyGPIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
MyGPIO.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|
GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|
GPIO_Pin_8|GPIO_Pin_9;
MyGPIO.GPIO_Speed=GPIO_Speed_50MHz;
MyGPIO.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&MyGPIO);
}
void LCD_Write(char rs, char dat)
{
int i;
for(i=0;i<1000;i++)
GPIO_Write(GPIOC,dat);
RS(rs);
EN(1);
EN(0);
}
void LCD_Init(void)
{
int i;
LCD_Write(COM ,0x38);
LCD_Write (COM ,0x08);
LCD_Write (COM,0x01);
for(i=0;i<100000;i++);
LCD_Write (COM,0x06);
LCD_Write (COM,0x0C);
}
void LCD_Write_Char(char x,char y,char Data)
{
if(0 == x)LCD_Write(COM,0x80 + y);
else LCD_Write(COM,0xC0 + y);
LCD_Write(DAT,Data);
}
void Init_ADC1(void)//SPI???
{
GPIO_InitTypeDef MyGPIO;
ADC_InitTypeDef MyADC;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//??SPI1?????
MyGPIO.GPIO_Pin = GPIO_Pin_0;
MyGPIO.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA,&MyGPIO);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
MyADC.ADC_Mode = ADC_Mode_Independent;//????
MyADC.ADC_ScanConvMode=DISABLE;
MyADC.ADC_ContinuousConvMode=DISABLE;
MyADC.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
MyADC.ADC_DataAlign=ADC_DataAlign_Right;
MyADC.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&MyADC);
ADC_Cmd(ADC1,ENABLE);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
int ADCValue,ADCFlag;
unsigned char LCDBuffer[16]={"D:0000 v:0000mV"};
int main(void)
{ int i;
Init_LCD_Pin();
LCD_Init();
Init_ADC1();
LCD_Write_Char(0,0,'D');LCD_Write_Char(0,1,':');
LCD_Write_Char(0,6,' ');LCD_Write_Char(0,7,' ');
LCD_Write_Char(0,8,'V');LCD_Write_Char(0,9,':');
LCD_Write_Char(0,14,'m');LCD_Write_Char(0,15,'V');
while(1)
{ if(RESET !=ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC))
{ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
ADCValue=ADC_GetConversionValue(ADC1);
ADCFlag=1;
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
if (0!=ADCFlag)
{ ADCFlag=0;
LCDBuffer[2]=(i/1000)%10+'0';
LCDBuffer[3]=(i/100)%10+'0';
LCDBuffer[4]=(i/10)%10+'0';
LCDBuffer[5]=(i/1)%10+'0';
for(i=2;i<6;i++)LCD_Write_Char(0,i,LCDBuffer[i]);
i=ADCValue;
i=i*3300/4095;
LCDBuffer[10]=(i/1000)%10+'0';
LCDBuffer[11]=(i/100)%10+'0';
LCDBuffer[12]=(i/10)%10+'0';
LCDBuffer[13]=(i/1)%10+'0';
for(i=9;i<14;i++)LCD_Write_Char(0,i,LCDBuffer[i]);
}
}
}
实验五 STM32的ADC实验
最新推荐文章于 2024-02-29 14:36:00 发布