⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor.c

📁 Msp430的c语言程序集
💻 C
字号:
/***************************************************************

                 步进电机控制实验
          网址:http://www.wejay.com.cn

		  功能:C:控制电机正转
			   D:控制电机反转
			   E:停止


****************************************************************/
#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
uchar KeyValue=0xFF;
//键值编码表
uchar KeyCode[16]={0x77,0x7B,0x7D,0x7E,//0,1,2,3
                   0xB7,0xBB,0xBD,0xBE,//4,5,6,7
                   0xD7,0xDB,0xDD,0xDE,//8,9,A,b
                   0xE7,0xEB,0xED,0xEE};//C,d,E,F
uchar RunData[2]={0x1F,0x2F};
uchar DeRunData[2]={0x4F,0x8F};
uchar Flag=0;//0停止,1正转,2反转
//时钟初始化函数
void InitClock(void){
  BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2开启 LFXT1工作在低频模式 ACLK不分频 最高的标称频率
  DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
  do{
    IFG1&=~OFIFG;//清除振荡器失效标志
    for(uint i=255;i>0;i--);
  }while(IFG1&OFIFG);//判断XT2是否起振
  BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
}
//端口初始化函数
void InitPort(void){
  P1SEL=0x00;//P1口所有引脚设置为一般的IO口
  P1DIR=0x0F;//P1.0 P1.1 P1.2 P1.3设置为输出方向
  P1OUT=0x00;//P1口先输出低电平
  P1IE=0xF0;//P1.4 P1.5 P1.6 P1.7中断允许
  P1IES=0xF0;//P1.4 P1.5 P1.6 P1.7下降沿触发中断
  P6SEL=0x00;//P6口所有引脚设置为一般的IO口
  P6DIR=0xFF;//P6口所有引脚设置为输出方向
  P6OUT=0x00;//P6口初值为0
}
//延时子函数
void Delay(void){
  for(uchar i=255;i>0;i--);
}
//按键分析程序
void KeyProcess(void){
  uchar OutData=0x07;
  for(uchar i=0;i<4;i++){//扫描4列
    OutData|=0xF0;
    P1OUT=OutData;
    if(P1IN!=OutData) KeyValue=P1IN;
    OutData>>=1;
  }
  P1OUT=0x00;//恢复原来的值
}
//端口1中断处理程序
#pragma vector=PORT1_VECTOR
__interrupt void Port1INT(void){
  Delay();
  KeyProcess();
  P1IFG=0x00;//清除中断标志位
}
//延时子程序
void DelayMs(uint ms){
  while(ms--){
    for(uint i=0;i<800;i++);
  }
}
//按钮功能函数
void KeyFun(){
  if(KeyValue!=0xFF){//判断有新的键值
	if(KeyValue==0xE7){
	  Flag=1;
	}else if(KeyValue==0xEB){
	  Flag=2;
	}else if(KeyValue==0xED){
	  Flag=0;
	}
    KeyValue=0xFF;
  }
}
//电机操作函数
void Run(){
  uchar i;
  switch(Flag){
    case 1:{
	  for(i=0;i<2;i++) {P6OUT=RunData[i];DelayMs(100);}
	  break;
	}
	case 2:{
	  for(i=0;i<2;i++) {P6OUT=DeRunData[i];DelayMs(100);}
	  break;
	}
	case 0:{
	  P6OUT=0x00;
	  break;
	}
  }
}
//主函数
main(){
  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  InitClock();
  InitPort();
  _EINT();//打开中断
  while(1){
    KeyFun();	//键盘处理程序
    Run();      //电机操作函数
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -