欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10029|回復: 5
收起左側

單片機Proteus仿真實現步進電機正反轉,加減速的功能,同時在lcd上顯示出來

[復制鏈接]
ID:507952 發表于 2019-4-9 15:49 | 顯示全部樓層 |閱讀模式
用protues實現步進電機正反轉,加減速的功能,內附Proteus仿真原理圖,用keil編程的C語言程序。
0.png

單片機源程序如下:
  1. #include <AT89X52.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. void main()
  22. {
  23.         //定時器設置
  24.         TMOD=0x66;
  25.         EA=1;//開中斷
  26.         
  27.         TH0=0xff;//定時器0初始值FFH;
  28.         TL0=0xff;
  29.         ET0=1;
  30.         TR0=1;

  31.         TH1=0xff;//定時器1初始值FFH
  32.         TL1=0xff;
  33.         ET1=1;
  34.         TR1=1;

  35.         IT0=1;//脈沖方式
  36.         EX0=1;//開外部中斷0:加速
  37.         IT1=1;//脈沖方式
  38.         EX1=1;//開外部中斷1:減速
  39.         
  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 SpeedDown()interrupt 2
  79. {
  80.         if(RunSpeed<=100)
  81.                 RunSpeed=RunSpeed+2;
  82.         DoSpeed();
  83.         P1=0x01;
  84.         cmd_wr();
  85.         ShowState();
  86. }
  87. int delay()//判斷LCD是否忙
  88. {
  89.         int a;
  90. start:
  91.         RS=0;
  92.         RW=1;
  93.         E=0;
  94.         for(a=0;a<2;a++);
  95.         E=1;
  96.         P1=0xff;
  97.         if(P1_7==0)
  98.                 return 0;
  99.         else
  100.                 goto start;
  101. }
  102. void inti_lcd()//設置LCD方式
  103. {
  104.         P1=0x38;//設置16*2顯示
  105.         cmd_wr();
  106.         delay();

  107.         P1=0x01;//清除
  108.         cmd_wr();
  109.         delay();

  110.         P1=0x0f;
  111.         cmd_wr();
  112.         delay();

  113.         P1=0x06;//光標移動設置
  114.         cmd_wr();
  115.         delay();

  116.         P1=0x0c;//顯示開及光標設置
  117.         cmd_wr();
  118.         delay();
  119. }
  120. void cmd_wr()//寫控制字
  121. {
  122.         RS=0;
  123.         RW=0;
  124.         E=0;
  125.         E=1;
  126. }
  127. void show_lcd(int i)//LCD顯示子程序
  128. {
  129.         P1=i;
  130.         RS=1;
  131.         RW=0;
  132.         E=0;
  133.         E=1;
  134. }
  135. void ShowState()//顯示狀態與速度
  136. {
  137.         int i=0;
  138.         while(SpeedChar[i]!='\0')        ///char SpeedChar[]="SPEED(n/min)";
  139.         {
  140.                 delay();
  141.                 show_lcd(SpeedChar[i]);
  142.                 i++;
  143.         }
  144.         delay();
  145.         P1=0x80|0x0d;
  146.         cmd_wr();
  147.         i=0;
  148.         while(SPEED[i]!='\0')
  149.         {
  150.                 delay();
  151.                 show_lcd(SPEED[i]); SPEED[3]="050";
  152.                 i++;
  153.         }
  154.                 delay();
  155.                 P1=0xC0;
  156.                 cmd_wr();
  157.                 i=0;
  158.                 while(StateChar[i]!='\0')
  159.         {
  160.                 delay();
  161.                 show_lcd(StateChar[i]);/// char StateChar[]="RUN STATE";
  162.                 i++;
  163.         }
  164.         delay();
  165.         P1=0xC0|0x0A;
  166.         cmd_wr();
  167.         i=0;
  168.         if(RunState==RIGHT_RUN)
  169.                 while(STATE_CW[i]!='\0')
  170.         {
  171.                 delay();
  172. ……………………

  173. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
新建文件夾.zip (41.5 KB, 下載次數: 180)


回復

使用道具 舉報

ID:35873 發表于 2019-4-12 19:18 | 顯示全部樓層
好資料     謝謝分享
回復

使用道具 舉報

ID:93185 發表于 2019-4-12 23:25 | 顯示全部樓層
不能用
回復

使用道具 舉報

ID:522809 發表于 2019-4-27 12:23 | 顯示全部樓層
很好,可以用
回復

使用道具 舉報

ID:762047 發表于 2020-5-27 02:55 來自觸屏版 | 顯示全部樓層
老哥,這個可以再加個星三角啟動嗎
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
ID:786505 發表于 2020-7-2 12:16 | 顯示全部樓層
誰有這個原理圖啊,發一下,謝謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表