原创 今天把MSP430F149的ADC模块测试成功了!

2008-8-11 03:18 7730 9 11 分类: MCU/ 嵌入式

/***********************************************
程序功能:MSP430F149的ADC模块测试
程序简介:设置430内部的的12位ADC模块工作,讲采集的数据的10进制数值显示在数码管上
程序现象:从P6.0输入一个模拟电压值(0~2.5V),就可以看到LED数码管上显示了一个四位数
  且随着输入电压的变化而变化(0000~4095)
作者:鱼小
时间:2008-08-11凌晨
地点:机电楼电赛培训基地
***********************************************/
#include <msp430x14x.h>
#define uint unsigned int
#define duan P2OUT //LED段
#define wei P1OUT //LED位(P1低四位)
uint ADC0;  //保存输出值
char dis_buffer[4];
char seg7code[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管段码,最后一位为空


//ADC12初始化
void ADC12setup(void)
{
//ADC12设置**************************
 P6SEL |= 0x01;        //使用A/D通道 A0
 ADC12CTL0 = ADC12ON ; //开ADC12内核,设SHT0=2 (N=4)
 ADC12CTL1 = SHP ;     //SAMPCON信号选为采样定时器输出
//ADC12内部参考电压设置
 ADC12CTL0 |= REF2_5V; //选用内部参考电压为2.5V
 ADC12CTL0 |= REFON;   //内部参考电压打开
 ADC12MCTL0 |= SREF_1; //R+=2.5V R-=VSS
 //转换允许
 ADC12CTL0 |= ENC ;    //转换允许(上升沿)
 ADC0=0x00;
}


//延时
void delay(uint i){
 while(i--){
  char j;
  for (j=0;j<125;j++);
 }
}


//数据变换
void data_converter( char *p,unsigned int value)
{
 unsigned int m,n,j=0;
 p[0]=value/1000;
 m=value%1000;
 p[1]=m/100;
 n=m%100;
 p[2]=n/10;
 j=n%10;
 p[3]=j/1;
}


//数码管显示
void display()
{
    uint i;
    for(i=0;i<4;i++)
    {
        switch(i)
        {
        case 0:wei=0x0e;duan=seg7code[dis_buffer[0]];delay(1);duan=0xff;break;
        case 1:wei=0x0d;duan=seg7code[dis_buffer[1]];delay(1);duan=0xff;break;
        case 2:wei=0x0b;duan=seg7code[dis_buffer[2]];delay(1);duan=0xff;break;
        case 3:wei=0x07;duan=seg7code[dis_buffer[3]];delay(1);duan=0xff;break;
        default:break;
        }
    }
}


//主函数
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P1DIR=0xff;
  P2DIR=0xff;
  ADC12setup();
  for (;;)
 {
  ADC12CTL0 |= ADC12SC;                     //sampling open,AD转换完成后


(ADC12BUSY=0),ADC12SC自动复位;
  while((ADC12IFG & BIT0) == 0);            //等转换结束
  ADC0 = ADC12MEM0;                         //读转换数据值,同时清ADC12IFG0标志
  data_converter(dis_buffer,ADC0);      //数据变换
  display();
 }
}



 

文章评论2条评论)

登录后参与讨论

jizzll_617398179 2008-8-12 10:49

bu不错,呵呵

用户160522 2008-8-12 10:28

咱们交个朋友的。我也是搞电子竞赛的。 QQ394328966
相关推荐阅读
用户1453845 2011-09-08 19:40
stm8s参考手册上未说明的细节
1,字编程(Word programming)时,地址必须4字节对齐,从首地址开始,4字节连续装载后自动开始编程过程。说明:例如要写入u16(16位无符号整形)类型的数据0x1234到0x4005地址...
用户1453845 2011-01-26 09:23
ST-LINK 仿真器修复
    ST-LINK损坏,可能是无意将+12V电源线接到了仿真器TVCC引出线上了。表现的症状是能正常连接电脑,能出现可移动磁盘,但接到目标板时会造成目标板一直处于复位状态,仿真时弹出错误30001...
用户1453845 2009-08-29 16:38
MSP430x54x学习笔记--硬件乘法器MPY
硬件乘法器MPY:(平台:MSP430F5418) ·16位乘法器使用方法:     1.无符号数相乘 result="n1"*n2。第一操作数n1(16位无符号)赋给MPY寄存器,第二操作数n2(1...
用户1453845 2009-08-25 14:28
MSP430F5418学习笔记----UCS时钟模块配置
引言:一年前开始用TI公司的x14x系列超低功耗单片机MSP430F149,感觉与普通的51系列相比,各个外设的功能强大了一些,使用起来没有很大的区别,但有一个重要的区别就是外部晶振需要正确配置才能使...
用户1453845 2009-07-11 01:04
"TI"杯电赛芯片ADS7886读取成功!
         一直为这个芯片的程序烦心,6个脚的芯片,无须设置基准电压,没有寄存器的设置,没有指令的输入,没有任何外围电路.        串行传输,两根控制线(CS和SCLK),一根数据线(SD...
用户1453845 2008-08-21 00:16
基于MSP430的红外遥控器解码
          遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的...
我要评论
2
9
关闭 站长推荐上一条 /2 下一条