专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

stm8AD转换测电压

作者:huqin   来源:本站原创   点击数:  更新时间:2014年05月01日   【字体:
 
#include "stm8s105c_s.h"
#define shuzhi PB_ODR
int a,b,c,d;//用于存放ac转换值
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转换的整数部分
c=ad_value100/100;//得到ac转换的第1 位小数
b=ad_value10/10;//得到ac转换的第2位小数
a=ad_value1;//得到ac转换的第3位小数
 
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;
//数码管引脚
jingzhen();
//Init_UART2();
PG_DDR=0B00000010;
PG_CR1=0B00000010;
// 初始化A/D 模块
ADC_CR2 = 0x00; // A/D 结果数据左对齐
ADC_CR1 = 0x70; // ADC 时钟=主时钟/18=16/18MHZ
// ADC 转换模式=单次
// 禁止ADC 转换
ADC_CSR = 0B00001001; // 选择通道9,PE6
ADC_TDRL = 0x20;
 
 
 
 
PD_DDR=0B00001111;
PD_CR1=0B00001111;
PB_DDR=0XFF;
PB_CR1=0XFF;
while(1)// 进入无限循环
{
ADC_CR1 = 0x01; // CR1 寄存器的最低位置1,使能ADC 转换
for(t=0;t<400;t++); // 延时一段时间,至少7uS,保证ADC 模块的上电完成
ADC_CR1 = ADC_CR1 | 0x01; // 再次将CR1 寄存器的最低位置1,开始AD转换
while((ADC_CSR & 0x80) == 0); // 等待ADC 结束
ad_value = ((int)ADC_DRH<<2);// 读出ADC 结果的高8 位并右移2 位
ad_value |= ADC_DRL;//读出ADC 结果的低8 位
ad_value=((ad_value)*5000)/1024;
 
shumaguan1(ad_value);
 
 
}
}
关闭窗口

相关文章