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

標題: 單片機+LCD1602+L297+L298步進電機的仿真電路+代碼 [打印本頁]

作者: sheng7533967    時間: 2019-1-29 02:29
標題: 單片機+LCD1602+L297+L298步進電機的仿真電路+代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序:
  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下載地址:
LCD1602VS步進電機.rar (20.9 KB, 下載次數: 167)


作者: redred    時間: 2019-5-6 21:03
好東西,馬上收藏學習
作者: redred    時間: 2019-5-7 10:16
為什么運行有錯誤啊,難道是我沒有頭文件?
作者: 還有誰?    時間: 2020-4-5 10:39
不錯不錯,很棒!
作者: 123。、、    時間: 2020-7-5 18:27
為什么運行速度有限制?

作者: 1AJ1987402    時間: 2021-2-27 15:21
一堆錯誤啊,求幫助,是不是我缺少頭文件啊?
作者: wr_sy    時間: 2021-3-24 19:08
程序文件不全,void show_lcd(int i)//LCD顯示子程序有問題,沒復制全。
作者: xinyu1650    時間: 2022-3-11 10:52
代碼有錯誤,運行不了,希望作者重新上傳




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 三a毛片 | 亚洲在线观看视频 | 免费永久av | 亚洲啪啪一区 | 欧美一区二区视频 | 日本一区二区不卡 | 亚洲啪啪 | 国产粉嫩尤物极品99综合精品 | av免费看在线 | 影音先锋亚洲资源 | 久久精品日产第一区二区三区 | aaaa日韩| 欧美福利在线 | 91精品国产综合久久小仙女图片 | 色一级片| 日韩av中文 | 日韩在线小视频 | 一级黄色毛片免费 | 一区二区中文字幕 | 国产午夜精品久久久 | 欧美日韩高清 | 亚洲午夜精品视频 | 免费一区二区三区 | 欧美a区| 午夜小视频在线播放 | 91免费入口| 视频一区二区在线 | 久久久久久一区 | 国产免费福利在线 | 成人av电影免费在线观看 | 欧美精品v国产精品v日韩精品 | 久久久精品一区二区三区 | 久久久久久国产精品免费免费 | 91精品久久久久 | www.久久99 | 国产精品亚洲二区 | 国产综合久久 | 亚洲第一色站 | 狠狠综合久久av一区二区小说 | 免费成人高清在线视频 | 国内久久精品 |