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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+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)

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

使用道具 舉報

沙發
ID:528895 發表于 2019-5-6 21:03 | 只看該作者
好東西,馬上收藏學習
回復

使用道具 舉報

板凳
ID:528895 發表于 2019-5-7 10:16 | 只看該作者
為什么運行有錯誤啊,難道是我沒有頭文件?
回復

使用道具 舉報

地板
ID:475247 發表于 2020-4-5 10:39 | 只看該作者
不錯不錯,很棒!
回復

使用道具 舉報

5#
ID:664592 發表于 2020-7-5 18:27 | 只看該作者
為什么運行速度有限制?
回復

使用道具 舉報

6#
ID:578423 發表于 2021-2-27 15:21 | 只看該作者
一堆錯誤啊,求幫助,是不是我缺少頭文件啊?
回復

使用道具 舉報

7#
ID:885462 發表于 2021-3-24 19:08 | 只看該作者
程序文件不全,void show_lcd(int i)//LCD顯示子程序有問題,沒復制全。
回復

使用道具 舉報

8#
ID:142698 發表于 2022-3-11 10:52 | 只看該作者
代碼有錯誤,運行不了,希望作者重新上傳
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品91 | 一级黄a视频 | 又黑又粗又长的欧美一区 | 91精品久久久久久久久 | 亚洲国产69 | 国产伦一区二区三区视频 | 日本国产一区二区 | 在线成人av| 国产清纯白嫩初高生在线播放视频 | 久久精品国产一区 | 在线视频第一页 | 精品一区二区三区在线观看国产 | 国产一级片免费视频 | 麻豆av在线免费观看 | 日韩中文字幕 | 久久久精品影院 | 国产精品免费一区二区三区四区 | 国产精品久久久久久久免费观看 | 日韩av一区二区在线观看 | 国产精品1区 | 一区二区中文字幕 | 亚洲国产一区在线 | 91在线视频播放 | 中文字幕精 | 激情欧美日韩一区二区 | 伊人精品在线视频 | 91久久精品一区二区二区 | 亚洲黄色网址视频 | 羞羞视频网站免费看 | 成年人在线 | 国产在线网址 | 亚洲一区高清 | 91大神在线看 | 欧美一区二区在线 | 亚洲精品一区二区 | 欧美日韩精品一区二区三区蜜桃 | 亚洲国产精品久久久久秋霞不卡 | 四虎成人免费电影 | 99热精品在线观看 | 久久av网站| 欧美视频一区二区三区 |