欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于c51單片機的直流電機調速代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:127742 發表于 2016-6-22 22:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>  //包含頭文件
#define uint unsigned int  //宏定義
#define uchar unsigned char
                                                                 
sbit KEY1 = P3^0;    // 定義調速按鍵S1
sbit KEY2 = P3^5;    // 定義調速按鍵S2
sbit PWM = P1^6;    // 定義調速端口
sbit PWM2= P1^7
;   
sbit lcden = P1^0;     //定義1602 使能端、RS
sbit lcdrs = P1^1;
uchar code table1[]="+ 3  dang " ;   //定義直流電機正轉檔位顯示
uchar code table2[]="+ 2  dang ";
uchar code table3[]="+ 1  dang ";
uchar code table0[]="+ 0  dang ";
uchar code table11[]="- 3  dang " ;     //定義直流電機反轉檔位顯示
uchar code table22[]="- 2  dang ";
uchar code table33[]="- 1  dang ";
uchar code table00[]="- 0  dang ";
unsigned char CYCLE;  //定義周期
unsigned char PWM_ON ;  //定義正轉高電平時間
unsigned char PWM_DOWN ;  //定義正轉高電平時間
unsigned char PWM_Num2;
unsigned char PWM_Num;
uchar num;
/******************************************************************/
/*                       延時函數1 2                           */
/******************************************************************/
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)                                                                                 
for(y=110;y>0;y--);     
}
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/*                          1602顯示函數                           */
/******************************************************************/
void write_com(uchar com)
{
lcdrs=0;
P2=com;                                                            
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P2 = date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init()   //1602初始化
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);}
void Display0()  //正轉檔位零顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table0[num]);
delayms(5);}
}     
void Display3()  //正轉檔位一顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table3[num]);
delayms(5);}
}     
void Display2()  //正轉檔位二顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table2[num]);
delayms(5);}
}                  
void Display1()   //正轉檔位三顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table1[num]);
delayms(5);}
}                  
void Display00()   //反轉  檔位零顯示  
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table00[num]);
delayms(5);}
}     
void Display33()  //反轉檔位一顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table33[num]);
delayms(5);}
}     
void Display22()  //反轉檔位二顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table22[num]);
delayms(5);}
}                  
                     
void Display11()  //反轉檔位三顯示
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{write_data(table11[num]);
delayms(5);}
}                  
      
/******************************************************************/
/*                          主函數                                */
/******************************************************************/
main()
{
TMOD |=0x01;           //定時器設置
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;  //定時1ms
IE= 0x82;               //打開中斷
TR0=1;                 //啟動定時器0
CYCLE = 10;            //時間可以調整
P3=0x21;
while(1)
{
if(!KEY1)               //按下按鍵S1  使直流電機正轉
{
delay(10000);
  if(!KEY1)
    {
         PWM2=0;
         PWM_Num2=0;
         PWM_ON=11;
      PWM_Num++;
         if(PWM_Num==4)
PWM_Num=0;
     switch(PWM_Num)  //調制占空比
{
      case 0:Display0();PWM_DOWN=10;break; //占空比為0
      case 1:Display1();PWM_DOWN=1;break;  //占空比為90
case2:Display2();PWM_DOWN=5;break;   //占空比為50%
case 3:Display3();PWM_DOWN=8;break;  //占空比為20%
default:break;
      }
         if(PWM_Num==4)
PWM_Num=0;
   }
  }
if(!KEY2)               ///按下按鍵S2  使直流電機反轉
{
delay(10000);
if(!KEY2)
  {
PWM=0;
PWM_DOWN=11       ;
PWM_Num=0;
  PWM_Num2++;
if(PWM_Num2==4)
PWM_Num2=0;
  switch(PWM_Num2)  //調制占空比
{
      case 0:Display00();PWM_ON=10;break; //占空比為0
      case 1:Display11();PWM_ON=1;break;  //占空比為90
      case 2:Display22();PWM_ON=5;break;  //占空比為50
      case 3:Display33();PWM_ON=8;break;  //占空比為20
      default:break;
      }
if(PWM_Num2==4)
PWM_Num2=0;
   }
  }
}                                                         
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表