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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4759|回復: 3
收起左側

一個有proteus,單片機源程序的電機測速文件

[復制鏈接]
ID:243192 發表于 2019-5-9 21:54 | 顯示全部樓層 |閱讀模式
電機測速,大家一起學習下。仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  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. #define RIGHT_RUN 1
  10. #define LEFT_RUN 0
  11. sbit RS=0xA0;
  12. sbit RW=0xA1;
  13. sbit E=0xA2;

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

  40.     inti_lcd();
  41.     DoSpeed();      
  42.     ShowState();
  43.     while(1)
  44.     {
  45.       clock(RunSpeed);
  46.       P0_1=P0_1^0x01;
  47.     }

  48. }

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


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

  66. }

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

  76. }

  77. //中斷1:減速程序
  78. void SpeedDowm() interrupt 2
  79. {   

  80.     if(RunSpeed<=100)
  81.         RunSpeed=RunSpeed+2;
  82.     DoSpeed();
  83.     P1=0x01;
  84.     cmd_wr();
  85.     ShowState();


  86. }



  87. void inti_lcd()
  88. {

  89.    P1=0x38;
  90.    cmd_wr();
  91.    delay();

  92.    P1=0x01;     //清除
  93.    cmd_wr();
  94.    delay();

  95.    P1=0x0f;
  96.    cmd_wr();
  97.    delay();

  98.    P1=0x06;
  99.    cmd_wr();
  100.    delay();

  101.    P1=0x0c;
  102.    cmd_wr();
  103.    delay();
  104. }

  105. void cmd_wr()           //寫控制字
  106. {
  107.    RS=0;
  108.    RW=0;
  109.    E=0;
  110.    E=1;
  111. }

  112. void show_lcd(int i)   //LCD顯示子程序
  113. {  
  114.    P1=i;
  115.    RS=1;
  116.    RW=0;
  117.    E=0;
  118.    E=1;

  119. }

  120.     delay();
  121.     P1=0x80 | 0x0d;
  122.     cmd_wr();

  123.     i=0;
  124.     while(SPEED[i]!='\0')
  125.     {
  126.        delay();
  127.        show_lcd(SPEED[i]);
  128.        i++;
  129.     }

  130.     delay();
  131.     P1=0xC0;
  132.     cmd_wr();

  133.     i=0;
  134.     while(StateChar[i]!='\0')
  135.     {
  136.        delay();
  137.        show_lcd(StateChar[i]);
  138.        i++;
  139.     }

  140.     delay();
  141.     P1=0xC0 | 0x0A;
  142.     cmd_wr();

  143.     i=0;
  144.     if(RunState==RIGHT_RUN)
  145.         while(STATE_CW[i]!='\0')
  146.         {
  147.           delay();
  148.           show_lcd(STATE_CW[i]);
  149.           i++;
  150.         }
  151.     else
  152.        while(STATE_CCW[i]!='\0')
  153.         {
  154.           delay();
  155.           show_lcd(STATE_CCW[i]);
  156.           i++;
  157.         }

  158. }
  159. void clock(unsigned int Delay)   //1ms延時程序
  160. {  unsigned int i;
  161.    for(;Delay>0;Delay--)
  162.     for(i=0;i<124;i++);

  163. }

  164. void DoSpeed()
  165. {
  166.     SPEED[0]=(1000*6/RunSpeed/100)+48;
  167.     SPEED[1]=1000*6/RunSpeed%100/10+48;
  168.     SPEED[2]=1000*6/RunSpeed%10+48;
  169. }

復制代碼

所有資料51hei提供下載:
電機測速.zip (24.26 KB, 下載次數: 67)
回復

使用道具 舉報

ID:488365 發表于 2019-10-12 18:12 | 顯示全部樓層
非常感謝
回復

使用道具 舉報

ID:630260 發表于 2019-10-25 21:52 | 顯示全部樓層
非常感謝!加上閉環調速就是我們這次的課后作業了
回復

使用道具 舉報

ID:795427 發表于 2021-10-28 21:56 | 顯示全部樓層
程序有問題,大家不要浪費積分下載,程序源碼有問題(146行處,即使修復能編譯,但是不能運行仿真),除了hex文件能仿真用,編譯的文件不能仿真。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产黄a一级 | 午夜影院在线观看免费 | 91精品国产综合久久久久久丝袜 | 在线成人精品视频 | 国产精品视频久久久 | 天堂资源| 麻豆国产精品777777在线 | 妖精视频一区二区三区 | 久久久久久av | 精品亚洲91 | 精品国产亚洲一区二区三区大结局 | 欧美黄视频 | 国产精品久久久久久婷婷天堂 | 在线观看国产视频 | 国产成人精品在线 | 国产91观看| 国产精品成人品 | 中文字幕精品一区二区三区精品 | 一区二区在线 | 欧美成人一区二区三区片免费 | 成人国内精品久久久久一区 | 午夜精品一区二区三区在线观看 | 日干夜干 | 亚洲精品美女 | 酒色成人网 | 亚洲一区二区中文字幕 | 成年人免费网站 | 成人精品视频99在线观看免费 | 亚洲在线视频 | 九九精品在线 | 国产综合一区二区 | 精品无码三级在线观看视频 | 日韩成人免费视频 | 成人午夜高清 | 午夜精品 | 成人国产精品免费观看 | 在线亚洲免费 | 亚洲一区综合 | 一区二区三区免费 | 欧美成ee人免费视频 | 真人一级毛片 |