实验五 STM32的ADC实验

#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]);
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值