东南大学MSP430LCD+ADC实验报告Word格式.docx
《东南大学MSP430LCD+ADC实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《东南大学MSP430LCD+ADC实验报告Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
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"
g"
c+e+f+g,//Displays"
h"
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"
};
intsin_table[180];
int*sin_data_pr;
doublei=0;
intj;
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
//StopWDT
//8MHz
UCSCTL3=SELREF_2;
//SetDCOFLLreference=REFO
UCSCTL4|=SELA_2;
//SetACLK=REFO
UCSCTL0=0x0000;
//SetlowestpossibleDCOx,MODx
do{
UCSCTL7&
=~(XT2OFFG+XT1LFOFFG+DCOFFG);
//ClearXT2,XT1,DCOfaultflags
SFRIFG1&
=~OFIFG;
//Clearfaultflags
}while(SFRIFG1&
OFIFG);
//Testoscillatorfaultflag
__bis_SR_register(SCG0);
//DisabletheFLLcontrolloop
UCSCTL1=DCORSEL_6;
//SelectDCOrange16MHzoperation
UCSCTL2|=610;
//SetDCOMultiplierfor8MHz
//(N+1)*FLLRef=Fdco,(249+1)*32768=8MHz
__bic_SR_register(SCG0);
//EnabletheFLLcontrolloop
//Worst‐casesettlingtimefortheDCOwhentheDCOrangebitshavebeen
//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xxUGfor
//optimization,32x32x8MHz/32,768Hz=250000=MCLKcyclesforDCOtosettle
__delay_cycles(650000);
//timerA
TA0CCTL0=CCIE;
//CCR0interruptenabled
TA0CCR0=370;
TA0CTL=TASSEL_2+MC_1+TACLR;
//SMCLK,upmode,clearTAR
for(j=0;
j<
180;
j++)
{
i+=PI/90;
sin_table[j]=(int)((sin(i)+1)*2048);
}
sin_data_pr=&
sin_table[0];
DAC12_0CTL0=DAC12IR+DAC12SREF_0+DAC12AMP_5+
DAC12ENC+DAC12CALON+DAC12OPS;
P5DIR=BIT1;
//打开扬声器的运放
P5OUT&
=~BIT1;
//Lcdinitial
Init_TS3A5017DR();
//ConfigureTS3A5017DRIN1andIN2
Init_lcd();
LcdGo
(1);
//打开液晶模块
LCD_Clear();
LCDMEM[5]=char_gen[0];
LCDMEM[4]=char_gen[0];
LCDMEM[3]=char_gen[3];
for(;
;
)
__bis_SR_register(CPUOFF+GIE);
//EnterLPM0
DAC12_0DAT=*sin_data_pr++;
if(sin_data_pr>
=&
sin_table[180])
sin_data_pr=&
DAC12_0DAT&
=0xFFF;
//Modulo4096
}
#pragmavector=TIMER0_A0_VECTOR
__interruptvoidTIMER0_A0_ISR(void)
staticunsignedintch=0;
ch++;
if(ch>
=50000)//0.93s
ch=0;
__bic_SR_register_on_exit(CPUOFF);
//ClearLPM0bitsfrom0(SR)
//LCD初始化
voidInit_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:
关闭
****************************************************************/
voidLcdGo(unsignedchardoit)
if(doit==1)
//打开液晶显示
LCDBCTL0|=LCDON;
elseif(doit==0)
//关闭液晶显示
LCDBCTL0&
=~LCDON;
显示或者消隐显示内容
doit:
0:
消隐1:
显示
voidLcdBlink(unsignedchardoit)
if(doit==0)
=~LCDSON;
elseif(doit==1)
LCDBCTL0|=LCDSON;
voidLCD_Clear(void)//清屏
unsignedcharindex;
for(index=0;
index<
12;
index++)
LCDMEM[index]=0;
voidInit_TS3A5017DR(void)
P3DIR|=BIT4+BIT5;
//P3.4:
IN1;
P3.5:
IN2setasoutput
P3OUT&
=~BIT4;
//IN1=0
P3OUT|=BIT5;
//IN2=1
提高部分实验代码:
#defineuintunsignedint
#defineucharunsignedchar
#definePI3.1416
intsin_table[100];
uintfre_term_pr;
a+b+c+d+e+f,//Displays"
b+c,//Displays"
a+b+d+e+g,//Displays"
a+b+c+d+g,//Displays"
b+c+f+g,//Displays"
a+c+d+f+g,//Displays"
a+c+d+e+f+g,//Displays"
a+b+c,//Displays"
a+b+c+d+e+f+g,//Displays"
a+b+c+d+f+g,//Displays"
a+b+c+e+f+g,//Displays"
c+d+e+f+g,//Displays"
a+d+e+f,//Displays"
b+c+d+e+g,//Displays"
a+d+e+f+g,//Displays"
a+e+f+g,//Displays"
c+e+f+g,//Displays"
b+c+d,//Displays"
b+c+e+f+g,//Displays"
d+e+f,//Displays"
a+b+c+e+f,//Displays"
a+b+c+d+e+f+g+dp//Displays"
/*Privatefunctionprototypes-----------------------------------------------*/
//LCD初始化
voidLcdGo(unsignedcharDot);
//打开或关闭液晶
//显示或者消隐显示内容
//清屏
voidBacklight_Enable(void);
//打开背光
LCDBPCTL0=LCDS0+LCDS1+LCDS2+LCDS3+LCDS4+LCDS5+LCDS6+LCDS7+LCDS8+LCDS9+LCDS10+LCDS11;
voidLcdGo(unsignedcharDot)
if(Dot==1)
//打开液晶显示
LCDBCTL0|=LCDON;
elseif(Dot==0)
//关闭液晶显示
LCDBCTL0&
LCDBCTL0|=LCDSON;
voidLCD_Clear(void)//清屏
LCDMEM[index]=0;
voidInit_TS3A5017DR(void)
//P3.4:
IN1;
P3.5:
IN2setasoutput
voidBacklight_Enable(void)
P5DIR|=BIT7;
P5OUT&
=~BIT7;
uintfre_term[10]={977,488,326,244,195,163,140,122,109,98};
voidDAC_Init()//DAC初始化
DAC12_0CTL0|=DAC12CALON;
//启动校验
while((DAC12_0CTL0&
DAC12CALON)!
=0);
DAC12_0CTL0|=DAC12SREF_0+DAC12LSEL_0+DAC12IR+DAC12AMP_5+DAC12OPS;
DAC12_0DAT=0x0000;
voidClock_Init()//MCLK16MHZ,SMCLK16MHz
UCSCTL3|=SELREF_2;
UCSCTL5|=DIVS_1;
//SMCLK2fenpin
UCSCTL1=DCORSEL_5;
//SelectDCOrange24MHzoperation
UCSCTL2=FLLD_1+243;
//SetDCOMultiplierfor12MHz
//(N+1)*FLLRef=Fdco
//(243+1)*32768=8MHz
//SetFLLDiv=fDCOCLK/2=4MHz
__delay_cycles(375000);
//LoopuntilXT1,XT2&
DCOfaultflagiscleared
do
//
intmain(void){
WDTCTL=WDTPW|WDTHOLD;
//Stopwatchdogtimer
Clock_Init();
//TA0_Init();
TA0CCR0=fre_term[0];
TA0CCTL0|=CCIE;
TA0CTL|=TASSEL_2+MC_1+ID_0+TACLR;
//SMCLK=DCO
DAC_Init();
Backlight_Enable();
//打开液晶模块
LcdBlink
(1);
delay_ms(1000);
100;
i+=PI/50;
sin_table[j]=(int)((sin(i)+1)*2048);
LCDMEM[3]=char_gen[1];
LCDMEM[4]=char_gen[0];
LCDMEM[5]=char_gen[0];
//Port_Init();
P2IE|=BIT6+BIT7;
P2IFG&
=~(BIT6+BIT7);
P5DIR|=BIT1;
__bis_SR_register(GIE);
while
(1)
#pragmavector=PORT2_VECTOR
__interruptvoidPortISR(void)
switch(__even_in_range(P2IV,16))
case0:
break;
case2:
case4:
case6:
case8:
case10:
case12:
case14:
//p2.6
if(fre_term_pr<
9)
{
fre_term_pr++;
}
else
fre_term_pr=0;
TA0CCR0=fre_term[fre_term_pr];
if(fre_term_pr==9)
LCDMEM[2]=char_gen[1];
LCDMEM[3]=char_gen[0];
LCDMEM[3]=char_gen[fre_term_pr+1];
LCDMEM[2]=0;
P2IFG&
=~BIT6;
break;
case16:
//p2.7
if(fre_term_pr>
0)
{
fre_term_pr--;
}
else
fre_term_pr=9;
TA0CCR0=fre_term[fre_term_pr];
if(fre_term_pr==9)
{
LCDMEM[2]=char_gen[1];
LCDMEM[3]=char_gen[0];
}
else
LCDMEM[3]=char_gen[fre_term_pr+1];
LCDMEM[2]=0;
P2IFG&
=~BIT7;
b