找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5310|回复: 1
打印 上一主题 下一主题
收起左侧

直流电机正反转及PWM调速的单片机仿真与源程序

[复制链接]
跳转到指定楼层
楼主

直流电机正反转及PWM调速的proteus仿真原理图如下:


单片机源程序如下:
  1. #include<reg51.h>

  2. sbit In1 = P1^0;

  3. sbit In2 = P1^1;

  4. sbit ENa = P1^2;

  5. sbit up = P1^4;

  6. sbit dn = P1^5;

  7. sbit Kp = P1^6;

  8. sbit Kn = P1^7;

  9. sbit LE1 = P2^6;

  10. sbit LE2 = P2^7;

  11. bit p = 0;

  12. unsigned char  w = 70;

  13. void disp2(){

  14.         if(w == 100){
  15.        
  16.            P2 = P2&0xf0;

  17.            LE2 = 0;LE2 = 1;

  18.            LE1 = 0;LE1 = 1; }

  19.         else{
  20.        
  21.           P2 = (P2&0xf0        )| (w/10);

  22.            LE2 = 0;LE2 = 1;

  23.            P2 = (P2&0xf0)| (w%10);

  24.                 LE1 = 0;LE1 = 1;} }

  25. void k_up(){

  26.         unsigned char n = 0;
  27.          
  28.         unsigned int t;

  29.         if(w!=100){        w++; }

  30.         else  w = 100;

  31.         disp2();

  32.         for(t=0;t<5000;t++);

  33.         while(up == 0){
  34.        
  35.          for(t=0;t<2000;t++);

  36.          n++;

  37.          if(n==20) { n = 0;

  38.           if(w!=100) {        w++;}

  39.           else  w = 100;

  40.         disp2( );}}}

  41. void k_dn( ){

  42.         unsigned char n = 0;
  43.          
  44.         unsigned int t;

  45.         if(w!=20)        w--;

  46.         else  w = 20;

  47.         disp2();

  48.         for(t=0;t<5000;t++);

  49.         while(dn == 0){
  50.        
  51.          for(t=0;t<2000;t++);

  52.          n++;

  53.          if(n==20) { n = 0;

  54.           if(w!=20)       
  55.           
  56.           w--;

  57.           else  w = 20;

  58.         disp2();}}}

  59. void main(){

  60.    TMOD = 0x10;

  61.    TH0 = 256 - w*2;

  62.    TL0 = 256 - (100 - w) *2;

  63.         IP = 0x02;

  64.         IE = 0x82;

  65.         TR0 = 1;
  66.        
  67.         disp2();

  68.         while(1){
  69.        
  70.          if((up == 0)&(dn != 0))          k_up();

  71.          if((up != 0)&(dn == 0))          k_dn();}}

  72. void t0() interrupt 1{

  73.    if (w==100)        p=1;
  74.    
  75.    else        p = ~p;

  76.    if(p ==0) TH0 = 256 - (100-w) *2;
  77.    
  78.    else TH0 = 256 - w*2;

  79.    if ((Kp == 0)& (Kn !=0))  {

  80.       if(p==1) {
  81.           
  82.                    ENa = 1;

  83. ……………………

  84. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
直流电机正反转及PWM调速.rar (60.65 KB, 下载次数: 105)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:318744 发表于 2018-4-29 20:10 | 只看该作者
有没有程序的流程图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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