完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
如题,在论坛上找来自己改了改AD多通道转换在LCD上显示结果,可为什么在P1.0和P1.1没有接任何电压的时候LCD上就一直显示有值,在两个引脚接上电源后也不能显示电压,而是数值一直跳动,求大神帮忙看看
uchar d[16]="The Volt1: . V"; uchar d1[16]="The Volt0: . V"; uchar table_num[]={"0123456789"}; unsigned int 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]; LCD_Disp_string(0,0,d); // 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]; LCD_Disp_string(0,1,d1); //display_string(d1,0x80); } void main() { WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT1+BIT0;//P1.1和P1.0置为ADC功能A1和A0 ADC10CTL1|=CONSEQ_3+INCH_1;//序列通道多次转换+最大通道为A2 ADC10CTL0|=ADC10SHT_2+MSC+ADC10ON+ADC10IE; ADC10DTC1|=0x08;//一共采样8次 ADC10AE0|=BIT0+BIT1;//打开A0和A1的模拟输入通道 IO_Init(); LCD_Init();;//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];//b[0]=a[偶数]相加之和,b[1]=a[奇数]相加之和,每个b有4组数 } for(i=0;i<2;i++) { b=b/4;//对b[0],b[1]求平均值 _NOP(); } display();//lcd显示 } } #pragma vector=ADC10_VECTOR __interrupt void ADC(void) { LPM0_EXIT;//退出低功耗模式 } |
|
相关推荐
5个回答
|
|
|
可以代做 1 0 0 2 9 2 5 0 9 4
|
|
|
|
|
|
一,判断显示是否正确,就是随意给一个数值,看是否能正确显示。
二,判断数据格式转换是否正确,随意给一个数值,经过格式转换后,进行显示,看是否正确。 三,进行单次AD转换,看转换结果是否正确。 四,进行多次AD转换,看结果是否正确。 五,注意变量的类型定义,注意变量的数值会否超出变量类型的定义。 |
|
|
|
|
人中狼 发表于 2017-7-12 10:34 非常感谢,我现在显示是没问题的,问题就是在模拟输入引脚没有接东西的时候也在采样,这时候不应该是0吗? |
|
|
|
|
|
做AD输入的引脚通常是要处于悬空状态,可以查芯片手册,引脚在作为AD输入时的设置要求,这 时候不外接输入有可能是任意电压,并且可能会随意变化,可以查查芯片手册,引脚在作为AD输入时的设置要求,以及电路连接要求
|
|
|
|
|
人中狼 发表于 2017-7-12 15:23 我查了G2553作为模拟输入时的两个端口, ADC10AE0 |=BIT0+BIT1; //打开模拟输入通道 ADC10CTL1 = CONSEQ_3 + + ADC10DIV_0 + INCH_1; 这两句已经定义了P1.0和P1.1作为模拟输入,这时候电压加在别的引脚上不会引起LCD显示的变化,应该是已经定义好了,但是这两个引脚上有电压值 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16902 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 11:01 , Processed in 0.773896 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1428