欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stm32_adc轉(zhuǎn)換,模擬輸入端為PB0
[打印本頁]
作者:
arm3512210
時間:
2017-12-26 16:26
標(biāo)題:
stm32_adc轉(zhuǎn)換,模擬輸入端為PB0
stm32_adc轉(zhuǎn)換,模擬輸入端為PB0
單片機源程序如下:
#include "stm32f10x.h"
#include "public.h"
u16 Value;
u16 voltage;
u16 ge;
u16 shi;
u16 bai;
u16 qian;
u16 wan;
void delay(u32 i)
{
while(i--);
}
void RCC_Configuration()
{
SystemInit(); //系統(tǒng)時鐘初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開端口A的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打開端口B的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//打開端口C的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//打開TIM2的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//打開ADC1的時鐘
}
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結(jié)構(gòu)體
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設(shè)置傳輸速率
GPIO_Init(GPIOB,&GPIO_InitStructure); // 初始化GPIOB
GPIO_Init(GPIOC,&GPIO_InitStructure); // 初始化GPIOC
GPIO_SetBits(GPIOB,GPIO_Pin_All); //為LCD各引腳拉高電平
GPIO_SetBits(GPIOC,GPIO_Pin_All);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //PB0設(shè)為模擬輸入腳
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void LcdWriteCom(u8 com) //向LCD寫入命令 //LCD_E =PC15;LCD_RW=PC14;LCD_RS=PC13;LCD_DATA=PA0~PA7
{
u16 zhi;
zhi=com;
zhi=zhi<<8;
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0; //使能清零
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //LCD_RS=0; //選擇寫入命令
GPIO_ResetBits(GPIOC,GPIO_Pin_14); //LCD_RW=0; //選擇寫入
GPIO_Write(GPIOB,zhi); //LCD_DATA
delay(10000); //Delay1ms(1); //6000000約為1S
GPIO_SetBits(GPIOC,GPIO_Pin_15); //LCD_E =1; //寫入時序
delay(50000); //Delay1ms(5); //5mS以上
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0;
zhi=zhi<<4;
GPIO_Write(GPIOB,zhi); //發(fā)送com的低四位
delay(10000); //Delay1ms(1); //6000000約為1S
GPIO_SetBits(GPIOC,GPIO_Pin_15); //LCD_E =1; //寫入時序
delay(50000); //Delay1ms(5); //5mS以上
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0;
}
void LcdWriteData(u8 dat) //向LCD寫入數(shù)據(jù)
{
u16 zhi;
zhi=dat;
zhi=zhi<<8;
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0; //使能清零
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LCD_RS=1; //選擇寫入數(shù)據(jù)
GPIO_ResetBits(GPIOC,GPIO_Pin_14); //LCD_RW=0; //選擇寫入
GPIO_Write(GPIOB,zhi); //LCD_DATA
delay(10000); //Delay1ms(1);
GPIO_SetBits(GPIOC,GPIO_Pin_15); //LCD_E =1; //寫入時序
delay(50000); //Delay1ms(5); //5mS以上
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0;
zhi=zhi<<4;
GPIO_Write(GPIOB,zhi); //發(fā)送dat的低四位
delay(10000); //Delay1ms(1);
GPIO_SetBits(GPIOC,GPIO_Pin_15); //LCD_E =1; //寫入時序
delay(50000); //Delay1ms(5);
GPIO_ResetBits(GPIOC,GPIO_Pin_15); //LCD_E =0;
}
void SendString_LCD(u8 *s)
{
while(*s!='\0')
{
LcdWriteData(*s);
s++;
}
}
void LCD_Configuration()
{
LcdWriteCom(0x32); //將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28); //在四位線下的初始化
LcdWriteCom(0x0c); //開顯示,設(shè)光標(biāo)
LcdWriteCom(0x06); //寫一個指針加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點
}
void LCD_NewChar()
{
u8 i;
u8 table0[]={0x1E,0x02,0x12,0x1F,0x01,0x1F,0x01,0x03};
u8 table1[]={0x0A,0x1F,0x04,0x1F,0x04,0x0F,0x15,0x07};
u8 table2[]={0x1C,0x05,0x06,0x05,0x04,0x05,0x03,0x00};
LcdWriteCom(0x40);
for(i=0;i<8;i++)
LcdWriteData(table0[i]); //將代碼寫入CGRAM中
for(i=0;i<8;i++)
LcdWriteData(table1[i]); //將代碼寫入CGRAM中
for(i=0;i<8;i++)
LcdWriteData(table2[i]); //將代碼寫入CGRAM中
}
void ADC_Configuration()
{
ADC_InitTypeDef ADC_InitStructure; //聲明一個結(jié)構(gòu)體
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC時鐘分頻
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //獨立工作模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能多通道掃描模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //連續(xù)轉(zhuǎn)換模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //軟件啟動轉(zhuǎn)換
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數(shù)據(jù)右對齊
ADC_InitStructure.ADC_NbrOfChannel = 1; //指定將轉(zhuǎn)換的ADC通道的數(shù)量
ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5); //ADC1選擇信道8,轉(zhuǎn)換順序1,采樣時間55.5周期
ADC_Cmd(ADC1, ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); //重置ADC1校準(zhǔn)寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //等待ADC1校準(zhǔn)重置完成
ADC_StartCalibration(ADC1); //開始ADC1校準(zhǔn)
while(ADC_GetCalibrationStatus(ADC1)); //等待ADC1校準(zhǔn)完成
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開始轉(zhuǎn)換
}
int main()
{
RCC_Configuration();
GPIO_Configuration();
LCD_Configuration();
SendString_LCD("1428401034");
LcdWriteCom(0xC0); //設(shè)置數(shù)據(jù)指針起點
ADC_Configuration();
while(1)
{
delay(10000000);
Value=ADC_GetConversionValue(ADC1);
voltage=Value*323/4095;
ge=voltage%10;
shi=voltage/10%10;
bai=voltage/100%10;
qian=voltage/1000%10;
wan=voltage/1000%10;
LcdWriteCom(0xC0); //設(shè)置數(shù)據(jù)指針起點
LcdWriteData(bai+'0');
LcdWriteData('.');
LcdWriteData(shi+'0');
LcdWriteData(ge+'0');
LcdWriteData('V');
}
}
復(fù)制代碼
所有資料51hei提供下載:
STM32_ADC.rar
(359.65 KB, 下載次數(shù): 47)
2017-12-27 00:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1