东南大学MSP430LCD+ADC实验报告.doc_第1页
东南大学MSP430LCD+ADC实验报告.doc_第2页
东南大学MSP430LCD+ADC实验报告.doc_第3页
东南大学MSP430LCD+ADC实验报告.doc_第4页
东南大学MSP430LCD+ADC实验报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Msp430 LCD_B/ADC_12实验操作报告04011344 王晨一、 实验内容Lab17 基本:使DAC0输出正弦波频率为300Hz,在LCD上显示频率;提高:用按键控制DAC0输出正弦波频率为在100Hz1000Hz循环输出,步进值为100Hz,并在LCD上显示频率;基本部分实验代码:#include #include #define PI 3.1415926void Init_lcd(void); /lcd初始化void LcdGo(unsigned char doit); /打开或关闭液晶void LcdBlink(unsigned char doit); /显示或者消隐显示内容void LCD_Clear(void); /清屏void Init_TS3A5017DR(void); /Configure TS3A5017DR IN1 and IN2/delay#define CPU_F (double)1000000)#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)/ LCD segment definitions.#define d 0x01#define c 0x20#define b 0x40#define a 0x80#define dp 0x10#define g 0x04#define f 0x08#define e 0x02const char char_gen = / As used in 430 Day Watch Demo boarda+b+c+d+e+f, / Displays 0b+c, / Displays 1a+b+d+e+g, / Displays 2a+b+c+d+g, / Displays 3b+c+f+g, / Displays 4a+c+d+f+g, / Displays 5a+c+d+e+f+g, / Displays 6a+b+c, / Displays 7a+b+c+d+e+f+g, / Displays 8a+b+c+d+f+g, / Displays 9a+b+c+e+f+g, / Displays Ac+d+e+f+g, / Displays ba+d+e+f, / Displays cb+c+d+e+g, / Displays da+d+e+f+g, / Displays Ea+e+f+g, / Displays fa+b+c+d+f+g, / Displays gc+e+f+g, / Displays hb+c, / Displays ib+c+d, / Displays jb+c+e+f+g, / Displays kd+e+f, / Displays La+b+c+e+f, / Displays na+b+c+d+e+f+g+dp / Displays full;int sin_table180;int *sin_data_pr;double i=0;int j;void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT /8MHz UCSCTL3 = SELREF_2; / Set DCO FLL reference = REFO UCSCTL4 |= SELA_2; / Set ACLK = REFO UCSCTL0 = 0x0000; / Set lowest possible DCOx, MODx do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); / Test oscillator fault flag _bis_SR_register(SCG0); / Disable the FLL control loop UCSCTL1 = DCORSEL_6; / Select DCO range 16MHz operation UCSCTL2 |= 610; / Set DCO Multiplier for 8MHz / (N + 1) * FLLRef = Fdco, (249 + 1) * 32768 = 8MHz _bic_SR_register(SCG0); / Enable the FLL control loop / Worstcase settling time for the DCO when the DCO range bits have been / changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx UG for / optimization , 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle _delay_cycles(650000); /timerA TA0CCTL0 = CCIE; / CCR0 interrupt enabled TA0CCR0 = 370; TA0CTL = TASSEL_2 + MC_1 + TACLR; / SMCLK, up mode, clear TAR for(j=0;j= &sin_table180) sin_data_pr = &sin_table0; DAC12_0DAT &= 0xFFF; / Modulo 4096 #pragma vector=TIMER0_A0_VECTOR_interrupt void TIMER0_A0_ISR(void) static unsigned int ch=0; ch+; if(ch=50000)/0.93s LCDMEM5 = char_gen0; LCDMEM4 = char_gen0; LCDMEM3 = char_gen3; ch=0; _bic_SR_register_on_exit(CPUOFF); / Clear LPM0 bits from 0(SR)/LCD初始化void Init_lcd(void) LCDBCTL0 =LCDDIV0 + LCDPRE0 + LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ; LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5 + LCDS6+ LCDS7 + LCDS8 + LCDS9 + LCDS10 + LCDS11 ; P5SEL = 0xfc;/用作LCD驱动/*打开或关闭液晶1:打开 0:关闭*/void LcdGo(unsigned char doit)if(doit=1)/打开液晶显示 LCDBCTL0 |= LCDON;else if(doit=0)/关闭液晶显示 LCDBCTL0 &= LCDON;/*显示或者消隐显示内容doit:0:消隐 1:显示*/void LcdBlink(unsigned char doit) if(doit=0) LCDBCTL0 &= LCDSON; else if(doit=1) LCDBCTL0 |= LCDSON; void LCD_Clear(void)/清屏 unsigned char index; for (index=0; index12; index+) LCDMEMindex = 0; void Init_TS3A5017DR(void) P3DIR |= BIT4 + BIT5; /P3.4:IN1;P3.5:IN2 set as output P3OUT &= BIT4; /IN1 = 0 P3OUT |= BIT5; /IN2 = 1提高部分实验代码:#include #include #define uint unsigned int#define uchar unsigned char#define PI 3.1416#define d 0x01#define c 0x20#define b 0x40#define a 0x80#define dp 0x10#define g 0x04#define f 0x08#define e 0x02int sin_table100;int *sin_data_pr;uint fre_term_pr;int j;double i=0;#define CPU_F (double)1000000)#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)const char char_gen = / As used in 430 Day Watch Demo board a+b+c+d+e+f, / Displays 0 b+c, / Displays 1 a+b+d+e+g, / Displays 2 a+b+c+d+g, / Displays 3 b+c+f+g, / Displays 4 a+c+d+f+g, / Displays 5 a+c+d+e+f+g, / Displays 6 a+b+c, / Displays 7 a+b+c+d+e+f+g, / Displays 8 a+b+c+d+f+g, / Displays 9 a+b+c+e+f+g, / Displays A c+d+e+f+g, / Displays b a+d+e+f, / Displays c b+c+d+e+g, / Displays d a+d+e+f+g, / Displays E a+e+f+g, / Displays f a+b+c+d+f+g, / Displays g c+e+f+g, / Displays h b+c, / Displays i b+c+d, / Displays j b+c+e+f+g, / Displays k d+e+f, / Displays L a+b+c+e+f, / Displays n a+b+c+d+e+f+g+dp / Displays full;/* Private function prototypes -*/void Init_lcd(void); / LCD初始化void LcdGo(unsigned char Dot); / 打开或关闭液晶void LcdBlink(unsigned char doit); / 显示或者消隐显示内容void LCD_Clear(void); / 清屏void Init_TS3A5017DR(void); / Configure TS3A5017DR IN1 and IN2void Backlight_Enable(void); / 打开背光void Init_lcd(void)LCDBCTL0 =LCDDIV0 + LCDPRE0 + LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ; LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5+LCDS6+LCDS7+LCDS8+LCDS9+LCDS10+LCDS11; P5SEL = 0xfc;void LcdGo(unsigned char Dot)if(Dot=1)/打开液晶显示LCDBCTL0 |= LCDON;else if(Dot=0)/关闭液晶显示LCDBCTL0 &= LCDON;void LcdBlink(unsigned char doit)if(doit=0)LCDBCTL0 &= LCDSON;else if(doit=1)LCDBCTL0 |= LCDSON;void LCD_Clear(void)/清屏 unsigned char index; for (index=0; index12; index+) LCDMEMindex = 0; void Init_TS3A5017DR(void) / Configure TS3A5017DR IN1 and IN2 P3DIR |= BIT4 + BIT5; /P3.4 : IN1 ; P3.5 : IN2 set as output P3OUT &= BIT4; /IN1 = 0 P3OUT |= BIT5; /IN2 = 1void Backlight_Enable(void) P5DIR |= BIT7; P5OUT &= BIT7;uint fre_term10=977,488,326,244,195,163,140,122,109,98;void DAC_Init() /DAC初始化 DAC12_0CTL0|=DAC12CALON; /启动校验 while(DAC12_0CTL0 & DAC12CALON)!=0); DAC12_0CTL0|=DAC12SREF_0+DAC12LSEL_0+DAC12IR+DAC12AMP_5+DAC12OPS; DAC12_0DAT=0x0000;void Clock_Init() /MCLK 16MHZ ,SMCLK 16MHz UCSCTL3 |= SELREF_2; / Set DCO FLL reference = REFO UCSCTL4 |= SELA_2; / Set ACLK = REFO UCSCTL5 |=DIVS_1; /SMCLK 2fenpin _bis_SR_register(SCG0); / Disable the FLL control loop UCSCTL0 = 0x0000; / Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_5; / Select DCO range 24MHz operation UCSCTL2 = FLLD_1 + 243; / Set DCO Multiplier for 12MHz / (N + 1) * FLLRef = Fdco / (243 + 1) * 32768 = 8MHz / Set FLL Div = fDCOCLK/2=4MHz _bic_SR_register(SCG0); / Enable the FLL control loop _delay_cycles(375000); / Loop until XT1,XT2 & DCO fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); /int main(void) WDTCTL = WDTPW | WDTHOLD;/ Stop watchdog timer Init_TS3A5017DR(); / Configure TS3A5017DR IN1 and IN2 Init_lcd(); / LCD初始化 Clock_Init(); /TA0_Init(); TA0CCR0=fre_term0; TA0CCTL0|=CCIE; TA0CTL|=TASSEL_2+MC_1+ID_0+TACLR;/SMCLK=DCO DAC_Init(); Backlight_Enable(); / 打开背光 LcdGo(1); / 打开液晶模块 LCD_Clear(); / 清屏 LcdBlink(1); delay_ms(1000); for(j=0;j100;j+) i+=PI/50; sin_tablej=(int)(sin(i)+1)*2048); LCDMEM3 = char_gen1; delay_ms(1000); LCDMEM4=char_gen0; delay_ms(1000); LCDMEM5=char_gen0; delay_ms(1000); /Port_Init(); P2IE|=BIT6+BIT7; P2IFG&=(BIT6+BIT7); P5DIR|=BIT1;/打开扬声器的运放 P5OUT&=BIT1; _bis_SR_register(GIE); while(1) #pragma vector=PORT2_VECTOR_interrupt void PortISR(void)switch(_even_in_range(P2IV,16) case 0:break;case 2:break;case 4:break;case 6:break;case 8:break;case 10:break;case 12:break;case 14: /p2.6if(fre_term_pr0)fre_term_pr-;elsefre_term_pr=9;TA0CCR0=fre_termfre_term_pr;if(fre_term_pr=9) LCDMEM2 = char_gen1; LCDMEM3 = char_gen0;else LCDMEM3 = char_genfre_term_pr+1; LCDMEM2 = 0;P2IFG&=BIT7;break; #pragma vector=TIMER0_A0_VECTOR_interrupt void TIMER0_A0_ISR(void) DAC12_0DAT=*sin_data_pr+; if (sin_data_pr = &sin_table100) sin_data_pr = &sin_table0; DAC12_0DAT &= 0xFFF; / Modulo 4096 /_bic_SR_register_on_exit(CPUOFF); / Clear LPM0 bits from 0(SR)实验现象:可以实现频率的加减切换,频率值为100Hz至1kHz,必进1为100Hz。同时通过扬声器输出。Lab20 温度采集与显示把Lab19实验中的实测温度值以摄氏度数值显示在段码LCD上。实验代码如下:#include #define CPU_F (double)1000000)#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)/ LCD segment definitions.#define d 0x01#define c 0x20#define b 0x40#define a 0x80#define dp 0x10#define g 0x04#define f 0x08#define e 0x02#define CALADC12_15V_30C *(unsigned int *)0x1A1A) / Temperature Sensor Calibration-30 C /See device datasheet for TLV table memory mapping#define CALADC12_15V_85C *(unsigned int *)0x1A1C) / Temperature Sensor Calibration-85 C/* Private macro -*/* Private variables -*/const char char_gen = / As used in 430 Day Watch Demo board a+b+c+d+e+f, / Displays 0 b+c, / Displays 1 a+b+d+e+g, / Displays 2 a+b+c+d+g, / Displays 3 b+c+f+g, / Displays 4 a+c+d+f+g, / Displays 5 a+c+d+e+f+g, / Displays 6 a+b+c, / Displays 7 a+b+c+d+e+f+g, / Displays 8 a+b+c+d+f+g, / Displays 9 dp, / Displays . a+b+c+e+f+g, / Displays A c+d+e+f+g, / Displays b a+d+e+f, / Displays c b+c+d+e+g, / Displays d a+d+e+f+g, / Displays E a+e+f+g, / Displays f a+b+c+d+f+g, / Displays g c+e+f+g, / Displays h b+c, / Displays i b+c+d, / Displays j b+c+e+f+g, / Displays k d+e+f, / Displays L a+b+c+e+f, / Displays n a+b+c+d+e+f+g+dp / Displays full;/int qian,bai,shi,ge,dot1,dot2;int shi,ge,dot1,dot2;unsigned int temp;volatile float temperatureDegC;char answer;/volatile float temperatureDegF;/* Private function prototypes -*/void Init_lcd(void); / LCD初始化void LcdGo(unsigned char Dot); / 打开或关闭液晶void LcdBlink(unsigned char doit); / 显示或者消隐显示内容void LCD_Clear(void); / 清屏void Init_TS3A5017DR(void); / Configure TS3A5017DR IN1 and IN2void Backlight_Enable(void); / 打开背光/* Private functions -*/void Init_lcd(void) LCDBCTL0 =LCDDIV0 + LCDPRE0 + LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ; LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5 + LCDS6+ LCDS7 + LCDS8 + LCDS9 + LCDS10 + LCDS11 ; P5SEL = 0xfc;void LcdGo(unsigned char Dot)if(Dot=1)/打开液晶显示LCDBCTL0 |= LCDON;else if(Dot=0)/关闭液晶显示LCDBCTL0 &= LCDON;void LcdBlink(unsigned char doit)if(doit=0)LCDBCTL0 &= LCDSON;else if(doit=1)LCDBCTL0 |= LCDSON;void LCD_Clear(void)/清屏 unsigned char index; for (index=0; index12; index+) LCDMEMindex = 0; void Init_TS3A5017DR(void) / Configure TS3A5017DR IN1 and IN2 P3DIR |= BIT4 + BIT5; /P3.4 : IN1 ; P3.5 : IN2 set as output P3OUT &= BIT4; /IN1 = 0 P3OUT |= BIT5; /IN2 = 1void Backlight_Enable(void) P5DIR |= BIT7; P5OUT &= BIT7;void change (float tem) /temperatureDegF/qian=(int)tem/1000;/千/bai=(int)tem%1000/100;/百shi=(int)(tem)%100/10; /十ge=(int)tem%10;/个dot1=(int)(tem*10)%10;dot2=(int)(tem*100)%100;char display(int mm)if(mm=0) answer=char_gen0;else if(mm=1) answer=char_gen1;else if(mm=2) answer=char_gen2;else if(mm=3) answer=char_gen3;else if(mm=4) answer=char_gen4;else if(mm=5) answer=char_gen5;else if(mm=6) answer=char_gen6;else if(mm=7) answer=char_gen7;else if(mm=8) answer=char_gen8;else answer=char_gen9;return answer;int main() WDTCTL = WDTPW + WDTHOLD;/ Stop WDT Init_TS3A5017DR(); / Configure TS3A5017DR IN1 and IN2 Init_lcd(); / LCD初始化 Backlight_Enable(); / 打开背光 LcdGo(1); / 打开液晶模块 LCD_Clear(); / 清屏 REFCTL0 &= REFMSTR; / Reset REFMSTR to hand over control to / ADC12_A ref control registers ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON; / Internal ref = 1.5V ADC12CTL1 = ADC12SHP; / enable sample timer ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; / ADC i/p ch A10 = temp sense i/p ADC12IE = 0x001; / ADC_IFG upon conv result-ADCMEMO _delay_cycles(100); / Allow 100us (at default UCS settings) / for REF to settle ADC12CTL0 |= ADC12ENC; while(1) ADC12CTL0 &= ADC12SC; ADC12CTL0 |= ADC12SC; / Sampling and conversion start / Temperature in Celsius. See the Device Descriptor Table section in the / System Res

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论