单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料文档格式.docx
- 文档编号:16967595
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:35.92KB
单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料文档格式.docx
《单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用第九讲MSP430单片机液晶控制器和ADC资料文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
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<
j++)
{
LCDMEM[j]=char_gen[i];
}
delay_ms(1000);
}
}
}
#include<
msp430f6638.h>
math.h>
#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;
360;
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=&
//Positiveramp
DAC12_0DAT&
=0xFFF;
//Modulo4096
#pragmavector=WDT_VECTOR
__interruptvoidwatchdog_timer(void)
__bic_SR_register_on_exit(CPUOFF);
//ClearLPM0bitsfrom0(SR)
intmain(void){
LCDMEM[0]=char_gen[3];
LCDMEM[1]=char_gen[0];
LCDMEM[2]=char_gen[0];
52;
i+=PI/26;
sin_table[j]=(int)((sin(i)+1)*2048);
sin_table[52])
#definecircnt1001388
#definecircnt200694
#definecircnt300462
#definecircnt400348
#definecircnt500278
#definecircnt600232
#definecircnt700198
#definecircnt800174
#definecircnt900154
#definecircnt1000138
intsin_table[180];
constintcnt_table[]={circnt100,circnt200,circnt300,circnt400,circnt500,circnt600,circnt700,circnt800,circnt900,circnt1000};
intcnt_flg=0;
voidSetVcoreUp(unsignedint);
//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;
P2OUT|=BIT7;
P2IES|=BIT7;
P2IFG&
=~BIT7;
P2IE|=BIT7;
//PP2.6interruptenabled*/
//---------enableLCD------------
LCDMEM[5]=char_gen[0];
LCDMEM[4]=char_gen[0];
LCDMEM[3]=char_gen[1];
//----------configsinelist------------
180;
i+=PI/90;
sin_table[j]=(int)((sin(i)+1)*2000);
//----------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
__bis_SR_register(CPUOFF+GIE);
DAC12_0DAT=*sin_data_pr++;
if(sin_data_pr>
sin_table[180])
sin_data_pr=&
DAC12_0DAT&
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)
//-------bottominterruption----------
#pragmavector=PORT2_VECTOR
__interruptvoidPort_2(void)
cnt_flg++;
if(cnt_flg>
=10)cnt_flg=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];
实验现象分析:
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系列单片机液晶驱动模块有哪些特点?
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)
实验中遇到的问题
无
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 第九 MSP430 液晶 控制器 ADC 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)