久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4200|回復: 1
打印 上一主題 下一主題
收起左側

基于51單片機的步進電機調速及下反轉控制LCD顯示程序+仿真

[復制鏈接]
跳轉到指定樓層
樓主
    基于51單片機的步進電機調速及下反轉控制LCD顯示,實現步進電機轉速調節以及步進電機正反轉控制。
全部資料51hei下載地址:
基于51單片機的步進電機調速及正反轉控制,LCD顯示.zip (76.56 KB, 下載次數: 142)

單片機源程序如下:
  1. #include "AT89X51.h"

  2. int delay();
  3. void inti_lcd();
  4. void show_lcd(int);
  5. void cmd_wr();
  6. void ShowState();
  7. void clock(unsigned int Delay) ;
  8. void DoSpeed();       //計算速度
  9. //正轉值
  10. #define RIGHT_RUN 1
  11. //反轉值
  12. #define LEFT_RUN 0
  13. sbit RS=0xA0;
  14. sbit RW=0xA1;
  15. sbit E=0xA2;

  16. char SpeedChar[]="SPEED(n/min):";
  17. char StateChar[]="RUN STATE:";
  18. char STATE_CW[]="CW";
  19. char STATE_CCW[]="CCW";
  20. char SPEED[3]="050";
  21. unsigned int RunSpeed=50;                //速度
  22. unsigned char RunState=RIGHT_RUN;  //運行狀態
  23. main()
  24. {
  25.         
  26.         /*定時器設置*/
  27.         TMOD=0x66;            //定時器0,1都為計數方式;方式2;
  28.         EA=1;                        //開中斷
  29.         
  30.         TH0=0xff;                //定時器0初值FFH;
  31.         TL0=0xff;
  32.         ET0=1;
  33.         TR0=1;        
  34.         
  35.         TH1=0xff;                //定時器1初值FFH;
  36.         TL1=0xff;
  37.         ET1=1;
  38.         TR1=1;
  39.            
  40.         IT0=1;                        //脈沖方式
  41.         EX0=1;                        //開外部中斷0:加速
  42.         IT1=1;                        //脈沖方式
  43.         EX1=1;                        //開外部中斷1:減速

  44.     inti_lcd();
  45.     DoSpeed();      
  46.     ShowState();
  47.     while(1)
  48.     {
  49.       clock(RunSpeed);
  50.       P0_1=P0_1^0x01;
  51.     }

  52. }

  53. //定時器0中斷程序:正轉
  54. void t_0(void) interrupt 1
  55. {
  56.         RunState=RIGHT_RUN;        
  57.     P0_0=1;
  58.     P1=0x01;
  59.     cmd_wr();
  60.     ShowState();
  61. }


  62. //定時器1中斷:反轉
  63. void t_1(void) interrupt 3
  64. {
  65.         RunState=LEFT_RUN;
  66.     P0_0=0;
  67.     P1=0x01;
  68.     cmd_wr();
  69.     ShowState();

  70. }

  71. //中斷0:加速程序
  72. void SpeedUp() interrupt 0
  73. {   
  74.        if(RunSpeed>=12)
  75.           RunSpeed=RunSpeed-2;
  76.        DoSpeed();
  77.        P1=0x01;
  78.        cmd_wr();
  79.        ShowState();

  80. }

  81. //中斷1:減速程序
  82. void SpeedDowm() interrupt 2
  83. {   

  84.     if(RunSpeed<=100)
  85.         RunSpeed=RunSpeed+2;
  86.     DoSpeed();
  87.     P1=0x01;
  88.     cmd_wr();
  89.     ShowState();


  90. }

  91. int delay()         //判斷LCD是否忙
  92. {   
  93.     int a;
  94. start:

  95.     RS=0;
  96.     RW=1;
  97.     E=0;
  98.     for(a=0;a<2;a++);
  99.     E=1;
  100.     P1=0xff;
  101.     if(P1_7==0)
  102.        return 0;
  103.     else        
  104.        goto start;

  105. }

  106. void inti_lcd()  //設置LCD方式
  107. {

  108.    P1=0x38;
  109.    cmd_wr();
  110.    delay();

  111.    P1=0x01;     //清除
  112.    cmd_wr();
  113.    delay();

  114.    P1=0x0f;
  115.    cmd_wr();
  116.    delay();

  117.    P1=0x06;
  118.    cmd_wr();
  119.    delay();

  120.    P1=0x0c;
  121.    cmd_wr();
  122.    delay();
  123. }

  124. void cmd_wr()           //寫控制字
  125. {
  126.    RS=0;
  127.    RW=0;
  128.    E=0;
  129.    E=1;
  130. }

  131. void show_lcd(int i)   //LCD顯示子程序
  132. {  
  133.    P1=i;
  134.    RS=1;
  135.    RW=0;
  136.    E=0;
  137.    E=1;

  138. }

  139. void ShowState()    //顯示狀態與速度
  140. {
  141.     int i=0;
  142.     while(SpeedChar[i]!='\0')
  143.     {
  144.        delay();
  145.        show_lcd(SpeedChar[i]);
  146.        i++;
  147.     }

  148.     delay();
  149.     P1=0x80 | 0x0d;
  150.     cmd_wr();

  151.     i=0;
  152.     while(SPEED[i]!='\0')
  153.     {
  154.        delay();
  155.        show_lcd(SPEED[i]);
  156.        i++;
  157.     }

  158.     delay();
  159.     P1=0xC0;
  160.     cmd_wr();

  161.     i=0;
  162.     while(StateChar[i]!='\0')
  163.     {
  164.        delay();
  165.        show_lcd(StateChar[i]);
  166.        i++;
  167.     }

  168.     delay();
  169.     P1=0xC0 | 0x0A;
  170.     cmd_wr();

  171.     i=0;
  172.     if(RunState==RIGHT_RUN)
  173.         while(STATE_CW[i]!='\0')
  174.         {
  175.           delay();
  176.           show_lcd(STATE_CW[i]);
  177.           i++;
  178.         }
  179.     else
  180.        while(STATE_CCW[i]!='\0')
  181.         {
  182.           delay();
  183.           show_lcd(STATE_CCW[i]);
  184.           i++;
  185.         }

  186. }
  187. void clock(unsigned int Delay)   //1ms延時程序
  188. {  unsigned int i;
  189.    for(;Delay>0;Delay--)
  190.     for(i=0;i<124;i++);

  191. }

  192. void DoSpeed()
  193. {
  194.     SPEED[0]=(1000*6/RunSpeed/100)+48;
  195.     SPEED[1]=1000*6/RunSpeed%100/10+48;
  196.     SPEED[2]=1000*6/RunSpeed%10+48;
  197. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:636984 發表于 2019-11-7 14:40 | 只看該作者
我下載您的程序,線路圖接法也是一樣的,為什么我的顯示屏不顯示東西啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人免费视频 | 成人欧美在线 | 一区视频 | 91久久精品国产免费一区 | 超碰伊人久久 | 精品国产乱码久久久久久丨区2区 | 亚洲自拍偷拍免费视频 | 国产精品色 | 亚洲精品乱码久久久久久蜜桃91 | 午夜小视频免费观看 | 久久成人精品视频 | 91porn成人精品 | 国产欧美一区二区三区久久手机版 | 亚洲精品成人网 | 欧美视频成人 | 女女百合av大片一区二区三区九县 | 91高清免费 | 久久久久久久久国产精品 | 亚洲国产成人精品女人久久久 | 成人国产免费视频 | 99精品电影 | 久久国产精品偷 | 日本欧美在线 | 国产成人网 | 日韩精品一区二区三区四区视频 | 欧美一区二区精品 | 91成人影院 | 日本免费黄色一级片 | 少妇黄色 | 欧美性受xxxx白人性爽 | 一区视频在线免费观看 | 日韩毛片中文字幕 | 国产中文字幕在线观看 | 男女精品久久 | 久久久久成人精品 | 国产精品不卡 | 精品久久久久久亚洲精品 | 精品国产乱码久久久久久蜜柚 | 中国大陆高清aⅴ毛片 | 日本不卡免费新一二三区 | 日本在线黄色 |