完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
其主程序代码如下: #include #include "LCD12864.h" int DegC; //待显示的温度值 unsigned int number=1000; //计数变量 long int AD_Result; //Ad的采样值 char m=0; int n=0; int i=0; long int ave; char Flag=0; unsigned char const tab[]={ "温度 'C" " " " " " " }; unsigned char const tab1[]={ "1 2 'C" "5 6 'C" "3 4 'C" "7 8 'C" }; void ConfigtimerA2(void) { CCTL0 = CCIE; // CCR0 interrupt enabled This bit enables the interrupt request of the corresponding CCIFG flag. CCR0 = number; // 时间间隔设置部分 TACTL = TASSEL_2 + MC_2+ID_0; // SMCLK, continuous mode,无分频 } void AD_Init(void) { ADC10CTL0 |= SREF_1+REFON+ADC10IE;//将AD10基准设置为1.5V 开启AD允许中断 ADC10CTL0 |= ADC10SHT_3+MSC;//打开AD转换,过采样率设置为64个采样周期 ADC10CTL1 |= ADC10SSEL_3+SHS_0;//选择250K的采样时钟,用ADC10SC触发采集 ADC10CTL1 |= CONSEQ_0+INCH_0;//连续采样模式, ADC10CTL0 |= ADC10ON; } void clk_init(void) //配置时钟 { BCSCTL1 |= CALBC1_1MHZ; DCOCTL |= CALDCO_1MHZ;//上面两句将内部DCO校准至1MHz //while(IFG1&OFIFG) { IFG1 &= ~OFIFG; delay_ms(100); } BCSCTL2 |= SELM_0;//MCLK采用1M的内部DCO BCSCTL2 |= DIVS_0;//SMCLK采用内部的时钟 } void IO_init(void) { P1DIR&=~(BIT0+BIT3+BIT4+BIT5); //按键P1.3,p1.4,p1.5 P1IES |=BIT3+BIT4+BIT5; //灯p1.6,P1.7,P2.7 P1IE |=BIT3+BIT4+BIT5; //允许中断 P1SEL &= ~(BIT1+BIT2); P1DIR |= BIT2+BIT1+BIT6+BIT7; //设置输出方向 P2DIR |=BIT7; P2OUT &=~BIT7; P1OUT &=~(BIT6+BIT7); } void main(void) //主函数部分 { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer clk_init(); IO_init(); lcd_init(); ConfigTimerA2(); AD_Init(); for(n=0;n<500;n++); chn_disp1(tab); _EINT(); while(1) { for(i=0;i<5000;i++); ADC10CTL0 |= ADC10SC+ENC; } } #pragma vector=ADC10_VECTOR //AD中断及其服务子程序 __interrupt void ADC10_ISR (void) { ADC10CTL0 &= ~ENC; // Disable ADC conversion ADC10CTL0 &= ~ADC10SC; m++; AD_Result+=ADC10MEM; if(m>=8) { m=0; ave=AD_Result>>3; AD_Result=0; DegC=((long int )ave*2300)/264-100; } } #pragma vector=TIMERA0_VECTOR //主计数器独占一个中断源 __interrupt void Timer_A (void) { Flag++; switch(Flag) { case 1:Write_Num(0x83,DegC,2); break; case 2:P1OUT|=BIT6; break; case 3: P1OUT&=~BIT6;Flag=0; break; } } #pragma vector= PORT1_VECTOR //IO口中断 __interrupt void PORT1_ISR (void) { unsigned char PushKey; PushKey=P1IFG&(BIT4+BIT5+BIT3); __delay_cycles(5000); if(P1IN&PushKey==PushKey) { P1IFG=0; return; } if(PushKey&BIT3) { P1OUT=BIT7; number=100+number; if ( number>=2000) { number=1000; } } if(PushKey&BIT4) { P1OUT&=~BIT7; } P1IFG=0; }
|
|
相关推荐
1个回答
|
|
找不到头文件,看看头文件是否放在工程目录下和头文件是否有错误。
|
|
|
|
只有小组成员才能发言,加入小组>>
3030个成员聚集在这个小组
加入小组2919 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3582 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2338 浏览 1 评论
4798 浏览 1 评论
2572 浏览 1 评论
1321浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3586浏览 2评论
2920浏览 1评论
1497浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 04:39 , Processed in 1.325628 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号