⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc_电压表.c

📁 用c8051f330自带ADC差分方式做的电压表四数码管显示范围在-3.3~+3.3
💻 C
字号:
/*********************************************************************************
(           电位器通过adc处理模拟电压 转换数字信号 数码管输出                )

编写:huhong

日期:2007/10/25

地点:roboteam

版本:1.1

说明:靠ADC0H取样 处理成数码管信号后显示

疑问:?????

描述:用四个共阳级数码管显示    p0.1 p0.3做取样表笔端   p1控制数字值 p0.4--p0.7控制扫描 动态显示
***********************************************************************************/
#include<c8051f330.h>
#include <absacc.h>
#include <Intrins.h>

int a,b,c,d;
float x;
unsigned int code g[] = {0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90,0x0ff,0x0bf}; //数码管显示数字


void sysclk(void)          //内部晶振
{ 
  OSCICN = 0x83; 
}

void pio(void)             
{
  P0MDIN = 0x0f0;          //P0口输入方式  p0.4做正输入 p0.5 负输入比较值 模拟信号
  P0MDOUT = 0x00;          //P0口输出方式  p0.1做PWM 没上拉电阻 用推挽好
  P0SKIP = 0x0ff;          //P0口跳转方式  p0.1做PWM
  P1MDIN = 0x0ff;          //P1口输入方式
  P1MDOUT = 0x0ff;         //P1口输出方式 推顽开数码管
  P1SKIP = 0x0ff;          //P1口跳转方式 
  XBR0 = 0x00;             //XBR0特殊功能关闭
  XBR1 = 0x0c0;            //XBR1打开CEX0-p1.1
}

void adc(void)
{
  AMX0P = 0x01;            //0000 0001 用p0.1
  AMX0N = 0x03;            //0000 0011 用p0.3
  ADC0CF = 0x2c;
  ADC0CN = 0x90;
  REF0CN = 0x08;
}

void  delay(m)             //延时程序,1=5ms   抄的 没验证 不好意思
{
  unsigned i,j;
  for(i=0;i<1840;i++)      //1840
  {
    for(j=0;j<m;j++);
  }

} 

void display(void)
{
  P0 = 0x00;               //显示
  P1 = g[a];
  P0 = 0x10;
  delay(1);
  P0 = 0x00;
  P1 = g[b];
  P0 = 0x20;
  delay(1);
  P0 = 0x00;
  P1 = g[c]&0x7f;           //按位与 出那个小数点 
  P0 = 0x40;
  delay(1);
  P0 = 0x00;
  P1 = g[d];
  P0 = 0x80;
  delay(1);
}

void chuli(void)
{
  x *=100;                   //各个数码管取值
  a = (int)x%10;
  b = ((int)x/10)%10;
  c = (int)x/100; 
}

main()
{
  PCA0MD &=~0x40;            //关闭看门狗
  sysclk();
  pio();
  adc();

  while( 1 )
  {
    ADC0CN |= 0x10;
    x = ADC0H;                         //取ADC高8位
	if (x < 128)
	{ 
	  d = 10;                      //0~~127  为正电压 d管无显示
	  x = 3.3*(x/127.0);           //获取取样电压值
	}
	else
	{
	  d = 11;                     //128~~255 为负电压 d管显示负号
	  x = 3.3*((256.0-x)/128.0);  //获取取样电压值
   	}
	chuli();
    display();
    
  }


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -