标题: 滑动变阻器控制直流电机转速(自己原来做的小实验) [打印本页]

作者: 雪映埃尘    时间: 2014-12-19 20:08
标题: 滑动变阻器控制直流电机转速(自己原来做的小实验)
包含完整代码,Proteus仿真等


源码如下:
  1. #include <at89x51.h>
  2. #define uchar unsigned char
  3. #define unit  unsigned int
  4. sbit eoc=P3^0;
  5. sbit oe =P3^1;
  6. sbit st =P3^3;

  7. sbit s1=P2^5;
  8. sbit s2=P2^6;
  9. sbit s3=P2^7;

  10. sbit P17=P1^7;

  11. sbit  pwm=P3^5;

  12. uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};//数码管共阳级显示0~9,不显示
  13. uchar disp[4]={0,0,0,0};

  14. unit ad_0809;
  15. uchar out;
  16. uchar scale=100;
  17. uchar tt;
  18. void delaynms(unit x);
  19. void display();
  20. void ad0809();
  21. void key();
  22. void InitTimer(void)
  23. {
  24.     TMOD = 0x02;
  25.     TH0 = 0x00;
  26.     TL0 = 0x0FB;
  27.     EA = 1;
  28.     ET0 = 1;
  29.     TR0 = 1;
  30. }


  31. void main()
  32. {

  33.    EA=1;
  34.         EX0=1;
  35.         IT0=1;//下降沿触发,cpu内存占用少,如果是低电平触发,cpu将耗大量内存在中断上,长时间的取ad转换数据
  36.          INTtimer();
  37. while(1)
  38. { s1=s2=s3=0;//channel 0

  39.   P0=0xff;//input
  40.   oe=0;
  41.   st=0;
  42.   st=1;//清0
  43.   st=0;//启动

  44.   ad_0809=out;
  45.   display();
  46.         scale=disp[3]*200/5;

  47. }

  48. }

  49. void EXINTO(void) interrupt 0
  50. {   EA=0;
  51.     EX0=0;
  52.     oe=1;
  53.     out=P0;
  54.     oe=0;
  55.         EA=1;
  56.         EX0=1;
  57.           
  58. }

  59. void delaynms(unit x)       
  60. { while(x-->0)
  61.   {
  62.     unsigned char k;
  63.     for(k=10;k>0;k--);
  64.   }
  65. }


  66. void display()
  67. { unit i,scan;
  68.   disp[3]=(ad_0809*196)/10000;  //the highest bit, 255*49/25=4.99V
  69.   disp[2]=((ad_0809*196)/1000)%10;
  70.   disp[1]=((ad_0809*196)/100)%10;
  71.   disp[0]=((ad_0809*196)/10)%10;
  72.   
  73.   scan=1;
  74.   for(i=0;i<4;i++)
  75.   {
  76.           P2=~scan;
  77.         P1=tab[disp[i]];
  78.         delaynms(10);
  79.         scan<<=1;
  80.         if(i==3)
  81.         {
  82.           P17=1;
  83.         }
  84.   }
  85. }

  86. void timer0_int () interrupt 1 using 2  // T0溢出中断,使用工作组2
  87. {

  88. tt++;     
  89. if(tt==200)   
  90. {
  91. tt=0;   
  92. pwm=1;   
  93. }
  94. if(scale==tt)   
  95. pwm=0;      
  96. }
复制代码


滑动变阻控制电机输出.zip

56.91 KB, 下载次数: 156, 下载积分: 黑币 -5


作者: 51hei电控2112312    时间: 2014-12-20 03:11
学习学习,51黑有你更精彩!!
作者: 成森林    时间: 2015-4-8 10:38
学习学习,谢谢
作者: zrb5688    时间: 2015-4-10 13:19
谢谢楼主分享。
作者: oldblo    时间: 2016-2-28 20:13
值得学习。
作者: XZDT    时间: 2016-6-7 22:37
感谢!!!!
作者: dzbj    时间: 2016-6-8 11:26
感谢楼主 受教了
作者: su520    时间: 2016-6-17 14:02
45665的股份制腺体的
作者: 898762125    时间: 2016-9-17 15:06
好东西
作者: 达达达达达达    时间: 2016-9-17 15:10
多谢楼主
作者: xiaonan    时间: 2016-12-19 21:20
学习,谢谢LZ
作者: 看看快快快    时间: 2018-1-7 16:10
斤斤计较
作者: zqy181818    时间: 2018-1-8 13:16
44.         INTtimer();是否要改成 InitTimer();?
作者: dabill    时间: 2018-12-25 21:46
就想问一下有汇编语言的吗?有的话麻烦发一下,谢谢

作者: 暴走的matlab    时间: 2019-1-5 23:43
谢谢老哥分享,刚好用到这个
作者: 123321hh    时间: 2020-5-20 17:36
与所说内容不符




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1