MSP430单片机步进电机程序

发布者:Xiaochen520最新更新时间:2018-01-30 来源: eefocus关键字:MSP430  单片机  步进电机 手机看文章 扫描二维码
随时随地手机看文章

MSP430 单片机 步进电机程序


#include "msp430x22x4.h" 
#define uchar unsigned char 
#define uint  unsigned int 


uchar i=0; 

// 扫描式4x4键盘

#define keyin   (P2IN&0x0F) 

//数码管值0~f 
unsigned char key[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; 

unsigned char hang[]={0xef,0xdf,0xbf,0x7f};// 选中行码 
unsigned char lie[]={0x0e,0x0d,0x0b,0x07};//相应列值 
unsigned char save,a,b; 

void DELAY(uint aj) 

   
    while(aj--); 


void init_port(void) 

   
  P1SEL |=BIT2+BIT3;                      //TA1,TA2输出功能 
  P1DIR |=BIT2+BIT3;  
   
  P2DIR=0XF0; 
  P2SEL=0; 
  P2OUT=0; 
  P2IE=0X0F; 
  P2IES=0XF0; 
  P2IFG=0; 
   
  P3DIR=0XFF;   //p3.0--A P3.1---B  P3.2---C   P3.3---D 
  P3SEL=0X00; 
  P3OUT=0XF0; 
  
  _EINT(); 
   
  return; 


void main(void) 

  WDTCTL=WDTPW+WDTHOLD;                   //关看门狗 
  BCSCTL1 =CALBC1_1MHz;                   //设定DCO为1MHZ 
  DCOCTL =CALBC1_1MHZ;      
   
  init_port(); 
   
  while(1) 
  { 
  while(i==1)   // 单四拍 
  { 
    P3OUT=0XF1;//11110100 
   DELAY(390); 

   P3OUT=0XF2;//11110010 
   DELAY(390); 

   P3OUT=0XF4;//11110001 
   DELAY(390); 

    P3OUT=0XF8;//11111000 
   DELAY(390); 
  } 
     
   while(i==2)//单四拍反转 
    { 
        P3OUT=0X08;//D 
      DELAY(390);  
     P3OUT=0X04;//C 
      DELAY(390);    
       P3OUT=0X02;//B 
      DELAY(390); 
       P3OUT=0X01;//A 
      DELAY(390); 
    }    
       
    while(i==3)   //双四拍 
    { 
      P3OUT=0X03;//AB 
      DELAY(390); 
      P3OUT=0X06;//BC 
      DELAY(390); 
      P3OUT=0X0c;//CD 
      DELAY(390);       
      P3OUT=0X09;//DA 
      DELAY(390);   
    } 
     
     while(i==4)   //双四拍反转 
    {  
      P3OUT=0X09;//DA 
      DELAY(390); 
      P3OUT=0X0c;//CD 
      DELAY(390);       
      P3OUT=0X06;//BC 
      DELAY(390); 
      P3OUT=0X03;//AB 
      DELAY(390); 
    } 
     
    while(i==5)//单八拍 
    { 
       P3OUT=0X01;//A 
      DELAY(390); 
      P3OUT=0X03;//AB 
      DELAY(390); 
      P3OUT=0X02;//B 
      DELAY(390); 
       P3OUT=0X06;//BC 
      DELAY(390); 
      P3OUT=0X04;//C 
      DELAY(390);   
      P3OUT=0X0c;//CD 
      DELAY(390);   
      P3OUT=0X08;//D 
      DELAY(390); 
       P3OUT=0X09;//DA 
      DELAY(390); 
    } 
     
    while(i==6)//单八拍反转 
    {   
      P3OUT=0X09;//DA 
      DELAY(390);     
      P3OUT=0X08;//D 
      DELAY(390); 
      P3OUT=0X0c;//CD 
      DELAY(390);   
       P3OUT=0X04;//C 
      DELAY(390);  
       P3OUT=0X06;//BC 
       DELAY(390); 
      P3OUT=0X02;//B 
      DELAY(390); 
      P3OUT=0X03;//AB 
      DELAY(390); 
       P3OUT=0X01;//A 
      DELAY(390); 
    } 

    while(i==7)//双八拍 
    { 
     P3OUT=0X03;//AB 
      DELAY(390); 
      P3OUT=0X07;//ABC 
      DELAY(390); 
      P3OUT=0X06;//BC 
      DELAY(390); 
       P3OUT=0X0E;//BCD 
      DELAY(390); 
      P3OUT=0X0c;//CD 
      DELAY(390);       
       P3OUT=0X0D;//CDA 
      DELAY(390); 
      P3OUT=0X09;//DA 
      DELAY(390); 
      P3OUT=0X0B;//DAB 
      DELAY(390); 
    }      
       
    while(i==8)//双八拍 反转 
    { 
       
      P3OUT=0X0B;//DAB 
      DELAY(390); 
        P3OUT=0X09;//DA 
      DELAY(390);       
       P3OUT=0X0D;//CDA 
      DELAY(390); 
      P3OUT=0X0c;//CD 
      DELAY(390);  
       P3OUT=0X0E;//BCD 
      DELAY(390); 
      P3OUT=0X06;//BC 
      DELAY(390);  
      P3OUT=0X07;//ABC 
      DELAY(390);  
      P3OUT=0X03;//AB 
      DELAY(390); 
    } 
  } 

   


void keyprocess(void) 
{   
       for(a=0;a<4;a++) 
       { 
           P2OUT=hang[a];       //逐行扫描 
            if(keyin != 0x0f)break;//检测该行有键按下则退出循环 
       } 
             
       for(b=0;b<4;b++)     //逐列扫描 
       { 
         if(keyin==lie[b]) 
         { 
           save=key[a][b];break;        //检测该列有键按下则退出循环 
         } 
       } 
        
        
       switch(save) 
       { 
       case 1:i=1;break; 
       case 2:i=2;break; 
       case 3:i=3;break; 
       case 4:i=4;break; 
       case 5:i=5;break; 
       case 6:i=6;break; 
       case 7:i=7;break; 
       case 8:i=8;break; 
       case 9: 
       case 10: 
       case 11: 
       case 12: 
       case 13: 
       case 14: 
       case 15: 
       case 16:break; 
       }     
    return; 


#pragma vector = PORT2_VECTOR  
__interrupt void PORT_ISR(void)       
       
 {  
  keyprocess(); 
  P2IFG=0; 
  P2OUT = 0; 
   return; 
 } 


关键字:MSP430  单片机  步进电机 引用地址:MSP430单片机步进电机程序

上一篇:MSP430单片机步进电机带显示程序
下一篇:MSP430超声波测距

推荐阅读最新更新时间:2024-03-16 15:53

MCU&USB设备控制器IP核的设计
  1 引言   在传统的计算机系统上常采用串口(如RS232)和并口连接外围设备,但串口和并口都存在着通信速度 慢,接口独占不利于扩展等无法克服的缺点,而通用串行总线(Universal Serial Bus,即USB)因具有传输 速度快、支持热插拔、扩展方便、抗干扰强、成本低、数据传输质量高、节省系统资源等优点而得到了广 泛的应用,当前它已成为计算机最常用的接口之一 。   现在USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。纯粹的USB接口芯片仅处 理USB通信,必须有个外部微处理器来进行协议处理和数据交换。典型产品有Philips公司的PDIUSBD11(I2C 接口)、PDIUSBD12
[单片机]
<font color='red'>MCU</font>&USB设备控制器IP核的设计
周立功单片机亮相IIC深圳,发力无线抄表领域
  在正在举行的第十三届国际集成电路研讨会暨展览会上,周立功单片机发展有限公司(简称周立功公司)展出了其近期开发的多类工业用M2M嵌入式产品-无线抄表模块。   这类产品所包括的种类很广,包括GSM/GPRS模块,CDMA模块等。据该公司的工程师翁树杰介绍,开发GPRS的原因是由于目前G网最为普及,可以方便地实现远程,无线和网络化通信。而开发CDMA产品的原因则是数据率要明显高于GPRS,又许多场合需要更高速率的大量数据的传输。   在目前抄表领域开发商云集的情况下,翁树杰认为,周立功公司具有几个优势。一是NXP平台的优势;二是基于该公司长期从事嵌入式系统研发的经验,同时也具有许多的工程设计经验,故能够为客户定制应用;再就是周
[工业控制]
周立功<font color='red'>单片机</font>亮相IIC深圳,发力无线抄表领域
基于51单片机超声波测距器设计
一、设计要求     设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。 二、设计思路   超声波传感器及其测距原理       超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的
[单片机]
基于51<font color='red'>单片机</font>超声波测距器设计
汽车的智能感官之“心”:适于检测及传感应用的MCU
Renesas(瑞萨电子)一直以来在汽车电子应用中具有重要地位,MCU R5F1177A属于Renesas RL78系列微控制器产品,该款MCU具有极低的功耗,丰富的模拟功能以及出色的低功耗表现,这使R5F1177A可以完美的应用于对功耗敏感的汽车电子应用,尤其是检测及传感器应用。 完备的模拟功能 世强代理的R5F1177A,集成了丰富的模拟功能,包括运算放大器、模式转换器、窗口比较器等。 同时该款MCU内部集成了4路运算放大器,2路窗口比较器,在外部配合简单的电阻电容设计,即可完成对信号的放大、滤波以及信号的监测,配合内部集成的分辨率高达12位的模数转换器,R5F1177A以极小的设计面积就可以完成对外部信号的测
[汽车电子]
CC430单片机的ADC学习
山雨欲来风满楼。 对于使用CC430的一般功能,还是需要很多模块的配合,团结就是力量。要想雨按时地落下,必须经过各个方面的配合。不过人脑又不是CPU,进程不能并行地展开,人的力量还是太微弱了,吃饭时也只能一口一口地往下咽。一步一步来,今天也就只能介绍某一个模块了。 这一篇也就只能介绍一下CC430的AD转换功能了。在一个充满模拟化的人类世界中,要想单片机这种数字化另类完成模拟数据的操作,必须得有一个能完成模拟向数字转换的模块。TI工程师确实想法很好,很厉害。CC430可以实现一段时间内多个通道数据的同时转换 ,以前在我心中只是个传说,现在终于见到面了。妈呀,又有点扯远了。 序幕缓缓拉开...........
[单片机]
CC430<font color='red'>单片机</font>的ADC学习
单片机时钟电路作用
单片机运行需要时钟支持 就像计算机的CPU一样,如果没有时钟电路来产生时钟驱动单片机,那单片机就不能执行程序。 单片机可以看成是在时钟驱动下的时序逻辑电路。 以MCS一5l单片机为例随明:MCS一51单片机为l2个时钟周期执行一条指令。也就是说单片机运行一条指令,必须要用r2个时钟周期。没有这个时钟,单片机就跑不起来了,也没有办法定时和进行和时间有关的操作。 时钟电路是微型计算机的心脏,它控制着计算机的二个节奏。CPU就是通过复杂的时序电路完成不同的指令功能的。MCS一51的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号:另一种为外部方式,时钟信号由外部引入。 如果没有
[单片机]
基于SX单片机实现WebServer和网络协议栈
    摘要: 讨论UBICOM公司(原SCENIX公司)的SX52BD100单片机构建Webserver的具体方案;给出硬件构成框图,并分析每一部分的作用、完成功能以及软件流程图。为了突出这种单片机的虚拟外设的特点,特别详细地说明网络协议和协议栈的具体实现。     关键词: 网络单片机 协议栈 虚拟外设 信息家电 WebServer 前 言 Internt的日益普及,信息共享程度的不断提高,给工作和生活带来了极大的方便。现在,上网浏览对于人们来说是一件很平常的事情。不仅如此,架构一个WebServer,做自己的主页也是司空见惯的。一般情况下,人们通过一台上网的电脑来建立WebServer。在这里将讨论另
[应用]
51单片机开发板的主要功能 51单片机开发板能做什么
51单片机开发板是一种基于8051系列单片机芯片的开发板,具有丰富的功能和广泛的应用。下面将详细介绍51单片机开发板的主要功能以及能够实现的各种应用。 一、基本功能: 通用输入输出:51单片机开发板具有多个通用输入输出引脚,可以连接各种外部设备和传感器,实现数据的输入和输出。 时钟管理:开发板通常会集成时钟电路,包括晶振、时钟发生器等,可以提供稳定的时钟信号给单片机使用。 存储器管理:开发板通常会搭载闪存、EEPROM、SRAM等各种类型的存储器,用于存储程序代码和数据。 电源管理:开发板通常会提供多种电源供电方式,可以选择外部电源或者USB供电。 通信接口:如串口、SPI、I2C等,可以连接各种外部设备进行数据通信
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved