历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2018年01月30日 | MSP430单片机步进电机程序

2018-01-30 来源:eefocus

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; 
 } 


推荐阅读

史海拾趣

DBLECTRO公司的发展小趣事

在全球化的大背景下,迪贝电子也积极拓展海外市场。公司通过参加国际展览、与国际知名企业合作等方式,不断推广其品牌和产品。同时,公司还针对不同国家和地区的市场需求,推出了适应当地环境和使用习惯的产品。这些努力使得迪贝电子的产品逐渐得到了全球用户的认可和信赖。

Etco Inc公司的发展小趣事

在环保意识日益增强的今天,Etco Inc公司积极响应环保号召,将环保理念融入企业发展中。公司采用环保材料和生产工艺,减少了对环境的污染和破坏。同时,Etco还积极参与环保公益活动,推动行业的可持续发展。这些举措不仅提升了企业的社会形象,也为电子行业的绿色发展树立了榜样。

GSN Electronics公司的发展小趣事

面对数字化转型的浪潮,Etco Inc公司主动拥抱变革,积极推进数字化转型。公司利用大数据、云计算等先进技术优化生产流程和管理模式,提高了生产效率和管理水平。同时,Etco还加强了与客户的数字化连接和交流,提供了更加便捷和高效的服务体验。这些举措使Etco在数字化时代中保持了领先地位并实现了持续增长。

ZTE高新兴(Gosuncn)公司的发展小趣事

面对数字化转型的浪潮,Etco Inc公司主动拥抱变革,积极推进数字化转型。公司利用大数据、云计算等先进技术优化生产流程和管理模式,提高了生产效率和管理水平。同时,Etco还加强了与客户的数字化连接和交流,提供了更加便捷和高效的服务体验。这些举措使Etco在数字化时代中保持了领先地位并实现了持续增长。

Eurotech公司的发展小趣事

为了满足不断变化的市场需求,Eurofarad公司始终保持着对产品创新的热情。公司不断投入研发资源,开发出了一系列具有竞争力的新产品。这些新产品不仅涵盖了不同规格和性能的电容器,还包括了一些与电容器相关的配套产品和解决方案。这些创新产品的推出,让Eurofarad公司在市场中保持了领先地位。

Elpaq公司的发展小趣事

问答坊 | AI 解惑

在Open at中如何获得手机号码

我用open at写一个程序,记录拨进来的电话号码和呼叫记录.... 请问怎么获得对方的电话号码和呼叫时间????…

查看全部问答>

wince 6.0 的label中文换行问题

在WINCE 6.0系统中,运行.NET编写的C#应用程序.发现Label控件的的字很多时候需要换行时候,英文可以自动换行,而中文只能显示一行字,其它字被截断,不能显示.采用容器进行FILL仍然不行,请高手帮忙解决!…

查看全部问答>

求购vxworks 6.6 Bsp for atmel sam9260

那位手头有vxworks 6.6 Bsp for atmel sam9260的?并能提供技术支持的,留个联系方式好吧。谢谢…

查看全部问答>

wince s3c2440使用COM1读写都很正常,但是COM3、COM4不行

COM3、COM4是可以打开的。但是发送数据异常,没有看到数据输出。一开始是死在了WriteFile上面,后来我加入了超时间隔等参数,可以返回,但是写数据就失败了。有谁遇到过这样的问题吗?…

查看全部问答>

BootLoader 创建一个构建环境问题

C:\\Documents and Settings\\Administrator>SET _WINCEROOT=C:\\WINCE600 C:\\Documents and Settings\\Administrator>CD %_WINCEROOT%\\PUBLIC\\COMMON\\OAK\\MISC C:\\WINCE600\\PUBLIC\\COMMON\\OAK\\MISC>WINCE.BAT _WINCEDRIVE=C: C:\\WI ...…

查看全部问答>

NMAKE : U1073: don't know how to make

WinCE5.0 生成系统时出现: BUILD: [01:0000000913:ERRORE] NMAKE :  U1073: don\'t know how to make \'D:\\WINCE500\\platform\\common\\lib\\ARMV4I\\retail\\oal_memory_s3c2440a.lib\' BUILD: [01:0000000915:ERRORE] NMAKE.EXE ...…

查看全部问答>

请教一个硬件设计问题

现在有五个数,FF C0 00 C0 FF,在第一数(FF)的下降沿开始进行计时,到第五个下降 沿停止,现在想判断从开始计时到停止计时,所花的时间是不是小于5ms,现在有计时芯 片,示波器,不知道怎么办,怎么才能知道发生的时间…

查看全部问答>

fpga 的fifo制作

有没有人懂得怎么样用fpga开发板用vhdl语言做一个48进32出的fifo?有相关资料也行!大家帮帮忙咯!感激不尽! [ 本帖最后由 hefeifei1990 于 2010-12-22 16:14 编辑 ]…

查看全部问答>

FPGA利用DSP中的FLASH?

如题,一般FPGA都要使用外带的FLASH芯片存放程序,为节约成本不知道可不可以使用同一块板上的DSP内部FLASH存放程序,各位高人都来讨论讨论…

查看全部问答>

帮忙看下我写这个程序有什么不对的地方

帮忙看下我写这个程序有什么不对的地方 现在的情况是下载到单片机上就第一个数码管显示一个零,然后就停在那里 单片机原理图在这里http://wenku.baidu.com/view/0fc085f5f90f76c661371a1e.html #include #define uint unsigned int #defin ...…

查看全部问答>