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

📄 adc_lcd.c

📁 IAR编写的MSP430的ADC-LCD
💻 C
字号:
//描述:ADC12-A0模拟采集+LCD演示ADC12-A0模数转换.
//编写:微控设计网 DC版主 日期:2008.1.
//编译环境:IAR EW430 V3.42A
//验证平台: www.microcontrol.cn MC430F44开发板 V1.0
//声明:此程序只供微控用户使用.在未得到DC版主的许可请勿将资料外公开和用于商业用途.
//******************************************************************************
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//	
# include <msp430x44x.h>
//******************************************************************************
//定义区
 unsigned int value; 
#define precision 0.0008    //3.3/4096 分辩率
#define Vunit 0x08           //V电压单位
#define mVunit 0x04          //mV电压单位
#define Dot   0x10           //小数点 
#define Run   0x08           //Run指示 
 float voltage;     //电压值

 unsigned char digit[10] =
{
  0xEB,  /* "0" LCD segments a+b+c+d+e+f */
  0x60,  /* "1" */
  0xC7,  /* "2" */
  0xE5,  /* "3" */
  0x6C,  /* "4" */
  0xAD,  /* "5" */
  0xAF,  /* "6" */
  0xE0,  /* "7" */
  0xEF,  /* "8" */
  0xED   /* "9" */
};

//******************************************************************************
void LED(void)
{
  if(P1OUT & BIT1)
     P1OUT &= ~BIT1;
  else
     P1OUT |= BIT1;
}
//******************************************************************************
//清LCD屏
void LcdClr(void)
{ unsigned char i;
  for (i=0; i<31; i++)
  {
   LCDMEM[i] = 0x00;                        // CLR LCDMEM
  }
}
//******************************************************************************
//LCD初始化
void LcdInit(void)
{ LCDCTL = LCDON + LCD4MUX + LCDSG0_2;      // LCD on, 4-Mux, segments S2-S33
  BTCTL = BTFRFQ1;                          // LCD clock freq is ACLK/128
  P5SEL = 0xFC;                             // Select P5.2-7 as Com and Rxx
  LcdClr();
  LCDMEM[13] |= Vunit ;                    //电压单位指示
  LCDMEM[14] |= Run;
}

//******************************************************************************
//说明:单片机初始化
void init(void)
{  //ADC12初始化----------------------
   //单通道,单次采样模式
   LcdInit();                       //LCD初始化
   P6SEL |= BIT0;                   //使能A/D通道 A0
   ADC12CTL0 = ADC12ON + SHT0_2;    //开ADC12内核和设置SHIT0=2(N=4)
   ADC12CTL1 |= SHP;                 //SAMPCON信号选择为采样定时器输出
   ADC12CTL1 |= CSTARTADD_0;         //定义单次转换地址
   ADC12MCTL0 |= INCH_0;
   //ADC12MCTL0 = SREF_2;            //使用外部参考电压 Vr+ = VeREF+
   ADC12CTL0 |= ENC;                 //ADC转换允许
   
   //Timer_A初始化--------------------
   P1DIR |= 0x02;
   CCR0 = 1638-1;
   CCTL0 = CCIE;
   TACTL = TASSEL_1+MC_1;         //timerA CLK=ACLK,增计数模式
   _EINT();                       //开总中断
}

//******************************************************************************
//说明:数据转换和显示更新 
void Display(unsigned int intdata)
{  unsigned long tmep;
   unsigned int a,b,c,d;
   LCDMEM[7]=digit[intdata/1000] ;
   a=intdata%1000 ;  
   LCDMEM[8]=digit[a/100] ;
   b=a%100 ;
   LCDMEM[9]=digit[b/10] ;
   c=b%10;
   LCDMEM[10]=digit[c/1] ;
   
   voltage =(float)(intdata*precision);
   tmep = (unsigned long)(voltage*1000);
   LCDMEM[1]=digit[tmep/10000] ;
   a=tmep%10000 ;
   LCDMEM[2]=digit[a/1000] ;
   b=tmep%1000 ;
   LCDMEM[3]=digit[b/100] ;
   c=tmep%100 ;
   LCDMEM[4]=digit[c/10] ;
   d=tmep%10 ;
   LCDMEM[5]=digit[d/1] ;
   LCDMEM[2]  |= Dot ;                      //小数点 
}

//******************************************************************************
//TimerA0中断服务程序
  #pragma vector=TIMERA0_VECTOR
  __interrupt void Timer_a(void)
  {
    LPM0_EXIT;
  }

//******************************************************************************
void main(void)
{    WDTCTL=WDTPW+WDTHOLD;     //停止WDT
     init(); 
    
     LPM3;
      while(1)
      {ADC12CTL0 |= ADC12SC;            // 开始转换
       while((ADC12IFG & BIT0)==0);
       _NOP();      
       LED();  
       value=ADC12MEM0;                // 读取结果
       Display(value);                 //数据转换和显示更新      
     LPM3;
      }
}
//******************************************************************************


⌨️ 快捷键说明

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