MSP430F5529实验指导书V10.docx
- 文档编号:3783597
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:71
- 大小:981.77KB
MSP430F5529实验指导书V10.docx
《MSP430F5529实验指导书V10.docx》由会员分享,可在线阅读,更多相关《MSP430F5529实验指导书V10.docx(71页珍藏版)》请在冰点文库上搜索。
MSP430F5529实验指导书V10
MSP430F5529实验指导书(V1.0)
MSP430F5529实验指导书
(V1.0)
2014年10月27日
东北林业大学机电工程学院“3+1”实验室
实验一基础GPIO实验
实验二键盘与液晶显示实验
实验三时钟系统配置实验
实验四看门狗与定时器实验
实验五AD/DA实验
实验六比较器实验
实验七Flash实验
实验八串行通信实验
实验一基础GPIO实验
【实验目的】
1、熟悉CCS的基本使用方法;
2、掌握MSP430系列单片机程序开发的基本步骤;
3、掌握MSP430IO口的基本功能。
【实验仪器】
1、SEED-EXP430F5529v1.0开发板一套;
2、PC机操作系统WindowsXP或Windows7,CCSv5.1集成开发环境。
【实验原理】
CCS(CodeComposerStudio)是TI公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。
CCSv5.1为CCS软件的最新版本,功能更强大、性能更稳定、可用性更高,是MSP430软件开发的理想工具。
SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:
图1-1LED与MCU的IO对应关系电路
我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。
开发板上还有2个可操作的按键S1,S2。
如图1-2所示。
图1-2按键电路
我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。
此外,S1,S2还可以作为外部中断源,触发中断。
【实验内容】
1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;
2、用按键S1控制开发板上LED1的亮灭状态(查询法);
3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。
【实验步骤】
内容1:
使能开发板上的8个LED灯依次按顺序循环点亮
1、打开CCSv5并确定工作区间,然后选择File-->New-->CCSProject弹出图1-3对话框。
图1-3新建一个CCS工程
2、在Projectname中输入新建工程的名称,在此输入lab1_1。
3、在Device部分选择器件的型号:
在此Family选择MSP430;Variant选择MSP430X5XXfamily,芯片选择MSP430F552;其余保持默认。
4、在左下角对话框中,选择EmptyProjects下拉菜单下的EmptyProject(空工程),单击Finish。
5、在新窗口中输入如下代码:
#include
voidmain(void)
{
volatileunsignedinti;
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P1DIR|=BIT0;//配置P1.0为输出功能
P8DIR|=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=i<<1)
{
P1OUT=i;
__delay_cycles(500000);//延时
}
}
}
6、保存程序后Bulid(单击菜单中
,或快捷键Ctrl+B)编译程序。
7、调试程序(单击菜单中
)自动进入调试界面并下载程序。
8、运行程序(单击菜单中
)进行程序的运行、暂停、停止、单步运行等操作。
9、观察实验现象,回顾操作步骤。
内容2:
用按键S1控制开发板上LED1的亮灭状态(查询法)
1、关闭上一个工程(在ProjectExplorer窗口,右键CloseProject)。
2、建立新工程,步骤同上,并命名为lab1_2。
3、在新建工程的编辑窗口输入如下代码:
#include
volatileunsignedintflag=0;//定义按键标志位
voidKeyscan();//申明按键检测函数
voidmain(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;
}
}
voidKeyscan()//按键检测函数
{
if((P1IN&BIT7)==0)
{
__delay_cycles(10000);//延时10ms
if((P1IN&BIT7)==0)
{
while((P1IN&BIT7)==0);//等待按键抬起
flag=~flag;//按键标志位取反
}
}
}
4、编译、调试并下载程序到开发板。
5、运行程序,观察现象。
内容3:
用按键S2控制开发板上跑马灯的循环速度(中断方式)
1、建立新工程,步骤同上,并命名为lab1_3。
2、在新建工程的编辑窗口输入如下代码:
#include
unsignedcharflag=0;//定义按键标志位
voidmain()
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+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|=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(flag==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);//闪烁
else
__delay_cycles(200000);
P1OUT|=BIT5;
P1OUT&=~BIT4;
if(flag==0)
__delay_cycles(1000000);//闪烁
else
__delay_cycles(200000);
}
}
#pragmavector=PORT1_VECTOR
__interruptvoidPORT_1(void)
{
__delay_cycles(300);
while((P1IE&BIT7)==0);//等待按键释放
if(flag==1)
flag=0;
else
flag=1;
P1IFG&=~BIT7;//清除中断标志
}
3、编译、调试并下载程序到开发板。
4、运行程序,观察现象。
【思考与分析】
1、在实际应用当中,一般将未用的IO口设置为输出状态,为什么?
试查阅资料加以研究。
2、在用查询法检测按键时,为什么要连续检测两次并在此期间加上10ms左右的延时?
3、试编写程序,用开发板上的两个按键及8个LED灯设计一个可控的跑马灯系统。
其中,一个按键控制LED灯的流水速度(至少两种流水速度可调),另一个按键控制LED灯的流水方式(至少3种流水方式可调)。
实验二键盘与液晶显示实验
【实验目的】
1、学习键盘及液晶与MCU硬件电路的连接方法;
2、掌握键盘控制芯片CH452的键盘检测方法;
3、掌握TFT2.2真彩液晶屏的使用方法;
4、了解SPI总线的通信模式和基本特点。
【实验仪器】
1、MSP430G2553LaunchPad一块,MSP430F5529MiniBoard一块;
2、TFT2.2_and_KEY键盘接口一块,TFT2.2液晶屏一块;
3、PC机操作系统WindowsXP或Windows7,CCSv5.1集成开发环境。
【实验原理】
1、液晶显示的基本原理
TFT-LCD(ThinFilmTransistor-LiquidCrystalDisplay),即薄膜晶体管液晶显示器,也就是大家常说的真彩液晶显示屏。
它可以“主动的”对屏幕上的各个独立的像素进行控制。
显示屏由许多可以发出任意颜色的光线的像素组成,只要控制各个像素显示相应的颜色就能显示我们想要的色彩斑斓的世界。
本实验所使用的TFT2.2彩色液晶模块是一个2.2寸的TFT模块,内置TFT控制器,对外连接直接通过8位的SPI总线进行指令和数据的传输。
TFT2.2有像素点数为240×320,色彩深度为16位色,也就是每一个像素点需要用16位的数据来表示其显示内容。
TFT2.2模块的显示操作非常简便,需要改变某一个像素点的颜色时,只需要对该点所对应的2个字节的显存进行操作即可。
而为了便于索引操作,模块将所有的显存地址分为X轴地址(XAddress)和Y轴地址(YAddress),分别可以寻址的范围为XAddress=0~239,YAddress=0~319,XAddress和YAddress交叉对应着一个显存单元(2byte);这样只要索引到了某一个X、Y轴地址时,并对该地址的寄存器进行操作,便可对TFT-LCD显示器上对应的像素点进行操作了。
TFT2.2模块的像素点与显存对应关系如下图所示:
图2-1显存与像素点对应关系示意图
液晶模块与单片机的连接方式见工程Lcd.c文件中。
2、矩阵键盘检测的基本原理
为了节省单片机的IO口,提高键盘检测的效率和准确性,本实验我们采用键盘控制芯片CH452进行键盘扫描。
并采用4线串行接口与单片机交换数据,单片机可以频繁地通过串行接口进行高速操作,而绝对不会降低CH452的工作效率。
在键盘扫描期间,DIG7~DIG0引脚按照DIG0至DIG7的顺序依次输出高电平,其余7个引脚输出低电平;SEG7~SEG0引脚的输出被禁止,当没有键被按下时,SEG7~SEG0都被下拉为低电平;当有键被按下时,例如连接DIG3与SEG4的键被按下,则当DIG3输出高电平时SEG4检测到高电平;为了防止因为按键抖动或者外界干扰而产生误码,CH452实行两次扫描,只有当两次键盘扫描的结果相同时,按键才会被确认有效。
如果CH452检测到有效的按键,则记录下该按键代码,并通过4线串行接口中的DOUT引脚或者2线串行接口中的INT#引脚产生低电平有效的键盘中断(当INTM为1时输出低电平脉冲中断),此时单片机可以通过串行接口读取按键代码;在没有检测到新的有效按键之前,CH452不再产生任何键盘中断。
CH452不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下;如果多个键同时按下,那么按键代码较小的按键优先。
有关键盘检测的详细介绍请参考CH452芯片手册。
【实验内容】
1、练习液晶显示部分基本函数的使用,如:
画点,画线,画矩形,显示数字、字符、字符串、显示汉字等;
2、仔细研读键盘检测程序,当有按键按下时,将相应的按键编码显示在液晶屏的合适位置。
如:
按下KEY5,将在液晶显示屏上显示“TheKEYCODEisKEY01”;
3、自己另编写一个显示汉字的函数,显示你所想要的汉字大小,例如48*48;
4、自己另编写一个显示图片的函数,显示你所想要尺寸的真彩图片;
【实验步骤】
内容1:
基本函数的使用
1、打开CCSv5,选择“File>>Import”命令,弹出如图2-2所示对话框,单击展开“CodeComposerStudio”选项,选择“ExistingCCS/CCEEclipseProjects”。
图2-2导入新的CCSv5工程文件
2、单击“Next”按钮,弹出图2-3所示对话框。
图2-2选择导入工程目录
3、单击“Browse”按钮,选择工程文件目录Lcd_and_Key。
单击“Finish”按钮,即可完成已有工程的导入。
4、在此工程下练习一下函数的用法:
/*LCDApp*/
voidLCD_GPIO(void);
//LCDIO初始化
voidSPI_Init(void);
//SPI初始化
voidLCD_Clear(uint16Color);
//清屏
voidLCD_CH(uint16x,uint16y,constuint8index);
//显示汉字
voidLCD_Fill(uint16xsta,uint16ysta,uint16xend,uint16yend,uint16color);
//颜色填充
voidLCD_DrawPoint(uint16x,uint16y);
//画点
voidLCD_DrawPoint_big(uint16x,uint16y);
//画一个大点
voidLCD_DrawLine(uint16x1,uint16y1,uint16x2,uint16y2);
//画线
voidLCD_DrawRectangle(uint16x1,uint16y1,uint16x2,uint16y2);
//画矩形
voidDraw_Circle(uint16x0,uint16y0,uint8r);
//画圆
voidLCD_ShowChar(uint16x,uint16y,uint8num,uint8mode);
//显示一个字符
voidLCD_ShowNum(uint16x,uint16y,uint32num,uint8len);
//显示数字
voidLCD_Show2Num(uint16x,uint16y,uint16num,uint8len);
//显示2个数字
voidLCD_ShowFloatNum(uint16x,uint16y,doublenum);
//显示浮点数
voidLCD_ShowString(uint16x,uint16y,int8*p);
//显示字符串
voidLCD_ShowPicture();
//显示图片
内容2:
按键检测并显示键值
voidmain(void)
{
WDTCTL=WDTPW|WDTHOLD;//关闭开门狗
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==1)//判断是否为KEY1按下
{
KEYCODE=0;
LCD_ShowString(32,64,"TheKEYCODEisKEY01");
}
if(KEYCODE==2)//判断是否为KEY2按下
{
KEYCODE=0;
LCD_ShowString(32,64,"TheKEYCODEisKEY02");
}
……
key_flag=0;//按键标志位清0
}
}
}
内容3:
显示汉字
1、用文字取模软件生成想要显示汉字的字模,并将字模数组写到font.c文件中,在font.h文件中加以声明;
2、在lcd.c文件中改写汉字显示函数,并在lcd.h文件中加以声明;
/******************************************************************************
函数名:
LCD_CH48_48
功能:
在指定位置显示一个汉字(48*48大小)
入口参数:
dcolor内容颜色;gbcolor背景颜色
返回值:
无
******************************************************************************/
voidLCD_CH48_48(uint16x,uint16y,constuint8index)
{
uint16i,j;//为了防止溢出,i,j必须定义为16为的int型
constuint8*temp=hanzi48_48;
Address_set(x,y,x+47,y+47);//设置区域
temp+=index*288;
/*减法更高效*/
for(j=288;j>0;j--)
{
for(i=8;i>0;i--)
{
if((*temp&(1<<(8-i)))!
=0)
{
LCD_WR_DATA(POINT_COLOR);
}
else
{
LCD_WR_DATA(BACK_COLOR);
}
}
temp++;
}
}
3、在main.c文件中调用汉字显示函数。
内容4:
显示图片
1、用图片取模软件生成想要显示图片的字模,并将字模数组写到picture.c文件中,在picture.h文件中加以声明;
2、在lcd.c文件中改写图片显示函数,并在lcd.h文件中加以声明;
/******************************************************************************
函数名:
LCD_ShowPicture1
功能:
显示自定义大小图片
入口参数:
x,y坐标;wid图片宽度high图片高度
返回值:
无
******************************************************************************/
voidLCD_ShowPicture1(uint16x,uint16y,uint16wid,uint16high)
//显示自定义大小图片
{
int16i;
int16area=wid*high-1;
if(wid>239)wid=239;
if(high>319)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系列单片机几种时钟信号的基本用途;
3、学会用FLL锁频环配置时钟;
【实验仪器】
1、SEED-EXP430F5529v1.0开发板一套;
2、TDS210双踪示波器一台;
3、PC机操作系统WindowsXP或Wind
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430F5529 实验 指导书 V10