完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
特别是adc的初始化和一般的不一样我改成常见的之后数码管没显示
求指导谢谢 #include #include "Config.h" uint temp,A1,A2,A3,count,temp_x; uchar Temp_Value[4]; uint data[16]; uchar static table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar static a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//输出位选择 void Port_Init()//MSP430 初始化 IO口 { P4SEL = 0x00; P6SEL = 0x00; P4DIR = 0xFF; P6DIR |= BIT3 + BIT4; //设置IO口方向为输出,控制口在P63,P64 } void Display() //数码管显示 { uchar i,tt; for(i=0;i<8;i++) { tt=table[Temp_Value[i]]; if(i==1) { tt=table[Temp_Value[i]]+0x80;// 点亮小数点 } DCTR1; //段高 WCTR1; //位高 P4OUT=a[i]; //输出 WCTR0; //位低 P4OUT=tt; //显示值 DCTR0; delay_ms(3); } } void Voltage_do(uint temp_d) //电压处理函数 { ulong temp_3; temp_3=(ulong)(temp_d)*250; //转换公式,ADC数字量转换为电压大小,注意数据类型 temp_x=temp_3/4095; //12位精度,除以4095 Temp_Value[0]=temp_x/1000; //拆分成单个的数值 Temp_Value[1]=temp_x/100%10; Temp_Value[2]=temp_x/10%10; Temp_Value[3]=temp_x%10; Temp_Value[4]=5; Temp_Value[5]=0; Temp_Value[6]=4; Temp_Value[7]=2; } void int_adc() //ADC 初始化 { ADC12CTL0&=~ENC; //复位,开始对ADC12CTL0,ADC12CTL1设置 P6SEL|=0x01; ADC12CTL0 = ADC12ON + MSC + SHT0_2 + REF2_5V + REFON; //ADC模块控制位 + 多从采样转换位(SHI)+ 内部参考电压 + 内部参考电压控制位 ADC12CTL1 = SHP + CONSEQ_2; //SMCLK做时钟源+ 单 通道 多 次转换 ADC12MCTL0 = 0X10; ADC12IE = 0x01; //使能 ADC 中断 ADC12CTL0|= ENC; //使能 ADC 转换 } /* 中断程序*/ #pragma vector = ADC_VECTOR __interrupt void ADC12ISR(void) { uchar i; ulong s=0; data[count] = ADC12MEM0; //读取ADC转换值 count++; if(16==count) { count=0; for(i=0;i<16;i++) s=s+data[i]; //采集到的结果求和 temp=s>>4; //右移除以2^4=16 即求平均值 Voltage_do(temp); //进入电压处理函数 } Display();//显示 } void main(void) { WDT_Init(); Clock_Init(); Port_Init(); int_adc(); _EINT(); ADC12CTL0 |= ADC12SC; while(1); } |
|
相关推荐
1个回答
|
|
头文件如下
#define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define DCTR0 P6OUT &= ~BIT4 #define DCTR1 P6OUT |= BIT4 #define WCTR0 P6OUT &= ~BIT3 #define WCTR1 P6OUT |= BIT3 //#define SING0 P6OUT &= ~BIT2 //#define SING1 P6OUT |= BIT2 // 系统时钟初始化 void Clock_Init() { uchar i; BCSCTL1&=~XT2OFF; BCSCTL2|=SELM1+SELS; do{ IFG1&=~OFIFG; for(i=0;i<100;i++) _NOP(); } while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待 IFG1&=~OFIFG; } // MSP430内部看门狗初始化 void WDT_Init() { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 } |
|
|
|
只有小组成员才能发言,加入小组>>
2632个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
1710 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2170 浏览 1 评论
4568 浏览 1 评论
2368 浏览 1 评论
1707 浏览 1 评论
706浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
1723浏览 2评论
930浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-23 22:32 , Processed in 0.955908 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号