專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> STM32 >> 瀏覽文章

stm8AD轉(zhuǎn)換測電壓

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年05月01日   【字體:
 
#include "stm8s105c_s.h"
#define shuzhi PB_ODR
int a,b,c,d;//用于存放ac轉(zhuǎn)換值
long int t;//用于延時
long int ad_value;
int shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0到9
void shumaguan1(long int ad_value1)//用于顯示
{
 
d=ad_value1/1000;//得到ac轉(zhuǎn)換的整數(shù)部分
c=ad_value100/100;//得到ac轉(zhuǎn)換的第1 位小數(shù)
b=ad_value10/10;//得到ac轉(zhuǎn)換的第2位小數(shù)
a=ad_value1;//得到ac轉(zhuǎn)換的第3位小數(shù)
 
PD_ODR=0B00001110;
shuzhi=shumaguan[a];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00001101;
shuzhi=shumaguan[b];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00001011;
shuzhi=shumaguan[c];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00000111;
shuzhi=shumaguan[d];
for(t=0;t<1000;t++);
shuzhi=0x00;
}
void jingzhen(void)//開16兆晶振
{
CLK_ECKR |=0x1;           //開啟外部時鐘    
  while(!(CLK_ECKR&0x2)); //等待外部時鐘   
  CLK_CKDIVR &= 0xF8;     //CPU無分頻 16M   
  CLK_SWR = 0xB4;            //選擇外部時鐘    
  while(!(CLK_SWCR&0x8));   
  CLK_SWCR |=0x2;           //使能外部時鐘
}
main()
{
PD_DDR=0B00001111;
PD_CR1=0B00001111;
PB_DDR=0XFF;
PB_CR1=0XFF;
//數(shù)碼管引腳
jingzhen();
//Init_UART2();
PG_DDR=0B00000010;
PG_CR1=0B00000010;
// 初始化A/D 模塊
ADC_CR2 = 0x00; // A/D 結(jié)果數(shù)據(jù)左對齊
ADC_CR1 = 0x70; // ADC 時鐘=主時鐘/18=16/18MHZ
// ADC 轉(zhuǎn)換模式=單次
// 禁止ADC 轉(zhuǎn)換
ADC_CSR = 0B00001001; // 選擇通道9,PE6
ADC_TDRL = 0x20;
 
 
 
 
PD_DDR=0B00001111;
PD_CR1=0B00001111;
PB_DDR=0XFF;
PB_CR1=0XFF;
while(1)// 進入無限循環(huán)
{
ADC_CR1 = 0x01; // CR1 寄存器的最低位置1,使能ADC 轉(zhuǎn)換
for(t=0;t<400;t++); // 延時一段時間,至少7uS,保證ADC 模塊的上電完成
ADC_CR1 = ADC_CR1 | 0x01; // 再次將CR1 寄存器的最低位置1,開始AD轉(zhuǎn)換
while((ADC_CSR & 0x80) == 0); // 等待ADC 結(jié)束
ad_value = ((int)ADC_DRH<<2);// 讀出ADC 結(jié)果的高8 位并右移2 位
ad_value |= ADC_DRL;//讀出ADC 結(jié)果的低8 位
ad_value=((ad_value)*5000)/1024;
 
shumaguan1(ad_value);
 
 
}
}
關(guān)閉窗口

相關(guān)文章