3445|0

71

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

ADC10多通道转换破解 [复制链接]

launchpadg2553ADC10多通道(两通道)程序,使用1602显示,这里就不在重复它的驱动程序了,直接给出主要的程序,用户自己配置液晶程序就可以了
#include "lcd1602.h"
uchar d[16]="The Volt1: .   V";
uchar d1[16]="The Volt0: .   V";
uchar table_num[]={"0123456789"};
uint a[8],b[3];
uint i,j,ad1,ad0,real;
void display()
{
  delay(250);
  uint ptr[4];
  
  ad1=(int)(b[1]);//根据需要,可以更改这里的数值,将量程调到0~1024
  ad0=(int)(b[2]);//根据需要,可以更改这里的数值,将量程调到0~1024
  //通道A1的值
    real=(int)((3.3*ad1)/1023*1000);//扩大1000倍
    ptr[0] = real / 1000;        
    ptr[1] = (real - ptr[0]*1000)/100;
    ptr[2] = (real - ptr[0]*1000 - ptr[1]*100)/10;
    ptr[3] = (real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10);
    d[10]=table_num[ptr[0]];
    for(i=1;i<4;i++)
      d[i+11]=table_num[ptr];
    display_string(d,0xc0);        
  //通道A0的值
    real=(int)((3.3*ad0)/1023*1000);//扩大1000倍
    ptr[0] = real / 1000;        
    ptr[1] = (real - ptr[0]*1000)/100;
    ptr[2] = (real - ptr[0]*1000 - ptr[1]*100)/10;
    ptr[3] = (real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10);
    d1[10]=table_num[ptr[0]];
    for(i=1;i<4;i++)
      d1[i+11]=table_num[ptr];
    display_string(d1,0x80);            
}
void main()
{      
  WDTCTL = WDTPW + WDTHOLD;
  //主系统时钟切换为外部高速晶振   
  if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF)
  {
      while(1);   // If calibration constants erased, trap CPU!!
  }
  // Configure Basic Clock
  BCSCTL1 = CALBC1_8MHZ;     // Set range
  DCOCTL = CALDCO_8MHZ;    // Set DCO step + modulation*/      
  
  P2SEL=0x00;//P2为I/O模式
  P2DIR|=0xff;//P2为LCD输出
  P1SEL|=BIT1+BIT2;//P1.1和P1.2设置为ADC功能A1和A2
  
  ADC10CTL1|=CONSEQ_3+INCH_1;//序列通道多次转换+最大通道为A1
  ADC10CTL0|=ADC10SHT_2+MSC+ADC10ON+ADC10IE;
  ADC10DTC1|=0x0C;//一共采样12次
  ADC10AE0|=BIT0+BIT1+BIT3;//打开A0和A1的模拟输入通道
  
  init_lcd();//lcd初始化
  
  while(1)
  {
    ADC10CTL0&=~ENC;//关闭采样使能
    while(ADC10CTL1&BUSY);//检测AD是否繁忙
    ADC10CTL0|=ENC+ADC10SC;//启动ADC
    ADC10SA=(unsigned int)a;//获取a[]的首地址。首先对A1、A0采样,放入a[0]和a[1]中。再对A1、A0采样,放入a[2]和a[3]中,如此循环下去。
    _BIS_SR(LPM0_bits+GIE);//低功耗模式0,开中断
     for(i=0;i<3;i++)
    {
      b=0;
      for(j=0;j<4;j++)
        b+=a[i+j*3];//b[0]=a[偶数]相加之和,b[1]=a[奇数]相加之和,每个b有16组数
    }
    for(i=0;i<3;i++)
    {  
      b=b/4;//对b[0],b[1],B[2]求平均值
      _NOP();
    }
    display();//lcd显示
  }
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC(void)
{
     LPM0_EXIT;//退出低功耗模式
}
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表