msp430f5529实验指导书(v10).doc

上传人:文库蛋蛋多 文档编号:2392092 上传时间:2023-02-17 格式:DOC 页数:50 大小:1.50MB
返回 下载 相关 举报
msp430f5529实验指导书(v10).doc_第1页
第1页 / 共50页
msp430f5529实验指导书(v10).doc_第2页
第2页 / 共50页
msp430f5529实验指导书(v10).doc_第3页
第3页 / 共50页
msp430f5529实验指导书(v10).doc_第4页
第4页 / 共50页
msp430f5529实验指导书(v10).doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《msp430f5529实验指导书(v10).doc》由会员分享,可在线阅读,更多相关《msp430f5529实验指导书(v10).doc(50页珍藏版)》请在三一办公上搜索。

1、MSP430F5529 实验指导书(V1.0)2014年10月27日东北林业大学机电工程学院“3+1”实验室实验一 基础GPIO实验实验二 键盘与液晶显示实验实验三 时钟系统配置实验实验四 看门狗与定时器实验实验五 AD/DA实验实验六 比较器实验实验七 Flash实验实验八 串行通信实验实验一 基础GPIO实验【实验目的】1、熟悉CCS的基本使用方法;2、掌握MSP430系列单片机程序开发的基本步骤;3、掌握MSP430 IO口的基本功能。【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境

2、。【实验原理】CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:图1-1 LED与MCU的IO对应关系电路我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。开发板上还有2个可操作的按键S

3、1,S2。如图1-2所示。图1-2 按键电路我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。此外,S1,S2还可以作为外部中断源,触发中断。【实验内容】1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;2、用按键S1控制开发板上LED1的亮灭状态(查询法);3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。【实验步骤】内容1:使能开发板上的8个LED灯依次按顺序循环点亮1、打开CCSv5并确定工作区间,然后选择File-New-CCS Project 弹出图1-3对话框。图1-3 新建一个CCS工程2、在 Project nam

4、e 中输入新建工程的名称,在此输入 lab1_1。3、在 Device 部分选择器件的型号:在此Family选择MSP430;Variant选择MSP430X5XX family,芯片选择MSP430F552;其余保持默认。4、在左下角对话框中,选择Empty Projects下拉菜单下的Empty Project(空工程),单击Finish。5、在新窗口中输入如下代码:#include void main(void)volatile unsigned int i;WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗P1DIR |= BIT0; /配置P1.0为输出功能P8DIR |=

5、BIT1 + BIT2; /配置P8.1,P8.2为输出功能P1DIR |= BIT1 + BIT2 + BIT3 +BIT4 +BIT5;while(1)P1OUT = BIT0;_delay_cycles(500000); /延时P1OUT &= BIT0;P8OUT = BIT1;_delay_cycles(500000); /延时P8OUT = BIT2;_delay_cycles(500000); /延时P8OUT &= BIT2;for(i=BIT1;i=BIT5; i=i1)P1OUT = i;_delay_cycles(500000); /延时6、保存程序后Bulid(单击菜单

6、中 ,或快捷键Ctrl+B)编译程序。7、调试程序(单击菜单中 )自动进入调试界面并下载程序。8、运行程序(单击菜单中 )进行程序的运行、暂停、停止、单步运行等操作。9、观察实验现象,回顾操作步骤。内容2:用按键S1控制开发板上LED1的亮灭状态(查询法)1、关闭上一个工程(在Project Explorer窗口,右键 Close Project)。2、建立新工程,步骤同上,并命名为lab1_2。3、在新建工程的编辑窗口输入如下代码:#include volatile unsigned int flag=0; /定义按键标志位void Keyscan(); /申明按键检测函数void main

7、(void)WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗P1DIR |= BIT0; /配置P1.0为输出功能P1OUT &= BIT0; /初始化禁止LED0亮/*按键初始化*/P1DIR &= BIT7;P1OUT |= BIT7;P1REN |= BIT7; /设置为内部上拉 while(1) Keyscan(); /按键检测 if(flag != 0) P1OUT |= BIT0; else P1OUT &= BIT0; void Keyscan() /按键检测函数 if(P1IN & BIT7) = 0) _delay_cycles(10000); /延时10ms if

8、(P1IN & BIT7) = 0) while(P1IN & BIT7) = 0);/等待按键抬起 flag = flag; /按键标志位取反 4、编译、调试并下载程序到开发板。5、运行程序,观察现象。内容3:用按键S2控制开发板上跑马灯的循环速度(中断方式)1、建立新工程,步骤同上,并命名为lab1_3。2、在新建工程的编辑窗口输入如下代码:#includeunsigned char flag = 0; /定义按键标志位void main()WDTCTL = WDTPW + WDTHOLD; / 关闭看门狗P1DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4

9、+ BIT5;P1OUT &= (BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5);P8DIR |= BIT1 + BIT2;P8OUT &= (BIT1 + BIT2); /初始化LED/*按键中断初始化*/P1DIR &= BIT7; /配置P1.7为按键输入P1OUT |= BIT7;P1REN |= BIT7; /设置为内部上拉P1IE |= BIT7; /P1.7中断使能P1IFG &= BIT7; /清除P1.7的中断标志位P1IES |= BIT7; /置1,设置为下降沿触发_enable_interrupt();while (1)P1OUT |=

10、 BIT0;P1OUT &= BIT5;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P8OUT |= BIT1;P1OUT &= BIT0;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P8OUT |= BIT2 ;P8OUT &= BIT1;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P1OUT |= BIT1;P8OUT &= BIT2;if(fla

11、g =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P1OUT |= BIT2;P1OUT &= BIT1;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P1OUT |= BIT3;P1OUT &= BIT2;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);P1OUT |= BIT4;P1OUT &= BIT3;if(flag =0)_delay_cycles(1000000)

12、;/闪烁else_delay_cycles(200000);P1OUT |= BIT5;P1OUT &= BIT4;if(flag =0)_delay_cycles(1000000);/闪烁else_delay_cycles(200000);#pragma vector = PORT1_VECTOR_interrupt void PORT_1(void)_delay_cycles(300);while(P1IE & BIT7) = 0); /等待按键释放if(flag=1)flag = 0;elseflag = 1;P1IFG &= BIT7; /清除中断标志3、编译、调试并下载程序到开发板。

13、4、运行程序,观察现象。【思考与分析】1、在实际应用当中,一般将未用的IO口设置为输出状态,为什么?试查阅资料加以研究。2、在用查询法检测按键时,为什么要连续检测两次并在此期间加上10ms左右的延时?3、试编写程序,用开发板上的两个按键及8个LED灯设计一个可控的跑马灯系统。其中,一个按键控制LED灯的流水速度(至少两种流水速度可调),另一个按键控制LED灯的流水方式(至少3种流水方式可调)。实验二 键盘与液晶显示实验【实验目的】1、学习键盘及液晶与MCU硬件电路的连接方法;2、掌握键盘控制芯片CH452的键盘检测方法;3、掌握TFT2.2真彩液晶屏的使用方法;4、了解SPI总线的通信模式和基

14、本特点。【实验仪器】1、MSP430G2553 Launch Pad一块,MSP430F5529 Mini Board 一块;2、TFT2.2_and_KEY键盘接口一块,TFT2.2液晶屏一块;3、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。【实验原理】1、液晶显示的基本原理 TFT-LCD(Thin Film Transistor-Liquid Crystal Display),即薄膜晶体管液晶显示器,也就是大家常说的真彩液晶显示屏。它可以“主动的”对屏幕上的各个独立的像素进行控制。显示屏由许多可以发出任意颜色的光线的像素组成,只要控制各个像素显示相

15、应的颜色就能显示我们想要的色彩斑斓的世界。本实验所使用的TFT2.2彩色液晶模块是一个2.2寸的TFT模块,内置TFT控制器,对外连接直接通过8位的SPI总线进行指令和数据的传输。TFT2.2有像素点数为240320,色彩深度为16位色,也就是每一个像素点需要用16位的数据来表示其显示内容。TFT2.2模块的显示操作非常简便,需要改变某一个像素点的颜色时,只需要对该点所对应的2个字节的显存进行操作即可。而为了便于索引操作,模块将所有的显存地址分为X轴地址(X Address)和Y轴地址(Y Address),分别可以寻址的范围为X Address=0239,Y Address=0319,X A

16、ddress和Y Address交叉对应着一个显存单元(2byte);这样只要索引到了某一个X、Y轴地址时,并对该地址的寄存器进行操作,便可对TFT-LCD显示器上对应的像素点进行操作了。TFT2.2模块的像素点与显存对应关系如下图所示:图2-1 显存与像素点对应关系示意图 液晶模块与单片机的连接方式见工程Lcd.c文件中。2、矩阵键盘检测的基本原理为了节省单片机的IO口,提高键盘检测的效率和准确性,本实验我们采用键盘控制芯片CH452进行键盘扫描。并采用4线串行接口与单片机交换数据,单片机可以频繁地通过串行接口进行高速操作,而绝对不会降低CH452的工作效率。在键盘扫描期间, DIG7DIG

17、0 引脚按照DIG0至DIG7的顺序依次输出高电平,其余7个引脚输出低电平;SEG7SEG0引脚的输出被禁止,当没有键被按下时, SEG7SEG0 都被下拉为低电平;当有键被按下时,例如连接 DI G3 与 SEG4 的键被按下,则当DIG3输出高电平时SEG4检测到高电平;为了防止因为按键抖动或者外界干扰而产生误码,CH452实行两次扫描,只有当两次键盘扫描的结果相同时,按键才会被确认有效。如果CH452检测到有效的按键,则记录下该按键代码,并通过4线串行接口中的DOUT引脚或者2线串行接口中的INT#引脚产生低电平有效的键盘中断(当INTM为1时输出低电平脉冲中断), 此时单片机可以通过串

18、行接口读取按键代码; 在没有检测到新的有效按键之前, CH452 不再产生任何键盘中断。CH452不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下;如果多个键同时按下,那么按键代码较小的按键优先。有关键盘检测的详细介绍请参考CH452芯片手册。【实验内容】1、练习液晶显示部分基本函数的使用,如:画点,画线,画矩形,显示数字、字符、字符串、显示汉字等;2、仔细研读键盘检测程序,当有按键按下时,将相应的按键编码显示在液晶屏的合适位置。如:按下KEY5,将在液晶显示屏上显示“The KEYCODE is KEY01”;3、自己另编写一个显示汉字的函数,显示你所想要的汉字大小,例如48*

19、48;4、自己另编写一个显示图片的函数,显示你所想要尺寸的真彩图片;【实验步骤】内容1:基本函数的使用1、打开CCSv5,选择“FileImport”命令,弹出如图2-2所示对话框,单击展开“Code Composer Studio”选项,选择“Existing CCS/CCE Eclipse Projects”。图2-2 导入新的CCSv5工程文件2、单击“Next”按钮,弹出图2-3所示对话框。图2-2 选择导入工程目录3、单击“Browse”按钮,选择工程文件目录Lcd_and_Key。单击“Finish”按钮,即可完成已有工程的导入。4、在此工程下练习一下函数的用法:/* LCD Ap

20、p */void LCD_GPIO(void);/LCD IO初始化void SPI_Init(void); /SPI初始化void LCD_Clear(uint16 Color); /清屏void LCD_CH(uint16 x,uint16 y,const uint8 index); /显示汉字void LCD_Fill(uint16 xsta,uint16 ysta,uint16 xend,uint16 yend,uint16 color); /颜色填充void LCD_DrawPoint(uint16 x,uint16 y); /画点void LCD_DrawPoint_big(uin

21、t16 x,uint16 y); /画一个大点void LCD_DrawLine(uint16 x1, uint16 y1, uint16 x2, uint16 y2); /画线void LCD_DrawRectangle(uint16 x1, uint16 y1, uint16 x2, uint16 y2); /画矩形void Draw_Circle(uint16 x0,uint16 y0,uint8 r); /画圆void LCD_ShowChar(uint16 x,uint16 y,uint8 num,uint8 mode); /显示一个字符void LCD_ShowNum(uint16

22、 x,uint16 y,uint32 num,uint8 len); /显示数字void LCD_Show2Num(uint16 x,uint16 y,uint16 num,uint8 len); /显示2个数字void LCD_ShowFloatNum(uint16 x,uint16 y,double num); /显示浮点数void LCD_ShowString(uint16 x,uint16 y,int8 *p);/显示字符串void LCD_ShowPicture();/显示图片内容2:按键检测并显示键值void main(void) WDTCTL = WDTPW | WDTHOLD;

23、 / 关闭开门狗 PLL_Init(); LCD_GPIO(); SPI_Init(); LCD_Init(); /TFT初始化/*基本刷屏测试*/LCD_Clear(RED);LCD_Clear(GREEN);LCD_Clear(YELLOW);/*清屏,并定义前景色和背景色*/LCD_Clear(RED); BACK_COLOR=BLACK; POINT_COLOR=WHITE; delayms(100); Keyscan(); /键盘扫描使能 _bis_SR_register(GIE);while(1)if(key_flag = 1) /按键标志位为1,有按键按下if(KEYCODE =

24、 1) /判断是否为KEY1按下KEYCODE = 0;LCD_ShowString(32,64,The KEYCODE is KEY01);if(KEYCODE = 2) /判断是否为KEY2按下KEYCODE = 0;LCD_ShowString(32,64,The KEYCODE is KEY02);key_flag = 0; /按键标志位清0 内容3:显示汉字1、用文字取模软件生成想要显示汉字的字模,并将字模数组写到font.c文件中,在font.h文件中加以声明;2、在lcd.c文件中改写汉字显示函数,并在lcd.h文件中加以声明;/*函 数 名:LCD_CH48_48功 能:在指定

25、位置显示一个汉字(48*48大小)入 口 参 数:dcolor内容颜色;gbcolor背景颜色返 回 值:无*/void LCD_CH48_48(uint16 x,uint16 y,const uint8 index)uint16 i,j; /为了防止溢出,i,j必须定义为16为的int型const uint8 *temp=hanzi48_48; Address_set(x,y,x+47,y+47); /设置区域temp+=index*288;/* 减法更高效 */for(j=288;j0;j-)for(i=8;i0;i-) if(*temp&(1239) wid=239; if(high31

26、9) high=319;Address_set(x,y,x+wid-1,y+high-1);/坐标设置for(i=area;i=0;i-) LCD_WR_DATA8(image(area-i)*2+1); /发送颜色数据 LCD_WR_DATA8(image(area-i)*2); 3、在main.c文件中调用汉字显示函数。【思考与分析】1、在液晶显示程序中能否使用MSP430单片机的低功耗模式?为什么?2、尝试在TFT2.2真彩液晶屏上编写一个含有两级以上的菜单程序,菜单风格自拟。实验三 时钟系统配置实验【实验目的】1、掌握MSP430的时钟系统结构与工作原理;2、了解MSP430系列单片机

27、几种时钟信号的基本用途;3、学会用FLL锁频环配置时钟;【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、TDS210双踪示波器一台;3、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。【实验原理】在MSP430单片机中,时钟系统的主要作用是为CPU工作提供时序,以及为不同的片内外设提供不同频率的时钟。1、5个时钟输入源(1)XT1CLK 低频或高频时钟源:可以使用标准晶振,振荡器或者外部时钟源输入4MHz32MHz。XT1CLK可以作为内部FLL模块的参考时钟。(2)XT2CLK 高频时钟源:可以使用标准晶振,振荡器或者外部时钟源输入

28、4MHz32MHz。(3)VLOCLK 低功耗低频内部时钟源:典型值为10KHZ。(4)REFOCLK 低频修整内部参考时钟源:典型值为32768Hz,作为FLL基准时钟源。(5)DCOCLK 片内数字控制时钟源:通过FLL模块来稳定。2、3个时钟信号(1)ACLK 辅助时钟:ACLK可由软件选择来自XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV、XT2CLK(由具体器件决定)这几个时钟源之一。然后经1、2、4、8、16、32分频得到。ACLK可由软件选作各个外设模块的时钟信号,一般用于低速外设模块。(2)MCLK 系统主时钟: MCLK可由软件选择来自上述5种时

29、钟源,同样可经过分频得到。MCLK主要用于CPU和系统。(3)SMCLK 子系统时钟:可由软件选择来自上述5种时钟源,同样可经过分频得到。 SMCLK可由软件选作各个外设模块的时钟信号,主要用于高速外设模块。通过软件配置,可以通过5个时钟输入源来产生特定频率的3个时钟信号供CPU和外设使用。3、MSP430F5xx/6xx系列单片机的时钟系统结构框图如图3-1所示。图3-1 MSP430F5xx/6xx系列单片机的时钟系统结构框图4、MSP430单片机的P1.0、P2.2、P7.7引脚的第二功能可以分别输出ACLK、SMCLK、MCLK,我们可以通过设置相应时钟信号从对应引脚输出,用示波器进行

30、观察。【实验内容】1、编写时钟配置程序,设置ACLK=XT1CLK =32768Hz,SMCLK=XT2CLK=4MHz,MCLK=DCO(默认)=32ACLK=1048576Hz,并将ACLK、SMCLK和MCLK分别通过P1.0、P2.2、P7.7口输出;2、通过FLL锁频环电路自动校正技术使内部DCO振荡器稳定地运行在2.45MHz。【实验步骤】内容1:配置并输出辅助时钟ACLK、子系统时钟SMCLK及主时钟MCLK1、建立新工程,并命名为lab3_1。2、在新建工程的编辑窗口输入如下代码:#include void main(void)WDTCTL = WDTPW + WDTHOLD;

31、 / Stop WDTP1DIR |= BIT0; / ACLK set out to pinsP1SEL |= BIT0;P2DIR |= BIT2; / SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7; / MCLK set out to pinsP7SEL |= BIT7;P7SEL |= BIT2+BIT3; / Port select XT2UCSCTL6 &= XT2OFF; / Set XT2 OnUCSCTL6 &= (XT1OFF); / XT1 OnUCSCTL6 |= XCAP_3; / Internal load cap

32、/ Loop until XT1 fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); / Test oscillator fault flag UCSCTL6 &= XT2DRIVE0; / Decrease XT2 Drive according to / expected frequency UCSCTL4 |= SELA_

33、0 + SELS_5; / Select SMCLK, ACLK source and DCO source while(1); / Loop in place 3、编译、调试并下载程序到开发板。4、运行程序,用示波器观察P1.0、P2.2、P7.7口的输出波形。内容2:通过FLL锁频环电路自动校正技术使内部DCO振荡器稳定地运行在2.45MHz。注意:相互关系式有:ACLK=XT1=32768Hz,MCLK=SMCLK=DCO=(74+1)*REFO=2457600Hz,这里XT1CLK被选为ACLK,REFO是内部调整过的32768Hz参考时钟,提供一个稳定的参考时钟用作FLLREFCLK

34、。1、建立新工程,步骤同上,并命名为lab3_2。2、在新建工程的编辑窗口输入如下代码:#include void main(void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTP1DIR |= BIT0; / ACLK set out to pinsP1SEL |= BIT0;P2DIR |= BIT2; / SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7; / MCLK set out to pinsP7SEL |= BIT7;UCSCTL6 &= (XT1OFF); / XT1 OnUCSCTL6 |= XC

35、AP_3; / Internal load cap/ Loop until XT1 fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); / Test oscillator fault flag / Initialize DCO to 2.45MHz _bis_SR_register(SCG0); / Disable the FL

36、L control loop UCSCTL0 = 0x0000; / Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_3; / Set RSELx for DCO = 4.9 MHz UCSCTL2 = FLLD_1 + 74; / Set DCO Multiplier for 2.45MHz / (N + 1) * FLLRef = Fdco / (74 + 1) * 32768 = 2.45MHz / Set FLL Div = fDCOCLK/2 _bic_SR_register(SCG0); / Enable the FLL contr

37、ol loop / UG for optimization. / 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle _delay_cycles(76563); / Loop until XT1,XT2 & DCO fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + 0x0004 + DCOFFG);/ Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); / Test oscillator fault flag while(1); / Loop in place3、编译、调试并下载程序到开发板。4、运行程序,用示波器观察P1.0、P2.2、P7.7口的输出波形。【思考与分析】1、在不做任何配置的情况下,MSP430F5529单片机的各个时钟的默认值是多少?试编程加以验证。2、试编写程序验证M

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号