武汉工程科技学院MSP430F169课程设计报告.docx

上传人:b****3 文档编号:10576241 上传时间:2023-05-26 格式:DOCX 页数:14 大小:128.81KB
下载 相关 举报
武汉工程科技学院MSP430F169课程设计报告.docx_第1页
第1页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第2页
第2页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第3页
第3页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第4页
第4页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第5页
第5页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第6页
第6页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第7页
第7页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第8页
第8页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第9页
第9页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第10页
第10页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第11页
第11页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第12页
第12页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第13页
第13页 / 共14页
武汉工程科技学院MSP430F169课程设计报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

武汉工程科技学院MSP430F169课程设计报告.docx

《武汉工程科技学院MSP430F169课程设计报告.docx》由会员分享,可在线阅读,更多相关《武汉工程科技学院MSP430F169课程设计报告.docx(14页珍藏版)》请在冰点文库上搜索。

武汉工程科技学院MSP430F169课程设计报告.docx

武汉工程科技学院MSP430F169课程设计报告

MSP430课程设计报告

学部:

机械与电子信息学院

专业:

通信工程

班级:

通信一班

学号:

姓名:

指导教师:

侯自良

2015年6月

一.MSP430F169中+5V和+3.3V电压输出硬件设计

图1-1

如图1-1LM7805把输入的7~9电压转化为稳定的+5V输出电压,LM7805输出的+5V电压作为AMS1117的输入电压,经过AMS1117把+5V的电压转化为稳定的+3.3V电压。

LM7805能输出稳定+5V电压,AMS1117-3.3V能输出稳定的3.3V电压。

稳定的+5V电压为外围一些芯片提供电压,稳定的3.3V电压作为MSP430的工作电压提供源。

在+5V输出电压与地之间和+3.3V电压与地之间并联100uF和104pF的电容进行滤波。

 

二.MSP430最小系统电路的硬件设计

图1-2

如图1-2所示,430芯片的1脚与64接3.3V的电压给芯片提供电压,与地之间并联100uF和104的电容进行滤波,提供稳定的电压输入。

8脚与9脚接一个32768的晶振,可由软件选作各个外围模块的时钟信号,一般用于低速外设。

52和53脚接一个8M的晶振作为系统主时钟,主要用于CPU和系统。

芯片内部有个DCO振荡器。

MSP430共有3个振荡器。

RST复位端低电平有效,按键按下产生低电平,芯片进行复位。

 

三.MSP430跑马灯的硬软件电路设计

1.MSP430跑马灯的硬件电路设计

图1-3

MSP430的第20-27引脚为P2口,对应P2.0-P2.7,P2口的P2.0-P2.7与74HC573的D0-D7一一对应,74HC573的Q0-Q7为输出,分别接发光二极管后与100Ω串联接地。

74HC573为8位锁存器,其1脚为输出使能,低电平有效,电路中将其接地,所以74HC573的8位Q端为直通输出。

74HC573的第11引脚LE为输入使能端,高电平有效,电路中将其接入+5V高电平。

2.MSP430跑马灯的软件设计

#include

#defineucharunsignedchar

#defineuintunsignedint

//***************************************************************

//延时

//****************************************************************

voiddelay(uintn)

{

uinta;

while(n--)

for(a=0;a<=1538;a++);

}

//***********************************

//初始化小灯的相关引脚

//***********************************

voidinit_shu_led(void)

{

P2DIR=0xff;//小灯的引脚设置

P2SEL=0x00;

}

//********************************************************

//跑马灯led闪亮

//*******************************************************

voidrun_led(void)

{

uchari,j;

uinttemp;

for(i=1;i<10;i++)

{

for(temp=0;temp<256;temp+=i)

{

P2OUT=temp;

delay(200);

}

}

for(i=0,j=0x01;i<10;)

{

P2OUT=j;

delay(200);

j=j<<1;

if(j==0)

{

i++;

j++;

}

}

for(i=0,j=0x80;i<10;)

{

P2OUT=j;

delay(200);

j=j>>1;

if(j==0)

{

i++;

j=0x80;

}

}

}

//************************************************************

//时钟初始化选择8M晶振

//*************************************************************

voidint_clk(void)

{

uchari;

BCSCTL1&=~XT2OFF;

BCSCTL2|=SELM_2+SELS;

do

{

IFG1&=~OFIFG;

for(i=0;i<200;i++);

}while(IFG1&OFIFG);

}

//**************************************************************

//主函数

//**************************************************************

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

init_shu_led();//初始化数码管和LED灯

int_clk();

while

(1)

{

run_led();

}

}

在以上程序中:

#include为MSP430中定义的MSP430F169的特殊功能寄存器功能头文件。

#defineucharunsignedchar#defineuintunsignedint声明uchar和uint的类型

delay()函数进行延时以便眼睛能看到小灯闪烁变化。

init_shu_led()函数初始化小灯的引脚,LED小灯与MSP430的P2.0-P2.7相联,设置P2口为输出。

int_clk()函数初始化时钟,选择8M晶振。

run_led()函数中先对变量temp进行加i计数,采用双重循环方式,第一遍i=1,temp计数,每次加1,计数范围从0-255,达到256归零。

每计数一次,将结果送P2OUT,发光二极管显示。

第二遍i=i+1=2,temp=temp+i.即temp每次加2,直到temp<256在对temp归零。

这一循环过程直到i=9,在每次送P2OUT显示后,经延时后,以便能看到LED灯的闪烁。

然后进入跑马灯左移位程序P2OUT=j;delay(200);j=j<<1(左移一位);循环移位10遍,再进入右移位程序,循环10遍,run_led()函数执行完,进入主程序。

 

四.MSP430键盘控制及键号显示电路的软硬件设计

1.MSP430键盘控制及键号显示电路的硬件设计

图1-4

MSP430键盘控制及显示电路如图1-4所示,键盘控制及显示电路包括键盘控制电路和键号显示电路。

键盘控制电路。

按键一端与10K电路相联,另一端接地。

在10K电阻与按键之间引出导线与MSP430的P4口相连,端口40-47与MSP430的P4.0-P4.7相对应,设置P4口为输入状态就能读出输入的高低电平。

比如第三个按键按下,则输入的为11011111,P4IN为11011111,

通过读取P4IN的值就能确定那个按键按下。

在电阻与按键之间引出导线与P4口相联时,还作为74HC21(4输入与门)的输入端,74HC21最终输出端与MSP430的15引脚相联,MSP430的第15引脚为P1.3,P1.3具有中断功能。

当8个按键没有按键下时,74HC21的输出电平为高电平。

8个按键中任意一个按键按下时74HC21输出由高电平变为低电平.74HC21的功能为:

只要有一个输入端为低电平,其输出端为低电平。

此下降沿触发MSP430的P1.3口的中断,对键盘控制采用的是中断搜索方式。

键号的数码显示采用MSP430的SPI串口方式,第一片74HC164的AB引脚与MSP430的29引脚相联,MSP430的29的第二功能为SIMO0输出SPI数据。

四片74HC164采用级联的方式,因为SPI串口发送数据从高位到低位,所以前一片的最高位QH与第二片的AB引脚相联。

74HC164的第九引脚CLR接低电平进行清除输出数据,在这改为接高电平。

4片74HC164的CLK共同接在MSP430的31引脚,其对应为UCLK0,输出SPI模式的时钟信号。

四个数码管显示键号,按下一个按键后与第一片74HC164相对应的数码管显示按键号,该数码管原先显示的数字在第二个数码管中显示,与此对应,数码管显示的数字依次移一位。

2.MSP430键盘控制及键号显示的程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharkey1=10;

constucharsegment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

//***************************************************************

//延时

//****************************************************************

voiddelay(uintn)

{

uinta;

while(n--)

for(a=0;a<=1538;a++);

}

//***********************************

//初始化数码管与键盘的相关引脚

//***********************************

voidinit_shu_led(void)

{

P4DIR=0x00;//按键引脚输入

P1IES=0x08;//按键中断的相关设置

P1IFG=0x00;

P1IE=0x08;//开P1.3引脚的中断

}

//*******************************

//初始SPI模式通过SPI与164相连

//*******************************

voidint_spi(void)

{

U0CTL=CHAR+SYNC+MM+SWRST;//8位SPI,主模式

U0TCTL=SSEL0+SSEL1+STC;//ACLK时钟,3线

U0TCTL|=CKPH;//上升输出数据,164上升沿输入数据

U0TCTL&=~CKPL;//延时半个周期缓冲

U0BR0=0x02;

U0BR1=0x00;

U0MCTL=0x000;

ME1|=USPIE0;//模块使能

U0CTL&=~SWRST;//SPI使能

IE1&=~UTXIE0;//接收禁止使能

IE1&=~URXIE0;//发送禁止使能

P3SEL|=0x0e;//P3.1-P3.3第二功能

P3DIR|=0xff;//P3口输出

}

//***********************************************************

//在数码管上显示数字

//**********************************************************

voiddisplay(uchardata)

{

while((IFG1&UTXIFG0)==0);

U0TXBUF=segment[data];

}

//************************************************************

//时钟初始化选择8M晶振

//*************************************************************

voidint_clk()

{

uchari;

BCSCTL1&=~XT2OFF;

BCSCTL2|=SELM_2+SELS;

do

{

IFG1&=~OFIFG;

for(i=0;i<200;i++);

}while(IFG1&OFIFG);

}

//**************************************************************

//主函数

//**************************************************************

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

uchari;

init_shu_led();

int_clk();

int_spi();

for(i=0;i<4;i++)//上电开始没有按键按下数码管显示“-”

display(key1);

_EINT();//开总中断

LPM1;

}

//**********************************************************

//按键的中断服务程序

//***********************************************************

#pragmavector=PORT1_VECTOR

__interruptvoidport_1(void)

{

_DINT();

ucharkey;

key=P4IN;

if(key!

=0xff)

{

delay(50);

key=P4IN;

if(key!

=0xff)

{

key=P4IN;

switch(key)

{

case0xfe:

key1=1;break;

case0xfd:

key1=2;break;

case0xfb:

key1=3;break;

case0xf7:

key1=4;break;

case0xef:

key1=5;break;

case0xdf:

key1=6;break;

case0xbf:

key1=7;break;

case0x7f:

key1=8;break;

default:

key1=0;

}

display(key1);

}

}

P1IFG=0x00;

_EINT();

}

键盘控制程序采用中断的方式进入,即有人按下任意一个按键,则P1口的中断启动,进入查询模式,通过扫描P4IN的值来确定哪个按键按下,然后显示键号。

以上程序中:

delay()函数进行延时,在去抖中用到。

init_shu_led()初始化相关引脚的功能,P4引脚设置为输入模式,P1.3设置为中断模式。

int_spi()函数进行设置SPI串口的相关操作,U0TCTL|=CKPH;设置MSP430在上升输出数据,而74HC164在上升沿输入数据,U0TCTL&=~CKPL;作用是延时半个周期以便MSP430输出的数据在74HC164的上升沿到来时数据已经在SIMO0线上。

在P1口的中断函数中,关闭总中断_DINT()禁止在处理P1.3中断服务中又产生了中断,

delay(50)进行按键的去抖动,在switch中查询P4IN的值来确定哪个按键被按下,display(key1)用来显示按键的键号,在中断服务函数的最后进行去中断标志位和开中断。

五.总结与体会

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2