单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx

上传人:b****3 文档编号:4051539 上传时间:2022-11-27 格式:DOCX 页数:13 大小:35.92KB
下载 相关 举报
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx_第1页
第1页 / 共13页
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx_第2页
第2页 / 共13页
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx_第3页
第3页 / 共13页
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx_第4页
第4页 / 共13页
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx

《单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx(13页珍藏版)》请在冰豆网上搜索。

单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料.docx

单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料

单片机原理及应用

第九讲MSP430单片机液晶控制器和ADC

报告人:

实验内容

实验一:

段码LCD循环显示0到6

实验二:

DAC输出正弦波

实验三:

基础:

使DAC0输出正弦波频率为300Hz,在LCD上显示频率。

提高:

用按键控制DAC0输出正弦波频率为在100Hz—1000Hz循环输出,步进值为100Hz,并在LCD上显示频率。

实验步骤

步骤:

(1)将PC和板载仿真器通过USB线相连;

(2)打开CCS集成开发工具,选择样例工程或自己新建一个工程,修改代码;

(3)选择

对该工程进行编译链接,生成.out文件。

然后选择

,将程序下载到实验板中。

程序下载完毕之后,可以选择

全速运行程序,也可以选择

单步调试程序,选择F3查看具体函数。

也可以程序下载之后,按下

,软件界面恢复到原编辑程序的画面。

再按下实验板的复位键,运

行程序。

(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议

上电运行程序)。

关键代码:

实验一:

intmain()

{

inti,j;

WDTCTL=WDTPW+WDTHOLD;//StopWDT

Init_TS3A5017DR();//ConfigureTS3A5017DRIN1andIN2

Init_lcd();//LCD初始化

Backlight_Enable();//打开背光

LcdGo

(1);//打开液晶模块

LCD_Clear();//清屏

while

(1)

{

for(i=0;i<6;i++)//Display"0123456"

{

for(j=0;j<6;j++)

{

LCDMEM[j]=char_gen[i];

}

delay_ms(1000);

}

}

}

实验二:

#include

#include

#definePI3.1415926

intsin_table[360];

int*sin_data_pr;

doublei=0;

intj;

voidmain(void)

{

WDTCTL=WDT_MDLY_0_064;//WDT~61usintervaltimer

SFRIE1=WDTIE;//EnableWDTinterrupt

for(j=0;j<360;j++)

{

i+=PI/180;

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;

for(;;)

{

__bis_SR_register(CPUOFF+GIE);//EnterLPM0

DAC12_0DAT=*sin_data_pr++;

if(sin_data_pr>=&sin_table[360])

{

sin_data_pr=&sin_table[0];

}

//Positiveramp

DAC12_0DAT&=0xFFF;//Modulo4096

}

}

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

{

__bic_SR_register_on_exit(CPUOFF);//ClearLPM0bitsfrom0(SR)

}

实验三:

基础:

intmain(void){

WDTCTL=WDT_MDLY_0_064;//WDT~61usintervaltimer

Init_TS3A5017DR();//ConfigureTS3A5017DRIN1andIN2

Init_lcd();//LCD初始化

Backlight_Enable();//打开背光

LcdGo

(1);//打开液晶模块

LCD_Clear();//清屏

LCDMEM[0]=char_gen[3];

LCDMEM[1]=char_gen[0];

LCDMEM[2]=char_gen[0];

SFRIE1=WDTIE;//EnableWDTinterrupt

for(j=0;j<52;j++)

{

i+=PI/26;

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;

for(;;)

{

__bis_SR_register(CPUOFF+GIE);//EnterLPM0

DAC12_0DAT=*sin_data_pr++;

if(sin_data_pr>=&sin_table[52])

{

sin_data_pr=&sin_table[0];

}

//Positiveramp

DAC12_0DAT&=0xFFF;//Modulo4096

}

}

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

{

__bic_SR_register_on_exit(CPUOFF);//ClearLPM0bitsfrom0(SR)

}

提高:

#definecircnt1001388

#definecircnt200694

#definecircnt300462

#definecircnt400348

#definecircnt500278

#definecircnt600232

#definecircnt700198

#definecircnt800174

#definecircnt900154

#definecircnt1000138

intsin_table[180];

int*sin_data_pr;

doublei=0;

intj;

constintcnt_table[]={circnt100,circnt200,circnt300,circnt400,circnt500,circnt600,circnt700,circnt800,circnt900,circnt1000};

intcnt_flg=0;

voidSetVcoreUp(unsignedint);

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//closewatchdog

//---------p2.6--------------

P2REN|=BIT6;//EnableP2.6internalresistance

P2OUT|=BIT6;//SetP2.6aspull‐Upresistance

P2IES|=BIT6;//P2.6Hi/Loedge

P2IFG&=~BIT6;//P2.6IFGcleared

P2IE|=BIT6;//PP2.6interruptenabled

/*P2REN|=BIT7;//EnableP2.6internalresistance

P2OUT|=BIT7;//SetP2.6aspull‐Upresistance

P2IES|=BIT7;//P2.6Hi/Loedge

P2IFG&=~BIT7;//P2.6IFGcleared

P2IE|=BIT7;//PP2.6interruptenabled*/

//---------enableLCD------------

Init_TS3A5017DR();//ConfigureTS3A5017DRIN1andIN2

Init_lcd();//LCD初始化

Backlight_Enable();//打开背光

LcdGo

(1);//打开液晶模块

LCD_Clear();//清屏

LCDMEM[5]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[3]=char_gen[1];

//----------configsinelist------------

for(j=0;j<180;j++)

{

i+=PI/90;

sin_table[j]=(int)((sin(i)+1)*2000);

}

sin_data_pr=&sin_table[0];

DAC12_0CTL0=DAC12IR+DAC12SREF_0+DAC12AMP_5+DAC12ENC+DAC12CALON+DAC12OPS;

//----------enableSMCLKas8MHz--------------

P4DIR|=BIT1;//P4.1output

P1DIR|=BIT0;//ACLKsetouttopins

P1SEL|=BIT0;

P3DIR|=BIT4;//SMCLKsetouttopins

P3SEL|=BIT4;

//IncreaseVcoresettingtolevel3tosupportfsystem=25MHz

//NOTE:

Changecorevoltageonelevelatatime..

SetVcoreUp(0x01);

SetVcoreUp(0x02);

SetVcoreUp(0x03);

UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO

UCSCTL4|=SELA_2;//SetACLK=REFO

__bis_SR_register(SCG0);//DisabletheFLLcontrolloop

UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx

UCSCTL1=DCORSEL_7;//SelectDCOrange50MHzoperation

UCSCTL2=FLLD_1+762;//SetDCOMultiplierfor25MHz

//(N+1)*FLLRef=Fdco

//(762+1)*32768=25MHz

//SetFLLDiv=fDCOCLK/2

__bic_SR_register(SCG0);//EnabletheFLLcontrolloop

//Worst‐casesettlingtimefortheDCOwhentheDCOrangebitshavebeen

//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xx

//UGforoptimization.

//32x32x25MHz/32,768Hz~780kMCLKcyclesforDCOtosettle

__delay_cycles(782000);

//LoopuntilXT1,XT2&DCOstabilizes‐InthiscaseonlyDCOhastostabilize

do

{

UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);

//ClearXT2,XT1,DCOfaultflags

SFRIFG1&=~OFIFG;//Clearfaultflags

}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag

//-----------enabletimerACCR0usSMCLK--------------

TA0CCTL0=CCIE;//CCR0interruptenabled

TA0CCR0=cnt_table[0];

TA0CTL=TASSEL_2+MC_1+TACLR;//useSMCLkassetting25MHz

for(;;)

{

__bis_SR_register(CPUOFF+GIE);//EnterLPM0

DAC12_0DAT=*sin_data_pr++;

if(sin_data_pr>=&sin_table[180])

{

sin_data_pr=&sin_table[0];

}

//Positiveramp

DAC12_0DAT&=0xFFF;//Modulo4096

}

}

voidSetVcoreUp(unsignedintlevel)

{

PMMCTL0_H=PMMPW_H;//OpenPMMregistersforwrite

//SetSVS/SVMhighsidenewlevel

SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;

//SetSVMlowsidetonewlevel

SVSMLCTL=SVSLE+SVMLE+SVSMLRRL0*level;

while((PMMIFG&SVSMLDLYIFG)==0);//WaittillSVMissettled

PMMIFG&=~(SVMLVLRIFG+SVMLIFG);//Clearalreadysetflags

PMMCTL0_L=PMMCOREV0*level;//SetVCoretonewlevel

if((PMMIFG&SVMLIFG))

while((PMMIFG&SVMLVLRIFG)==0);//Waittillnewlevelreached

//SetSVS/SVMlowsidetonewlevel

SVSMLCTL=SVSLE+SVSLRVL0*level+SVMLE+SVSMLRRL0*level;

//LockPMMregistersforwriteaccess

PMMCTL0_H=0x00;

}

//--------timerAinterruption---------

#pragmavector=TIMER0_A0_VECTOR

__interruptvoidTIMER0_A0_ISR(void)

{

__bic_SR_register_on_exit(CPUOFF);

}

//-------bottominterruption----------

#pragmavector=PORT2_VECTOR

__interruptvoidPort_2(void)

{

__bic_SR_register_on_exit(CPUOFF);

cnt_flg++;

if(cnt_flg>=10)cnt_flg=0;

LCD_Clear();//清屏

LCDMEM[5]=char_gen[0];

LCDMEM[4]=char_gen[0];

if(cnt_flg==9)

{

LCDMEM[3]=char_gen[0];

LCDMEM[2]=char_gen[1];

}

elseLCDMEM[3]=char_gen[cnt_flg+1];

TA0CCR0=cnt_table[cnt_flg];

P2IFG&=~BIT6;

__bis_SR_register(CPUOFF+GIE);

}

实验现象分析:

实验一:

LCD显示屏上循环显示0到6,每次显示都为6个相同的数字,现象对应的代码为:

实验二:

实验板上扬声器放出周期为64us*360=0.023s的正弦波信号。

实验三:

基础:

用示波器测量P7.6信号,测出信号频率为300HZ左右,LCD面板上显示为300。

提高:

按下按键,信号频率按要求改变,同时LCD也显示出信号频率对应值。

思考题

1、MSP430系列单片机液晶驱动模块有哪些驱动方法?

答:

4种驱动方法:

静态

2‐mux

3‐mux

4‐mux

2、MSP430系列单片机液晶驱动模块包括哪些功能结构?

答:

功能结构:

具有显示缓存器

所需的SEG、COM信号自动产生

多种扫描频率

每个闪烁段都有独立的闪烁存储器

稳压电荷泵

软件实现反向控制

显示缓存器可作为一般存储器

3、MSP430系列单片机液晶驱动模块显示缓存有什么特

点?

和普通的存储单元有什么不同?

答:

特点:

液晶显示缓存器各个位与液晶的段一一对应。

存储位置位则可以点亮对

应的液晶段,存储位复位液晶段变暗。

段、公共极输出控制能够自动从显示

缓存器读取数据,送出相应信号到液晶玻璃片上。

因为不同器件驱动液晶的

段数不同,所以液晶显示缓存器的数量也不一样。

数量越大,驱动能力越强

,显示的内容就越多。

不同:

显示缓存器可作为一般存储器,但一般存储单元存储位置位不可以点亮液晶段。

4、常见液晶显示的类型有哪些?

答:

段式液晶

字符式液晶

图形式液晶

5、MSP430系列单片机液晶驱动模块有哪些特点?

答:

具有显示缓存器

所需的SEG、COM信号自动产生

多种扫描频率

每个闪烁段都有独立的闪烁存储器

稳压电荷泵

软件实现反向控制

显示缓存器可作为一般存储器

4种驱动方法

静态

2‐mux

3‐mux

4‐mux

6、简述DAC的主要性能参数。

答:

分辨率(n):

DAC转换器使用的位数,D/A转换器模拟输出电压可能被分离

的等级数。

输入数字量位数越多,分辨率越高。

所以,在实际应用中,

常用数字量的位数表示D/A转换器的分辨率。

转换速度:

转换速率(SR)——在大信号工作状态下模拟电压

的变化率。

建立时间(tset)——当输入的数字量发生变化时,输出

电压变化到相应稳定电压值所需时间。

最短可达0.1μS。

单调性:

转换器的模拟输出值与数字输入值同增同减.

偏移误差:

当输入的数字量为0时,DAC输出的模拟量的大小。

温度系数:

在输入不变的情况下,输出模拟电压随温度变

化产生的变化量。

一般用满刻度输出条件下温度每升

高1℃,输出电压变化的百分数作为温度系数。

7、简述MSP430单片机DAC12模块的特点。

答:

12位单调输出

8位或12位电压输出分辨率

可编程的时间对能量的消耗

内部或外部参考电压

二进制或二进制补码形式

具有自校验功能

多路DAC同步更新

可直接用存储器存储(DMA)

实验中遇到的问题

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1