ADC10多路转换
来源:互联网 发布:淘宝改版中国质造 编辑:程序博客网 时间:2024/05/17 22:36
这几天有事,耽误了几天。今天好好把ADC研究了一下。前几天写了一个单通道单词转换的AD程序,后来发现,只用单通道的话太浪费资源了。今天就把程序改进了一下,用了两个模拟输入口(再加几个输入口是一样的,今天只是为了测试程序),输出用lcd1602显示转换后的数字量和电压值。这样一来,咱们就可以用1个AD来转换10种不同的模拟信号了。把程序先贴出来,附件在下面,供大家参考下。有不足的地方,请大家指正哦。不懂的地方也可以跟帖,咱们一起讨论。
//**************************************************//
//**********ADC10双通道A0、A1采样*******************//
//*******通过ADC将两路模拟信号转换为数字信号********//
//*******通过lcd1602显示转换以后的数字量和电压值****//
//********--------------------------- *******************//
//****-->|P1.0(ADC) (lcdrs)P1.6|--> *********//
//****-->|P1.1(ADC) (lcden)P1.7|--> *********//
//**** | P2.0|-->D0(lcd) *********//
//**** | ~ | ~ *********//
//**** | P2.7|-->D7(lcd) *********//
//**** | msp430g2553 | *********//
//******* 制作人:wusong *******************//
//************************************ ********//
#include<msp430g2553.h>
#include<1602.h>
#define uint unsigned int
#define uchar unsigned char
uchar table_num[]={"0123456789"};
uint a[8],b[2],c,d,c_ge,c_shi,c_bai,c_qian,d_ge,d_shi,d_bai,d_qian;
uint i,j,num_1,num_0;
void display()
{
delay_Nms(500);
num_1=(int)(b[0]*1.08);//根据需要,可以更改这里的数值,将量程调到0~1024
num_0=(int)(b[1]*1.08);//根据需要,可以更改这里的数值,将量程调到0~1024
c=(int)(num_1*3.3);//转换为电压值
c_ge=c/1000;
c_shi=c%1000/100;
c_bai=c%100/10;
c_qian=c%10;
d=(int)(num_0*3.3);//转换为电压值
d_ge=d/1000;
d_shi=d%1000/100;
d_bai=d%100/10;
d_qian=d%10;
write_com(0x80);
write_data(table_num[num_1/1000]);
write_data(table_num[num_1%1000/100]);
write_data(table_num[num_1%100/10]);
write_data(table_num[num_1%10]);
write_data('=');
write_data(table_num[c_ge]);
write_data('.');
write_data(table_num[c_shi]);
write_data(table_num[c_bai]);
write_data(table_num[c_qian]);
write_data('V');
write_com(0x80+0x40);
write_data(table_num[num_0/1000]);
write_data(table_num[num_0%1000/100]);
write_data(table_num[num_0%100/10]);
write_data(table_num[num_0%10]);
write_data('=');
write_data(table_num[d_ge]);
write_data('.');
write_data(table_num[d_shi]);
write_data(table_num[d_bai]);
write_data(table_num[d_qian]);
write_data('V');
}
void main()
{
WDTCTL=WDTPW+WDTHOLD;//关看门狗
P2SEL=0x00;//P2为I/O模式
P2DIR|=0xff;//P2为LCD输出
P1DIR|=BIT6+BIT7;//P1.6和P1.7为LCD的输出
P1SEL|=BIT1+BIT2;//P1.1和P1.2设置为ADC功能A1和A2
ADC10CTL1|=CONSEQ_3+INCH_1;//序列通道单次转换+最大通道为A1
ADC10CTL0|=ADC10SHT_2+MSC+ADC10ON+ADC10IE;
ADC10DTC1|=0x08;//一共采样8次
ADC10AE0|=BIT0+BIT1;//打开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<2;i++)
{
b=0;
for(j=0;j<4;j++)
b+=a[i+j*2];
}
for(i=0;i<2;i++)
{
b=b/4;
}
display();//lcd显示
}
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC(void)
{
LPM0_EXIT;//退出低功耗模式
}
- ADC10多路转换
- MSP430F1232针对ADC10(使用DTC+SA)的内存中采样结果读取
- IO多路转换
- I/O多路转换 select
- 一分多行列转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 转换
- 程式中打开windows上本机已存在的服务
- 百度手机地图升级“彩色蚯蚓”
- 线段相交:Intersection
- 计时器(2)之数字时钟
- IT男标准装备
- ADC10多路转换
- IT女上班标准装备图
- 宏和枚举有什么区别,定义数组时使用枚举和使用宏的区别
- sqlite3中的数据类型
- broken necklace
- Comparator和Comparable在排序中的应用
- 笔划输入法查找算法示例(Lua实现)
- eas bos 导入解决方案后,启动报错org.eclipse.core.runtime.CoreException
- Android ApiDemos示例解析(105):Views->Buttons