找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9928|回复: 15
收起左侧

滑动变阻器控制直流电机转速(自己原来做的小实验)

  [复制链接]
ID:64771 发表于 2014-12-19 20:08 | 显示全部楼层 |阅读模式
包含完整代码,Proteus仿真等
1.png 0.png

源码如下:
  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

评分

参与人数 2黑币 +55 收起 理由
若冠 + 5 绝世好帖!
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:70769 发表于 2014-12-20 03:11 | 显示全部楼层
学习学习,51黑有你更精彩!!
回复

使用道具 举报

ID:76408 发表于 2015-4-8 10:38 | 显示全部楼层
学习学习,谢谢
回复

使用道具 举报

ID:73030 发表于 2015-4-10 13:19 来自手机 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

ID:106425 发表于 2016-2-28 20:13 | 显示全部楼层
值得学习。
回复

使用道具 举报

ID:125537 发表于 2016-6-7 22:37 | 显示全部楼层
感谢!!!!
回复

使用道具 举报

ID:47286 发表于 2016-6-8 11:26 | 显示全部楼层
感谢楼主 受教了
回复

使用道具 举报

ID:127101 发表于 2016-6-17 14:02 | 显示全部楼层
45665的股份制腺体的
回复

使用道具 举报

ID:139631 发表于 2016-9-17 15:06 | 显示全部楼层
好东西
回复

使用道具 举报

ID:139602 发表于 2016-9-17 15:10 来自手机 | 显示全部楼层
多谢楼主
回复

使用道具 举报

ID:155830 发表于 2016-12-19 21:20 | 显示全部楼层
学习,谢谢LZ
回复

使用道具 举报

ID:272771 发表于 2018-1-7 16:10 | 显示全部楼层
斤斤计较
回复

使用道具 举报

ID:130231 发表于 2018-1-8 13:16 | 显示全部楼层
44.         INTtimer();是否要改成 InitTimer();?
回复

使用道具 举报

ID:454921 发表于 2018-12-25 21:46 | 显示全部楼层
就想问一下有汇编语言的吗?有的话麻烦发一下,谢谢
回复

使用道具 举报

ID:462767 发表于 2019-1-5 23:43 | 显示全部楼层
谢谢老哥分享,刚好用到这个
回复

使用道具 举报

ID:698919 发表于 2020-5-20 17:36 | 显示全部楼层
与所说内容不符
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表