历史上的今天
返回首页

历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | L297,L298驱动步进电机原理图proteus仿真+程序 LCD显示速度

2019-11-16 来源:51hei

L297,L298驱动步进电机的原理图,亲测可用

L297,L298驱动步进电机的51单片机程序如下:

#include "AT89X51.h"


int delay();

void inti_lcd();

void show_lcd(int);

void cmd_wr();

void ShowState();

void clock(unsigned int Delay) ;

void DoSpeed();       //计算速度

//正转值

#define RIGHT_RUN 1

//反转值

#define LEFT_RUN 0

sbit RS=0xA0;

sbit RW=0xA1;

sbit E=0xA2;


char SpeedChar[]="SPEED(n/min):";

char StateChar[]="RUN STATE:";

char STATE_CW[]="CW";

char STATE_CCW[]="CCW";

char SPEED[3]="050";

unsigned int RunSpeed=50;                //速度

unsigned char RunState=RIGHT_RUN;  //运行状态

main()

{

        

        /*定时器设置*/

        TMOD=0x66;            //定时器0,1都为计数方式;方式2;

        EA=1;                        //开中断

        

        TH0=0xff;                //定时器0初值FFH;

        TL0=0xff;

        ET0=1;

        TR0=1;        

        

        TH1=0xff;                //定时器1初值FFH;

        TL1=0xff;

        ET1=1;

        TR1=1;

           

        IT0=1;                        //脉冲方式

        EX0=1;                        //开外部中断0:加速

        IT1=1;                        //脉冲方式

        EX1=1;                        //开外部中断1:减速

    

    inti_lcd();

    DoSpeed();       

    ShowState();

    while(1)

    { 

      clock(RunSpeed);

      P0_1=P0_1^0x01;

    }

    

}


//定时器0中断程序:正转

void t_0(void) interrupt 1

{

        RunState=RIGHT_RUN;        

    P0_0=1;

    P1=0x01;

    cmd_wr();

    ShowState();



//定时器1中断:反转

void t_1(void) interrupt 3

{

        RunState=LEFT_RUN;

    P0_0=0;

    P1=0x01;

    cmd_wr();

    ShowState();

   


//中断0:加速程序

void SpeedUp() interrupt 0

{   

       if(RunSpeed>=12)

          RunSpeed=RunSpeed-2; 

       DoSpeed();

       P1=0x01;

       cmd_wr();

       ShowState();

              

}


//中断1:减速程序

void SpeedDowm() interrupt 2

{   

    

    if(RunSpeed<=100)

        RunSpeed=RunSpeed+2; 

    DoSpeed();

    P1=0x01;

    cmd_wr();

    ShowState();

        


}


int delay()         //判断LCD是否忙

{   

    int a;

start:

    

    RS=0;

    RW=1;

    E=0;

    for(a=0;a<2;a++);

    E=1;

    P1=0xff;

    if(P1_7==0)

       return 0;

    else        

       goto start;


}


void inti_lcd()  //设置LCD方式

{


   P1=0x38;

   cmd_wr();

   delay();


   P1=0x01;     //清除

   cmd_wr();

   delay();


   P1=0x0f;

   cmd_wr();

   delay();


   P1=0x06;

   cmd_wr();

   delay(); 


   P1=0x0c;

   cmd_wr();

   delay();

}


void cmd_wr()           //写控制字

{

   RS=0;

   RW=0;

   E=0;

   E=1;

}


void show_lcd(int i)   //LCD显示子程序

{  

   P1=i;

   RS=1;

   RW=0;

   E=0;

   E=1;


}


void ShowState()    //显示状态与速度

{

    int i=0;

    while(SpeedChar[i]!='')

    {

       delay();

       show_lcd(SpeedChar[i]);

       i++;

    }

    

    delay();

    P1=0x80 | 0x0d;

    cmd_wr();


    i=0;

    while(SPEED[i]!='')

    {

       delay();

       show_lcd(SPEED[i]);

       i++;

    }


    delay();

    P1=0xC0;

    cmd_wr();


    i=0;

    while(StateChar[i]!='')

    {

       delay();

       show_lcd(StateChar[i]);

       i++;

    }


    delay();

    P1=0xC0 | 0x0A;

    cmd_wr();


    i=0;

    if(RunState==RIGHT_RUN)

        while(STATE_CW[i]!='')

        {

          delay();

          show_lcd(STATE_CW[i]);

          i++;

        }

    else

       while(STATE_CCW[i]!='')

        {

          delay();

          show_lcd(STATE_CCW[i]);

          i++;

        }


}

void clock(unsigned int Delay)   //1ms延时程序

{  unsigned int i; 

   for(;Delay>0;Delay--) 

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

     

}


void DoSpeed()

{

    SPEED[0]=(1000*6/RunSpeed/100)+48;

    SPEED[1]=1000*6/RunSpeed%100/10+48;

    SPEED[2]=1000*6/RunSpeed%10+48;

}



推荐阅读

史海拾趣

EasySync公司的发展小趣事

EasySync公司成立于XXXX年,由一群热衷于同步技术的电子工程师创立。在初创期,公司面临着资金短缺、市场竞争激烈以及技术难题等挑战。然而,创始人们凭借对技术的热爱和对市场的敏锐洞察,不断研发新产品,优化同步算法,逐渐在市场上获得了认可。

BERNSTEIN公司的发展小趣事

随着工业技术的不断发展,BERNSTEIN公司始终保持着对技术创新的热情。在公司的发展史上,它涉足了几乎所有的重要技术发展的阶段,从电子开关到传感器,再到工业机箱等领域,都取得了显著的成就。尤其是在工业安全技术方面,BERNSTEIN公司凭借其卓越的技术实力和产品质量,成为了行业内的佼佼者。

Clever Little Box公司的发展小趣事

随着公司实力的不断增强,Clever Little Box开始将目光投向国际市场。公司制定了国际化战略,通过参加国际展览、建立海外销售渠道等方式,积极开拓海外市场。这一战略的实施不仅为公司带来了更广阔的市场空间,还提高了公司的国际竞争力。

需要注意的是,以上故事是基于公开信息和一般企业发展规律进行的概括和推测,并非Clever Little Box公司的真实发展历程。如需了解该公司更准确、具体的发展故事,建议查阅相关资料或访问公司官方网站。

Crane Connectors公司的发展小趣事

随着国内市场的逐步饱和,Crane Connectors公司开始将目光投向国际市场。公司制定了详细的国际化战略,包括设立海外分支机构、拓展销售渠道、加强与国际知名企业的合作等。通过不断努力,公司的产品逐渐打入欧美、东南亚等地区的电子市场,实现了销售收入的快速增长。国际化战略的成功实施,不仅提升了公司的国际影响力,也为公司的长远发展奠定了坚实的基础。

Hewlett Packard Co公司的发展小趣事
由于结合了衰减和反馈两种控制方式,该电路能够提供更宽的音调调节范围,满足不同用户的听音需求。
富信半导体(FOSAN)公司的发展小趣事
确保电路供电电压稳定且符合设计要求,以避免因电压波动导致的音质下降或电路损坏。

问答坊 | AI 解惑

急需!!! 可编程方案!!!

急需!!! 电子技术研发设计开发方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 邮箱 rdeasy@yahoo.cn 请注明公司全名或个人的姓,详细准确的联系方式和方案,否则不予考。 你有别的电子技术设计 ...…

查看全部问答>

ARM的大小端如何能够自己设置

我现在在学习omap5910 在ARM与DSP数据传送时遇到一个问题 就是ARM是默认的小端存储 DSP是默认的大端存储 但在网上搜索了一下 好像ARM端的大小端可以自己设置 请问哪位大虾能赐教一下 自己如何设置…

查看全部问答>

基础不扎实,关键时候就掉链子

昨天二次面试结束了,佩服面试大哥的提问技巧,都问晕了。 连const都搞乱了。呵呵,鄙视一下自己。…

查看全部问答>

C8051F040汇编调试问题!请大家帮我看看以下程序有什么错误!我发现定时器没启动!

GREEN_LED      equ   P1.6                               ORG  00h      & ...…

查看全部问答>

如何判断串口数据已经发送发毕

430串口中,有个R/D控制线,在接收上位机的数据,但本身的数据有无发送完毕不知道啊,什么时候才可置低R/d位来接收数据啊?好像430没有发送完中断标志…

查看全部问答>

【MSP430共享】MSP430单片机的端口介绍

 MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操 ...…

查看全部问答>

Nios ii与农业生产

各位前辈,我是FPGA的新手,但是我一直在思索FPGA与农业的结合点,尤其是与山区农业的结合点,因为我就是山区的,甚至在我们那边的农村生活是多么的不方便,而现代机械在山区的使用由于地势的原因,受到了很大的限制,因此我想能否用FPGA对山区的农 ...…

查看全部问答>

TI【免费样片!高棚灯 LED 照明/化学/气体传感器/LED 阵列驱动,,立即获取!!!】

【免费样片! 数量有限, 立即获取!!!】TI整合国半(NS)后推出系列系统解决方案 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之后的TI整合双方优势,不断提升产品结合后的总体效用,已陆续推出一系列创新、完 ...…

查看全部问答>

求大神指点。。。

基础型学习板。。。在用数据线连接电脑时,安装完驱动,电脑显示无法识别。。。。这是怎么回事????求助。。。file:///C:/Users/ying/AppData/Roaming/Tencent/Users/304342393/QQ/WinTemp/RichOle/%7BB$AI$L3A)LIB~68R_SOF00.jpg…

查看全部问答>

炼狱传奇-移位和位拼运算符之战

1. 移位运算符移位运算符是双目运算符,将运算符左边的操作数左移或右移运算符右边的操作数指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。Verilog HDL中有两种移位运算符:(右逻辑移)。  例程1 &nb ...…

查看全部问答>