MSP430 X14X按键程序范例(附原理图).doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:5 大小:54KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

MSP430 X14X按键程序范例(附原理图).doc

MSP430X14X按键程序范例(附原理图).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://hi.baidu.com/117190815/blog/item/279b44c7332db1dbd1006008.html"http://hi.baidu.com/117190815/blog/item/279b44c7332db1dbd1006008.html#include<msp430x14x.h>voidInit_Port(void){//将P1口所有的管脚在初始化的时候设置为输入方式P1DIR=0;//将P1口所有的管脚设置为一般I/O口P1SEL=0;//将P1.4P1.5P1.6P1.7设置为输出方向P1DIR|=BIT4;P1DIR|=BIT5;P1DIR|=BIT6;P1DIR|=BIT7;//先输出低电平P1OUT=0x00;//将中断寄存器清零P1IE=0;P1IES=0;P1IFG=0;//打开管脚的中断功能//对应的管脚由高到低电平跳变使相应的标志置位P1IE|=BIT0;P1IES|=BIT0;P1IE|=BIT1;P1IES|=BIT1;P1IE|=BIT2;P1IES|=BIT2;P1IE|=BIT3;P1IES|=BIT3;_EINT();//打开中断return;}voidDelay(void){inti;for(i=100;i--;i>0);//延时一点时间}intKeyProcess(void){intnP10,nP11,nP12,nP13;intnRes=0;//P1.4输出低电平P1OUT&=~(BIT4);nP10=P1IN&BIT0;if(nP10==0)nRes=13;nP11=P1IN&BIT1;if(nP11==0)nRes=14;nP12=P1IN&BIT2;if(nP12==0)nRes=15;nP13=P1IN&BIT3;if(nP13==0)nRes=16;//P1.5输出低电平P1OUT&=~(BIT4);nP10=P1IN&BIT0;if(nP10==0)nRes=9;nP11=P1IN&BIT1;if(nP11==0)nRes=10;nP12=P1IN&BIT2;if(nP12==0)nRes=11;nP13=P1IN&BIT3;if(nP13==0)nRes=12;//P1.6输出低电平P1OUT&=~(BIT4);nP10=P1IN&BIT0;if(nP10==0)nRes=5;nP11=P1IN&BIT1;if(nP11==0)nRes=6;nP12=P1IN&BIT2;if(nP12==0)nRes=7;nP13=P1IN&BIT3;if(nP13==0)nRes=8;//P1.7输出低电平P1OUT&=~(BIT4);nP10=P1IN&BIT0;if(nP10==0)nRes=1;nP11=P1IN&BIT1;if(nP11==0)nRes=2;nP12=P1IN&BIT2;if(nP12==0)nRes=3;nP13=P1IN&BIT3;if(nP13==0)nRes=4;P1OUT=0x00;//恢复以前值。//读取各个管脚的状态nP10=P1IN&BIT0;nP11=P1IN&BIT1;nP12=P1IN&BIT2;nP13=P1IN&BIT3;for(;;){if(nP10==1&&nP11==1&&nP12==1&&nP13==1){//等待松开按键break;}}returnnRes;}//处理来自端口1的中断interrupt[PORT1_VECTOR]voidPORT_ISR(void){Delay();KeyProcess();if(P1IFG&BIT0){P1IFG&=~(BIT0);//清除中断标志位}if(P1IFG&BIT1){P1IFG&=~(BIT1);//清除中断标志位}if(P1IFG&BIT2){P1IFG&=~(BIT2);//清除中断标志位}if(P1IFG&BIT3){P1IFG&=~(BIT3);//清除中断标志位}}voidInit_CLK(void){unsignedinti;BCSCTL1=0X00;//将寄存器的内容清零//XT2震荡器开启//LFTX1工作在低频模式//ACLK的分频因子为1do{IFG1&=~OFIFG;//清除OSCFault标志for(i=0x20;i>0;i--);}while((IFG1&OFIFG)==OFIFG);//如果OSCFault=1BCSCTL2=0X00;//将寄存器的内容清零BCSCTL2+=SELM1;//MCLK的时钟源为TX2CLK,分频因子为1BCSCTL2+=SELS;//SMCLK的时钟源为TX2CLK,分频因子为1}