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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2543|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于l297的51單片機(jī)步進(jìn)電機(jī)轉(zhuǎn)速控制問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
我們用T0來(lái)發(fā)出不同占空比的脈沖來(lái)控制電機(jī)轉(zhuǎn)速,然后用T1去計(jì)T0發(fā)出脈沖的數(shù)量來(lái)達(dá)到我們所需要的步數(shù),達(dá)到步數(shù)后電機(jī)停止并且蜂鳴器響。我們現(xiàn)在的問(wèn)題是用鍵盤(pán)在液晶屏上控制轉(zhuǎn)速和步數(shù)后,發(fā)送給我們的兩個(gè)定時(shí)器作為初值去運(yùn)轉(zhuǎn)電機(jī),但是設(shè)置的轉(zhuǎn)速一旦大于30(r/min),電機(jī)就會(huì)一直轉(zhuǎn)下去不會(huì)停止,蜂鳴器也不會(huì)叫,而且不論轉(zhuǎn)速怎么提升,電機(jī)的轉(zhuǎn)動(dòng)速度都差不多不會(huì)變,只有在轉(zhuǎn)速設(shè)定小于30的時(shí)候才能正常實(shí)現(xiàn)我們的功能,用設(shè)定轉(zhuǎn)速行走我們所規(guī)定的步數(shù)后電機(jī)停止并且蜂鳴器報(bào)警。求51hei論壇大佬進(jìn)行指點(diǎn)!!!

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <reg52.h>      
  2. #include <intrins.h>  
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit  LCD_RS = P2^0;               
  6. sbit  LCD_RW = P2^1;
  7. sbit  LCD_EN = P2^2;
  8. sbit S1=P2^3;   //定義鍵-----進(jìn)入設(shè)置界面
  9. sbit S2=P2^4;   //定義鍵-----調(diào)整光標(biāo)位置
  10. sbit S3=P2^5;   //定義鍵-----調(diào)整光標(biāo)位置數(shù)值
  11. sbit S4=P2^6;   //定義鍵-----保存設(shè)置值
  12. sbit S5=P2^7;   //定義鍵-----發(fā)送鍵
  13. uchar code table1[]="z:0 v:000 b:000";
  14. uchar code table0[]="       000";
  15. uchar S1num,S2num,S3num;

  16. uint z,v1,v2,v3,b1,b2,b3,sv;
  17. uchar i;
  18.   void delay(uint z)      //延時(shí)函數(shù)
  19.   {
  20.    int x,y;
  21.    for(x=z;x>0;x--)
  22.    for(y=110;y>0;y--);
  23.     }
  24.   
  25.   void LCD_write_data(uint dat) //寫(xiě)數(shù)據(jù)
  26.       {
  27.       LCD_RS = 1;
  28.       LCD_RW = 0;
  29.                         LCD_EN = 0;
  30.                         P1=dat;
  31.       delay(5);
  32.       LCD_EN = 1;
  33.       delay(5);
  34.       LCD_EN = 0;
  35.       }
  36.           
  37.   void LCD_write_com(uint com)  //寫(xiě)指令
  38.       {                                 
  39.       LCD_RS = 0;
  40.       LCD_RW = 0;
  41.                         LCD_EN = 0;
  42.                         P1=com;               
  43.       delay(5);
  44.       LCD_EN = 1;
  45.       delay(5);
  46.       LCD_EN = 0;
  47.       }

  48. void init()//1602初始化
  49. {
  50.             z=0;
  51.             v1=0;
  52.             v2=0;
  53.             v3=0;
  54.             b1=0;
  55.             b2=0;
  56.             b3=0;
  57.             sv=0;
  58.             LCD_write_com(0x38);
  59.             LCD_write_com(0x01);
  60.             LCD_write_com(0x06);
  61.             LCD_write_com(0x0c);
  62. }
  63.   void write_v1(uchar add,uint dat)//寫(xiě)轉(zhuǎn)速v函數(shù)
  64.                        
  65. {
  66.             uchar bai;
  67.                         bai=dat;
  68.             LCD_write_com(0xc0+add);
  69.             LCD_write_data(0x30+bai);
  70. }
  71. void write_v2(uchar add,uint dat)//寫(xiě)轉(zhuǎn)速v函數(shù)
  72.                        
  73. {
  74.             uchar shi;
  75.             shi=dat;
  76.             LCD_write_com(0xc0+add);
  77.             LCD_write_data(0x30+shi);
  78. }
  79. void write_v3(uchar add,uint dat)//寫(xiě)轉(zhuǎn)速v函數(shù)
  80.                        
  81. {
  82.             uchar ge;
  83.             ge=dat;
  84.             LCD_write_com(0xc0+add);
  85.             LCD_write_data(0x30+ge);
  86. }
  87. void write_b1(uchar add,uint dat)//寫(xiě)步數(shù)b函數(shù)
  88.                        
  89. {
  90.             uint bai;
  91.                         bai=dat;
  92.             LCD_write_com(0xc0+add);
  93.             LCD_write_data(0x30+bai);

  94. }
  95. void write_b2(uchar add,uint dat)//寫(xiě)步數(shù)b函數(shù)
  96.                        
  97. {
  98.             uint shi;
  99.             shi=dat;
  100.             LCD_write_com(0xc0+add);
  101.             LCD_write_data(0x30+shi);
  102. }
  103. void write_b3(uchar add,uint dat)//寫(xiě)步數(shù)b函數(shù)
  104.                        
  105. {
  106.             uint ge;
  107.             ge=dat;
  108.             LCD_write_com(0xc0+add);
  109.             LCD_write_data(0x30+ge);
  110. }
  111. void write_z(uchar add,uint dat)//寫(xiě)轉(zhuǎn)向z函數(shù)
  112.                        
  113. {
  114.                         uint ge;
  115.             ge=dat;
  116.             LCD_write_com(0xc0+add);
  117.             LCD_write_data(0x30+ge);
  118. }
  119.   void write_sv(uchar add,uint dat)//寫(xiě)實(shí)際轉(zhuǎn)速sv函數(shù)
  120.                        
  121. {
  122.             uint bai,shi,ge;
  123.                         bai=dat/100;
  124.             shi=dat%100/10;
  125.             ge=dat%10;
  126.             LCD_write_com(0x80+add);
  127.             LCD_write_data(0x30+bai);
  128.             LCD_write_data(0x30+shi);
  129.             LCD_write_data(0x30+ge);
  130. }
  131. void display()//1602初始化顯示函數(shù)
  132. {     
  133.             init();
  134.                         LCD_write_com(0x80|0x10);
  135.            for(i=0;i<11;i++)
  136.           {
  137.                         LCD_write_data(table0[i]);
  138.                         delay(5);
  139.     }
  140.                 LCD_write_com(0xc0);
  141.            for(i=0;i<15;i++)
  142.           {
  143.                         LCD_write_data(table1[i]);
  144.                         delay(5);
  145.     }
  146.                 write_z(2,z);
  147.                 write_v1(6,v1);
  148.                 write_v2(7,v2);
  149.                 write_v3(8,v3);
  150.                 write_b1(12,b1);
  151.                 write_b2(13,b2);
  152.                 write_b3(14,b3);
  153.                 write_sv(6,sv);
  154.                 S1num=0;
  155.                 S2num=0;
  156.                 S3num=0;
  157.   }

  158. void keyscan()//鍵盤(pán)掃描函數(shù)
  159. {
  160.         if(S1==0)//按鍵S1按下時(shí)
  161.         {   
  162.             S1num=1;
  163.                 delay(20);
  164.                 if(S1==0)
  165.                 {
  166.                         LCD_write_com(0xc0+2);//光標(biāo)到轉(zhuǎn)向位置處
  167.                         LCD_write_com(0x0f);//光標(biāo)閃爍
  168.                 }
  169.         }
  170.         if(S1num!=0)//只有按鍵S1按下后,S2,S3,S4按鍵操作才有效
  171.         {
  172.                 if(S2==0)//按鍵S2按下時(shí)
  173.                 {
  174.                        
  175.                         delay(20);
  176.                         if(S2==0)
  177.                         {
  178.                                 S2num++;
  179.                           while(!S2);//松手檢測(cè)
  180.                                 if(S2num==0)
  181.                                         {
  182.                                 LCD_write_com(0xc0+2);//光標(biāo)到指定位置
  183.                                         }
  184.                           if(S2num==1)
  185.                           {
  186.                         LCD_write_com(0xc0+6);//光標(biāo)到指定位置
  187.                           }
  188.                            if(S2num==2)
  189.                           {
  190.                         LCD_write_com(0xc0+7);
  191.                           }
  192.                           if(S2num==3)
  193.                           {
  194.                         LCD_write_com(0xc0+8);
  195.                           }
  196.                                 if(S2num==4)
  197.                           {
  198.                         LCD_write_com(0xc0+12);
  199.                           }
  200.                                 if(S2num==5)
  201.                           {
  202.                         LCD_write_com(0xc0+13);
  203.                           }
  204.                                 if(S2num==6)
  205.                           {
  206.                         LCD_write_com(0xc0+14);
  207.                           }
  208.                                 if(S2num==7)
  209.                           {
  210.                                         LCD_write_com(0xc0+2);
  211.                             S2num=0;
  212.                           }
  213.                  }
  214.                  }  
  215.                                 if(S3==0)//按鍵S3按下時(shí)
  216.                 {
  217.                             delay(20);
  218.                                 if(S3==0)
  219.                                 {
  220.                                 while(!S3);
  221.                                         if(S2num==0)
  222.                                         {
  223.                                                 z++;
  224.                                                 if(z==2)
  225.                                                 {
  226.                                                     z=0;
  227.                                                 }
  228.                                                 write_z(2,z);
  229.                                                 LCD_write_com(0xc0+2);
  230.                                         }
  231.                                         if(S2num==1)
  232.                                         {
  233.                                            v1++;
  234.                                                 if(v1==10)
  235.                                                 {
  236.                                                    v1=0;
  237.                                                 }
  238.                                                 write_v1(6,v1);
  239.                                                 LCD_write_com(0xc0+6);
  240.                                         }
  241.                                         if(S2num==2)
  242.                                         {   
  243.                                                         v2++;
  244.                                                         if(v2==10)
  245.                                                         {
  246.                                                             v2=0;
  247.                                                         }
  248.                                                         write_v2(7,v2);
  249.                                                 LCD_write_com(0xc0+7);
  250.                                         }
  251.                                 if(S2num==3)
  252.                                         {
  253.                                                         v3++;
  254.                                                         if(v3==10)
  255.                                                         {
  256.                                                             v3=0;
  257.                                                         }
  258.                                                         write_v3(8,v3);
  259.                                                 LCD_write_com(0xc0+8);
  260.                                         }
  261.                                         if(S2num==4)
  262.                                         {
  263.                                                    b1++;
  264.                                                         if(b1==10)
  265.                                                         {
  266.                                                             b1=0;
  267.                                                         }
  268.                                                         write_b1(12,b1);
  269.                                                 LCD_write_com(0xc0+12);
  270.                                         }
  271.                                         if(S2num==5)
  272.                                         {                               
  273.                                                         b2++;
  274.                                                         if(b2==10)
  275.                                                         {
  276.                                                             b2=0;;
  277.                                                         }
  278.                                                         write_b2(13,b2);
  279.                                                 LCD_write_com(0xc0+13);
  280.                                         }
  281.                                         if(S2num==6)
  282.                                         {
  283.                                                         b3++;
  284.                                                         if(b3==10)
  285.                                                         {
  286.                                                             b3=0;
  287.                                                         }
  288.                                                         write_b3(14,b3);
  289.                                                 LCD_write_com(0xc0+14);
  290.                                         }
  291.                                 }
  292.                             }
  293.            if(S4==0)//按鍵S4按下時(shí)
  294.                  
  295.            {
  296.                   delay(5);
  297.                   if(S4==0)
  298.                   {
  299.                         S1num=0;
  300.                         S2num=0;
  301.                         S3num=0;
  302.                         LCD_write_com(0x0c);
  303.                   }
  304.                 }
  305.            }
  306.          }
  307. void main()
  308. {
  309.             display();//1602顯示
  310.        
  311.             while(1)
  312.              {
  313.                                  keyscan();//不斷檢測(cè)鍵是否按下
  314.                          }
  315. }
復(fù)制代碼

所有資料51hei提供下載:
最新.zip (265.78 KB, 下載次數(shù): 29)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎影院一区二区 | 国产精品久久国产愉拍 | 午夜ww | 亚洲国产精品一区二区三区 | 午夜精品一区二区三区在线视频 | 九九成人 | 日韩在线不卡视频 | 三级免费毛片 | 免费视频一区二区 | 欧美日韩不卡 | 亚洲精品久久久蜜桃网站 | 极品在线 | 最新国产在线 | 天天干免费视频 | 国内av在线 | av大片| 欧美激情综合 | 日韩精品一区二区三区高清免费 | 少妇性l交大片免费一 | 久久精品色欧美aⅴ一区二区 | 99热碰| 久久99精品久久久久久国产越南 | 久久久.com| 欧美 日本 国产 | 国产精品夜色一区二区三区 | 免费同性女女aaa免费网站 | 亚洲精品乱码 | 91精品国产一区二区三区香蕉 | 亚洲成人精品一区 | 一区二区在线免费观看视频 | 国产综合区 | 国产高清在线精品一区二区三区 | 日韩影院一区 | 亚洲精品黄| 国产成人精品免费视频大全最热 | 一区二区三区在线免费观看 | 一区二区三区免费在线观看 | 久久成人一区 | 91精品国产91久久久久久吃药 | a欧美| 亚洲综合区 |