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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
用protues實現步進電機正反轉,加減速的功能,內附Proteus仿真原理圖,用keil編程的C語言程序。


單片機源程序如下:
  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)


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

使用道具 舉報

沙發
ID:35873 發表于 2019-4-12 19:18 | 只看該作者
好資料     謝謝分享
回復

使用道具 舉報

板凳
ID:93185 發表于 2019-4-12 23:25 | 只看該作者
不能用
回復

使用道具 舉報

地板
ID:522809 發表于 2019-4-27 12:23 | 只看該作者
很好,可以用
回復

使用道具 舉報

5#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人一区二免费视频软件 | 国产黄色免费网站 | 亚洲欧美日韩系列 | 久久精品国产一区二区三区 | 福利片在线看 | 日韩免费视频一区二区 | 国产精品视频不卡 | 欧美一区二区免费电影 | 日韩精品极品视频在线观看免费 | 久久精点视频 | 岛国精品 | 日韩精品视频在线观看一区二区三区 | 亚洲免费视频网址 | 久久在看 | 久久精品国产一区老色匹 | 国产精品亚洲欧美日韩一区在线 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 成人免费在线视频 | 一区二区三区国产 | 欧美最猛性xxxxx亚洲精品 | 日本精品一区二区三区在线观看视频 | 国产精品精品久久久 | 波多野结衣一区二区 | 99热这里 | 亚洲精品一区二区三区四区高清 | 国产一区中文字幕 | 日韩一级免费大片 | 国产精品久久久久久一区二区三区 | av一区二区三区四区 | 日韩一区二区三区精品 | 国产一区二区三区久久久久久久久 | 免费能直接在线观看黄的视频 | 午夜视频免费网站 | 日韩精品一区二区三区免费视频 | 日韩人体在线 | 国产精品黄视频 | 中文字幕在线一区 | 国产高清一区二区三区 | 91成人精品视频 | 国产乱码精品1区2区3区 | 日本中文字幕在线视频 |