完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include char nADC_Flag; int nADC_Count; int ADC_BUF[40]; void init_ADC(void); void init_timerA(void); void TimerA(void); void format_Data(); void ADC_Interrupt(void); void init_LCD(void); void lcd_SetRP(); void Adcvolt(void); //**********************************************// void init_ADC(void) { //设置P6.0口 P6SEL = 0X01; //设置ENC为0,从而修改ADC12寄存器的值 ADC12CTL9 &= ~(ENC); //设置参考电压分别为AVSS和AVCC,输入通道为A0 ADC12MCTL0 = INCH_0 + EOS; //转换的起始地址为:ADCMEM0 ADC12CTL1 = 0X00; ADC12CTL1 += CSTARTADD_0; //采样脉冲由采用定时器产生 ADC12CTL1 += SHP; //转换模式为:多通道、多次转换 ADC12CTL1 += CONSEQ_1; //内部时钟源 ADC12CTL1 += ADC12SSEL_0; //时钟分频为1 ADC12CTL1 += ADC12DIV_0; ADC12CTL0 += 8 * 0x100; ADC12CTL0 += MSC; ADC12CTL0 += ADC12ON + REFON + REF2_5V + SHT0_6; ADC12IE = 0; //关闭各个通道的转换中断 ADC12IE |= ENC; //使能ADC转换 return; } //**********************************************// void init_TimerA(void) { // 选择SMCLK,清除TAR TACTL = TASSEL1 + TACLR; // 1/8 SMCLK TACTL += ID1; TACTL += ID0; // CCR0 中断允许 CCTL0 = CCIE; // 时间间隔为 500us CCR0 = 500; // 增记数模式 TACTL |= MC0; return; } #pragma vector = TIMERA1_VECTOR __interrupt void TimerA(void) { int results; ADC12CTL0 &= ~ENC; result = ADC12MEM0; ADC _BUF[nADC_Count] = results; nADC_Count += 1; //采集40个点 if(nADC_Count == 40) { nADC_Flag = 1; nADC_Count = 0; } ADC12CTL0| = ENC+?ADC12SC; } //把数据编程要显示的格式。然后写到lcd_Buf中去 void format_Data() { int result; unsigned char tmp; if(nADC_Flag==1) nADC_Flag=0; for(i=0;i<40;i++) {result+=ADC_BUF[i]; } } result=(int)(((REFVOL*result)/4096-0.986)/0.0000355); for(tmp=0;tmp<7;tmp++) {lcd_Buf[tmp] = result%10; result = result/10; } } #pragma vector = ADC_VECTOR __interrupt void ADC_Interrupt(void) { formal_Data(); adc_Flag = 1; } //显示子程序 const unsigned char NUM_LCD[16]={ 0x7b,0x12,0x4f,0x1f,0x36, 0x3d,0x7d,0x13,0x7f,0x3f, 0x73,0x7c,0x69,0x5e,0x6f, 0x65}; unsigned char lcd_Buf[LCD_IN_USE]; void init_LCD(void) { char tmpv; LCDCTL = LCDP2 + LCD4MUX + LCDON; P5SEL = 0xFC; BTCTL = BTSSEL + BT_ADLY_1000 + BTFRFQ1; BTCTL |= 0x10; P3DIR = 0xff; P5SEL = 0xfc; LCDCTL = LCDON + LCD4MUX + LCDP1; for(tmpv = 0;tmpv<7;tmpv++) { LCDMEM[tmpv] = 0x00; LCDMEM[7] = 0x02; } } void lcd_Display() { char tmpv; for(tmpv=0;tmpv LCDMEM[tmpv] = NUM_LCD[lcd_buf[tmpv]]; } } //设置小数点 void lcd_SetRP() { LCDMEM[2] |= 0x80; } //lcd初始化 void Adcvolt(void) //进行电压转换时ADC12的初始化 { ADC12CTL0&=~ENC; //ENC 为低电平,设置AD控制寄存器 ADC12CTL0|=ADC12ON+MSC; //打开ADC12,可以进行AD 转换,参考电压选3.3V ADC12CTL1=CSTARTADD_0+CONSEQ_1+SHP; //单通道单次转换,采样频率源自采样定时器 ADC12MCTL0=INCH_0; //选择模拟输入通道2 ADC12IE|=BIT0; //AD 转换中断允许 ADC12CTL0|=ENC; //转换允许 ADC12CTL0|=ADC12SC; //开始A/D 转换 } void main(void) { int ADC_BUF_Temp[40]; int i; // 关闭看门狗 WDTCTL = WDTPW + WDTHOLD; // 关闭中断 _DINT(); // 初始化 init_ADC(); init_TimerA(); TimerA(); format_Data(); ADC_Interrupt(); init_LCD(); lcd_SetRP(); Adcvolt(); // 打开中断 _EINT(); // 循环处理 for(;;) { if(nADC_Flag == 1) { nADC_Flag = 0; for(i = 0;i < 40;i++) { ADC_BUF_Temp[i] = ADC_BUF[i]; } } } } 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 如上代码只解决了电压采样并且显示的问题,而且里面还有很多错误,如下: Building configuration: sampling - Debug Updating build tree... main.c Error[Pe020]: identifier "ADC12CTL9" is undefined Error[Pe020]: identifier "TACTL" is undefined Error[Pe020]: identifier "TACCTL0" is undefined Error[Pe020]: identifier "TACCR0" is undefined Error[Pe147]: declaration is incompatible with "__cc_version2 void TimerA(void)" (declared at line 12) Error[Pe020]: identifier "result" is undefined Error[Pe020]: identifier "ADC" is undefined Error[Pe028]: expression must have a constant value74 Warning[Pe549]: variable "results" is used before its value is set IAR程序main.c 74 Error[Pe029]: expected an expression Error[Pe020]: identifier "i" is undefined Warning[Pe177]: variable "tmp" was declared but never referenced Error[Pe077]: this declaration has no storage class or type specifier Error[Pe020]: identifier "REFVOL" is undefined Error[Pe028]: expression must have a constant value Error[Pe169]: expected a declaration Warning[Pe606]: this pragma must immediately precede a declaration Warning[Pe012]: parsing restarts here after previous syntax error Error[Pe020]: identifier "LCD_IN_USE" is undefined Error[Pe020]: identifier "NUM_LCD" is undefined Error[Pe020]: identifier "lcd_buf" is undefined Error[Pa037]: function type not callable Warning[Pe550]: variable "ADC_BUF_Temp" was set but never used Error while running C/C++ compiler Total number of errors: 18 Total number of warnings: 5 ---------------------- 求全部程序,以及为什么这么多错误,.h文件怎么改啊?这么多未定义 |
|
相关推荐
4个回答
|
|
附上程序、电路仿真、原理
|
|
|
|
同问!!!!!!!!!!!!!!!!!!!!
|
|
|
|
我也来学习
|
|
|
|
完全照搬别人的程序有时会出现许多问题。
首先是开发环境,可能原来的开发者设置了许多库、函数等;以及对应的include文件,这些文件必许有,并且路径在工程项目中已经默认指定。 有上述条件,照搬代码才能成功。 查找错误的方法,就是先看是否头文件是否找不到——将默认路径在项目中声明 函数找不到可以在全项目中搜索,如果没有可能是少了include文件 函数错误需要具体情况具体分析。 试试吧 |
|
|
|
只有小组成员才能发言,加入小组>>
2633个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
1737 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2170 浏览 1 评论
4569 浏览 1 评论
2368 浏览 1 评论
1707 浏览 1 评论
714浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
1754浏览 2评论
938浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-25 00:46 , Processed in 0.970985 second(s), Total 51, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号