do{
ADC10CTL0 |= ENC+ADC10SC;
while((ADC10CTL0 &ADC10IFG)==0); adc_sample = ADC10MEM; if(adc_max adc_max = adc_sample; } }while(0==flag1); adc_max = adc_max*(3300/1023); //while(0==flag1); flag2=0; /* //筛选 for(int i=0;i<200;i++) { if(adc_sample[i]>adc_max) { adc_max=adc_sample[i]; } } */ //显示幅值 for(int i=0;i<5;i++) { temp = adc_max/(10000/(unsigned int)(pow(10,i))); LCDBuf1[i] = temp + '0'; adc_max = adc_max%(10000/(unsigned int)(pow(10,i))); } LCDBuf1[5] = 0; LCD_Disp_string(0,1,LCDBuf1); LCD_Disp_string(5,1,LCDBuf3); adc_max = 0; } } // Timer A1 interrupt service routine #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1_A (void) { if(0==flag2) { TA0CTL = 0; TA1CTL = 0; TA1CTL |= TACLR; FRE=TA0R; flag1=1; TA0CTL = TASSEL_0 + MC_0; TA1CTL = TASSEL_1 + MC_0; //TA0CTL |= TACLR; //TA0CTL = TASSEL_0 + MC_1; //TA1CTL = TASSEL_1 + MC_1 + TAIE; //测了一次还没开 } else { TA1CTL = TASSEL_1 + MC_0; flag1=1; } } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR (void) { flag1=1; ADC10CTL0 &= ~ENC; } lcd头文件 //#include \ #define SET_LCD_1602_E P2OUT |= 0x04 #define CLR_LCD_1602_E P2OUT &= ~0x04 #define SET_LCD_1602_RS P2OUT |= 0x01 #define CLR_LCD_1602_RS P2OUT &= ~0x01 #define SET_LCD_1602_RW P2OUT |= 0x02 #define CLR_LCD_1602_RW P2OUT &= ~0x02 #define LCD_IO_OUT P1OUT #define LCD_IO_DIR P1DIR #define LCD_IO_IN P1IN #define LCD_IO_SEL P1SEL #define uchar unsigned char //P2.2 //P2.0 //P2.1 #define uint unsigned int void IO_Init(void); void LCD_Init(void); void LCD_Check_busy(void); //检测LCD是否在忙,即能否接收数据和指令 void LCD_Write_Command(uchar command); void LCD_Write_Data(uchar dat); void LCD_Set_xy( uchar x, uchar y ); uchar LCD_Read_Sta(void); uchar LCD_Read_Data(uchar x,uchar y); void User_def_char(uchar n,uchar *s); //输入用户自定义字符(5*8点阵字符),0~7共8个字符 void LCD_Disp_char(uchar x,uchar y,uchar dat); void LCD_Disp_string(uchar x,uchar y,uchar *s); uchar large=0; //当large为1时,为5*8点阵;为0时,为5*10点阵 void IO_Init(void) { LCD_IO_SEL &=~ 0xF0; //LCD_IO_DIR |= 0x07 ; P2DIR |= 0x07; P2SEL &=~ 0x07; } void LCD_Init(void) { LCD_Write_Command(0x28); LCD_Write_Command(0x0F); LCD_Write_Command(0x06); LCD_Write_Command(0x01); } void LCD_Check_busy(void) { uchar flag=0x80; flag &= LCD_Read_Sta(); while(flag == 0x80) { __delay_cycles(100); flag &= LCD_Read_Sta(); } } void LCD_Write_Command(uchar command) { LCD_Check_busy(); CLR_LCD_1602_RS; CLR_LCD_1602_RW; CLR_LCD_1602_E; uchar temp; temp = command & (0x3C); if((temp==(0x26))||(temp==(0x2C))||(temp==(0x36))||(temp==(0x3C))) large = 0; //为5*10点阵 else large = 1; LCD_IO_DIR |= 0xF0; LCD_IO_OUT = (command&(0XF0))+(LCD_IO_OUT&(0x0F)); SET_LCD_1602_E; CLR_LCD_1602_E; command <<= 4; LCD_IO_OUT = (command&(0XF0))+(LCD_IO_OUT&(0x0F)); SET_LCD_1602_E; CLR_LCD_1602_E; } void LCD_Write_Data(uchar dat) { LCD_Check_busy(); SET_LCD_1602_RS; CLR_LCD_1602_RW; CLR_LCD_1602_E; LCD_IO_DIR |= 0xF0; LCD_IO_OUT = (dat&(0XF0))+(LCD_IO_OUT&(0x0F)); SET_LCD_1602_E; CLR_LCD_1602_E; dat <<= 4; LCD_IO_OUT = (dat&(0XF0))+(LCD_IO_OUT&(0x0F)); SET_LCD_1602_E; CLR_LCD_1602_E; } void LCD_Set_xy(uchar x,uchar y) { uchar address; if (y == 0)
相关推荐: