找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3715|回复: 0
打印 上一主题 下一主题
收起左侧

基于MSP430F149单片机的ADC转换

[复制链接]
跳转到指定楼层
楼主
ID:207177 发表于 2017-7-29 11:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
********************************************************
程序功能:MCU的片内ADC对P6.0端口,P6.1端口的电压进行转换
          将模拟电压值显示在1602液晶上。
----------------------------------------------------------
测试说明:调节电位器R7的旋钮观察液晶显示数字变化。
*********************************************************/
#include  <msp430x14x.h>
#include  "BoardConfig.h"
#include  "cry1602.h"

#define   Num_of_Results   32  
#define   keyin  (P1IN&0x0f)

uchar shuzi[] = {"0123456789."};
uchar tishi[] = {"The volt is:"};

static uint results[Num_of_Results],results1[Num_of_Results];    //保存ADC转换结果的数组                                                     // is not used for anything.
void Trans_val(uint Hex_Val);           

/************************主函数****************************/
void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗
  BoardConfig(0xb8);                        //关闭数码管、流水灯、4245
  LcdReset();                               //复位1602液晶
  DispNChar(2,0,12,tishi);                  //显示提示信息
  Disp1Char(11,1,'V');                      //显示电压单位
  P6DIR|=BIT3;
  P6OUT|=BIT3;//背光显示
  P6SEL|=0X03;
  ADC12CTL0 &= ~(ENC);        //设置ENC为0,从而修改ADC12寄存器的值
  ADC12CTL0 = ADC12ON+SHT0_2+MSC;           // 打开ADC,设置采样时间


  //ADC12MCTL0=INCH_0;
  //ADC12MCTL1=INCH_1;
while(1)
{
   ADC12CTL0 &= ~(ENC);  
   if(keyin!=0x0f)
    {
      ADC12CTL0 = ADC12ON+SHT0_2+MSC+REFON;
      ADC12CTL1 = SHP+CONSEQ_2+CSTARTADD_1;     // 使用采样定时器
      ADC12MCTL1=INCH_1;
      ADC12IE = 0x02;                           // 使能ADC中断
      static uint index = 0;

      results1[index++] = ADC12MEM1;               // Move results
      if(index == Num_of_Results)
      {
            uchar i;
            unsigned long sum = 0;

            index = 0;
            for(i = 0; i < Num_of_Results; i++)
            {
                sum += results1[i];
            }
            sum >>= 5;                            //除以32

            Trans_val(sum);

      }
    }
    else if (keyin==0x0f)
    {
      ADC12CTL1 = SHP+CONSEQ_2+CSTARTADD_0;     // 使用采样定时器
      ADC12MCTL0=INCH_0;
      ADC12IE = 0x01;                           // 使能ADC中断
      static uint index = 0;

      results[index++] = ADC12MEM0;               // Move results
      if(index == Num_of_Results)
      {
            uchar i;
            unsigned long sum = 0;

            index = 0;
            for(i = 0; i < Num_of_Results; i++)
            {
                sum += results[i];
            }
            sum >>= 5;                            //除以32

            Trans_val(sum);

      }
    }

    ADC12CTL0 |= ENC;                         // 使能转换
    ADC12CTL0 |= ADC12SC;                     // 开始转换
}   
  //  _EINT();
  //  LPM0;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表