欢迎来到天天文库
浏览记录
ID:6653039
大小:55.50 KB
页数:5页
时间:2018-01-21
《msp430 按键程序范例(附原理图)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#includevoidInit_Port(void){ //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR=0; //将P1口所有的管脚设置为一般I/O口 P1SEL=0; //将P1.4P1.5P1.6P1.7设置为输出方向 P1DIR
2、=BIT4; P1DIR
3、=BIT5; P1DIR
4、=BIT6; P1DIR
5、=BIT7; //先输出低电平 P1OUT=0x00; //将中断寄存器清零 P1IE=0; P1IES=0; P1IFG=0; //打开管脚的中断功能
6、 //对应的管脚由高到低电平跳变使相应的标志置位 P1IE
7、=BIT0; P1IES
8、=BIT0; P1IE
9、=BIT1; P1IES
10、=BIT1; P1IE
11、=BIT2; P1IES
12、=BIT2; P1IE
13、=BIT3; P1IES
14、=BIT3; _EINT();//打开中断 return;}voidDelay(void){ inti; for(i=100;i--;i>0);//延时一点时间}intKeyProcess(void){ intnP10,nP11,nP12,nP13; intnRes=0; //P1.
15、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
16、(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;
17、 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; } } retu
18、rnnRes;}//处理来自端口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
19、);//清除中断标志位 }}voidInit_CLK(void){ unsignedinti; BCSCTL1=0X00; //将寄存器的内容清零 //XT2震荡器开启 //LFTX1工作在低频模式 //ACLK的分频因子为1 do { IFG1&=~OFIFG; //清除OSCFault标志 for(i=0x20;i>0;i--); } while((IFG1&OFIFG)==OFIFG); //如果OSCFault
20、=1
此文档下载收益归作者所有