历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2019年11月19日 | 51单片机实现三相六拍的步进电机控制

2019-11-19 来源:51hei

单片机源程序如下

#include      

    

#define uchar unsigned char

#define uint  unsigned int

uint speed = 100;                                                //初始转速

uint max = 200;                                                        //最慢转速

uint min = 20;                                                        //最快转速


sbit swich = P2^0;                                           //总开关

sbit dir = P2^1;                                        //电机旋转方向

sbit le1=P2^6;

sbit le2=P2^7;

sbit speedadd=P3^2;

sbit speedsub=P3^3;                                   


unsigned char uca_MotorStep[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};    //励磁电流数组。

                                                                                                             


uchar leddata[]={ 


                0x3F,  //"0"

                0x06,  //"1"

                0x5B,  //"2"

                0x4F,  //"3"

                0x66,  //"4"

                0x6D,  //"5"

                0x7D,  //"6"

                0x07,  //"7"

                0x7F,  //"8"

                0x6F,  //"9"

                0x40,  //"-"

                0x00,  //熄灭

                         };



void delay1ms(void)   //误差 0us

{

    unsigned char a,b,c;

    for(c=1;c>0;c--)

        for(b=142;b>0;b--)

            for(a=2;a>0;a--);

}


void delay(uint x )                          //多功能毫秒延时

{

    uint i;

        for(i=0;i        {

          delay1ms();

        }

}




void display(void)

{        

  if(swich==1)

  {

                   P0=        leddata[11];

                delay(1);

                le2=1;

                le1=1;

                delay(1);

                le2=0;                

                le1=0;


  }        

  else

  {

  if(dir==1)

                {

                P0=        leddata[11];

                delay(1);

                le2=1;

                delay(1);

                le2=0;

                }

        else

            {

                P0 =leddata[10];

                delay(1);

                le2=1;

                delay(1);

                le2=0;

                }  


        P0=leddata[9-(speed-20)/20];

        delay(30);

        le1=1;

        delay(5);

        le1=0;

                   

}        

}



void Init_INT0()

{

EX0=1;    //开启外部中断 0

IT0=1;          //设置成低电平触发,1为下降沿触发

EX1=1;    //开启外部中断 1

IT1=1;          //设置成低电平触发,1为下降沿触发

EA=1;   //开启总中断

}


void Interrupt0_handler() interrupt 0

{

    EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰

    delay(20); //同样是为了消除抖动而产生新的中断

    if(speed>min)

       {speed=speed-20;}        //限制最快转速

        else

                {speed=min;}

        while(speedadd==0);

    EA=1;            //恢复中断

}



void Interrupt1_handler() interrupt 2

{

    EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰

    delay(20); //同样是为了消除抖动而产生新的中断

    if(speed       {speed=speed+20;}

        else

                {speed=max;}         //限制最慢转速

        while(speedsub==0);

    EA=1;            //恢复中断

}


void main()

{

int i;                                   //初始化

dir=1;

le1=0;

le2=0;



start:

if(swich==0)

     {Init_INT0();}                  //总开关开启,初始化中断,开始转动

   else

         {display(); goto start;        }



        if(dir==1)

  seq:

        { 

          while(1)

          {         

             display();

                 for (i=0; i<8; i++)    

                {

                  P1 = uca_MotorStep[i];         //取数据

                  delay(speed);            //调节转速

                }

                 if(dir==0)                                                         //是否换向

                    {

                        delay(5);                                                 //        换向延时

                        goto oppo;                                                 //换向

                        }

                if(swich==1)                                                 //总开关运行中关闭

                   goto start;                                                 //等待开启

         

          } 

         

        }

        else

        oppo:

……………………



推荐阅读

史海拾趣

百事通科技(BUDDIES)公司的发展小趣事

百事通科技(BUDDIES)自创立之初,便致力于电子技术的研发与创新。在激烈的市场竞争中,公司意识到只有掌握核心技术,才能在行业中立足。于是,公司投入大量资源,组建了一支由业内顶尖专家组成的研发团队,专注于新型电子产品的研发。经过数年的努力,公司成功推出了一款具有自主知识产权的智能芯片,该芯片在性能上超越了同类产品,受到了市场的广泛认可。

FTDI公司的发展小趣事

随着技术的不断成熟,百事通科技(BUDDIES)开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,通过参加国际电子展、与海外企业建立合作关系等方式,逐步打开了国际市场。同时,公司还注重品牌建设,通过精心设计的品牌形象和广告宣传,提升了品牌知名度和美誉度。

ES Systems公司的发展小趣事

ES Systems自创立之初就专注于电子系统技术的研发。公司创始人是一位资深的电子工程师,他带领团队不断突破技术瓶颈,开发出了一系列高性能的电子系统产品。随着技术的不断成熟和产品线的丰富,ES Systems逐渐在市场中树立了技术领先的形象,吸引了大量客户的青睐。公司通过技术驱动实现了快速成长,并在电子行业中占据了重要地位。

Digital Core Design公司的发展小趣事

然而,随着《古墓丽影》系列的不断发展,Core Design也面临了一些挑战。其中最为严重的是版权问题。由于Core Design在后续的一些作品中可能违背了“古墓”的本源,享有Lara Croft和《古墓丽影》版权的游戏发行商Eidos作出了剥夺Core Design《古墓丽影》系列开发权的决定。这一决定对Core Design来说无疑是一个巨大的打击,但也促使其开始寻找新的发展机遇。

C.K TOOLS公司的发展小趣事

近年来,随着环保意识的不断提高,电子制造行业也开始关注绿色生产。C.K TOOLS积极响应这一趋势,开始在生产过程中采用环保材料和工艺。他们研发出了一系列可回收、可降解的工具材料,减少了生产过程中的环境污染。同时,他们还通过优化生产流程、提高能源利用效率等方式,降低了生产过程中的能耗和排放。这些举措不仅符合了电子制造行业的绿色生产要求,也提升了C.K TOOLS的企业形象和市场竞争力。

请注意,以上故事均基于虚构和假设,并未涉及C.K TOOLS公司真实的业务情况和市场策略。如需了解更多关于C.K TOOLS在电子行业中的发展故事,建议查阅相关的行业报告、公司年报或新闻报道等公开资料。

集创北方(CHIPONE)公司的发展小趣事

凭借在显示芯片领域的卓越表现,集创北方获得了众多行业殊荣。公司曾荣获工信部“制造业单项冠军示范企业”称号、北京市专精特新“小巨人”企业等荣誉。这些荣誉的获得不仅是对集创北方技术实力的认可也是对公司未来发展的期许。

以上五个故事简要概述了集创北方在电子行业发展的历程和成就,展示了公司不断创新、积极进取的精神风貌。

问答坊 | AI 解惑

ARM AND 传感器

-----------学过单片机, 现在想搞ARM,可不知道怎么入手了,还有就是想看看ARM 的板子,价格少点的(我是学生,靠节约点才能买)  还请各位高手指点呀!在此先谢了。                 ...…

查看全部问答>

Windows Mobile vs Windows CE

公司要做个项目,现在在确定平台,是使用windows mobile还是wince,主要是从研发周期和成本方面考虑,恳请大家给点建议。 目前只知道用mobile需要微软评估,另外开发工具费用、授权费用都很贵,但具体成本是多少没有概念;而用wince相对便宜些,网 ...…

查看全部问答>

高手请进

问哈 单片机编程是可以C和汇编 混合编写是吧  以前的思维一直以为只可以用一种些  不过近来发现好象可以 C对软件控制比汇编容易 而汇编对于输入和输出的控制比C容易点是么??…

查看全部问答>

请教各位版主和高手:中断调试

我编了一个小的中断程序,运行成功了,可是有的时候又不行?这是为什么? 另外我在中断服务子程序中点亮了一个灯,按说灯只要亮就说明进了中断,我这里会出现灯亮,PIVR向量却为0,且time也没有加1,这种情况是算进了中断了还是没进中断呢?出现这 ...…

查看全部问答>

vxworks下的vxbus驱动问题

各位大侠,有谁了解vxbus的详细调用过程,特别是如何调用vxbDeviceMethod…

查看全部问答>

希望MSP430 SRAM更大些

希望MSP430 SRAM更大些   现在跑一般的程序没问题,带一些算法时,1K SRAM略小些!…

查看全部问答>

拆机!

昨天答应上拆机图的,现在把图片发上来。先申明,细心拆解,装回去后完好如初,正常使用哦!首先拆接收器:图片上有个433大家都看到了吧!难道是用的433MHz的无线通信?我没查证,随意猜的,请大家来指正。然后是鼠标:单面板PCB可能不能布通,还用 ...…

查看全部问答>

收到接进传感器套件了,怎么用呢?

相信很多人手里都拿到套件了,也许有的放旁边睡觉,有的急不可耐的上电测试了。大家是怎么用的呢?用在什么方面?简单测试后,和想象中有点差距。 [ 本帖最后由 yunbei 于 2012-4-1 18:20 编辑 ]…

查看全部问答>

Z自己整理的C语言题库

有用就下载吧 蛮实用的 对于初学者…

查看全部问答>

arm-linux-gcc找不到头文件

各位大哥大神大侠,请帮帮我,搞了一天,要奔溃了。我是初学者,这是视频教程的一个hello的内核模块,用arm-linux-gcc-4.3.2编译时,总说找不到linux/init.h和linux/module.h, 我locate了一下,这两个文件在 /usr/src/kernels/2.6.35.6-45.fc14.i ...…

查看全部问答>