找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1341|回復: 2
收起左側

幫忙看一下單片機PWM加減速程序,有些不明白

[復制鏈接]
ID:684734 發(fā)表于 2020-12-26 16:24 | 顯示全部樓層 |閱讀模式
以上程序,在加減速那里一直不明白怎么怎么改變占空比,望各位老大指點!
  while(1)  
         {  
            b=0; 
            while(!b);  
            if(N==X)    //X初始值為50
            PWM=0; 
            if(N==100)   //N為總頻率段
           // {
           //    N=0;
           // }
            break;  
            N++; 

主要是這一段,真的不明白

單片機源程序如下:
#include<reg52.h> 
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int 
uchar N=0;  //總頻率段
uchar X=50; //占空比初始值50%
uint a,b;
sbit RS=P3^0; 
sbit RW=P3^1; 
sbit EN=P3^2; 
uchar code str1[]={"FORWARD"};      //前進
uchar code str2[]={"SPEED UP"};     //加速
uchar code str3[]={"REVERSAL"};     //后退
uchar code str4[]={"SPEED DOWN"};   //減速
uchar code str5[]={"STOP"};         //停機
uchar data disdata[5]; 
void delay1ms(uint ms) //延時0.1毫秒(不夠精確的)
{
   uint i,j;
   for(i=0;i<ms;i++)
   for(j=0;j<100;j++);
}
void wr_com (uchar com) // 寫指令 // 液晶顯示屏
{
   delay1ms(1);
   RS=0;
   RW=0;
   EN=0;
   P2=com
   delay1ms(1);    
   EN=1; 
   delay1ms(1);    
   EN=0;   
} 
void wr_dat(uchar dat) // 寫數(shù)據(jù) // 液晶顯示屏
{
   delay1ms(1);
   Rs=1;
   RW=0;
   EN=0;
   P2=dat
   delay1ms(1);    
   EN=1; 
   delay1ms(1);    
   EN=0; 
} 
 void lcd_init() // 初始化設置 //
{
   delay1ms(15);
   wr_com(0x38);    
   wr_com(0x08);     
   wr_com(0x01);      
   wr_com(0x06);       
   wr_com(0x0c); } 
void display (uchar *P) // 顯示 //
{
   while(*p!='\0') 
   { 
      wr_dat(*p); 
      p++; 
      delay1ms(1); 
   } 
} 
init_ Play() / / 初始化顯示
{
   lcd_init();
   wr_com(0x80);
   display(str1);
   wr_com(0xc0);
   display(str2);
   while(1);
} 
Sbit PWM=P3^6;  // PWM 輸出腳
sbit P1_2=P1^2; // 正轉
sbit P1_3=P1^3; // 反轉
sbit P1_4=P1^4; // 加速
sbit P1_5=P1^5; // 減速
sbit P1_6=P1^6; // 停止
sbit P1_1=P1^1; 
sbit P1_0=P1^0;  
sbit P0_0=P0^0; 
sbit P0_1=P0^1; 
sbit P0_2=P0^2; 
sbit P0_3=P0^3;  
void timer1() interrupt 3
{ 
   TH1=0Xff; 
   TL1=0x17; 
   b++; 
}  
main() 
{ 
   TMOD=0x10; 
   IE=0X88; 
   TH1=0Xff; 
   TL1=0X17; 
   TR0=1; 
   TR1=1; 
   a=0; 
   b=0;  
   while(1) 
   { 
      PWM=1;  
      while(1)  
         {  
            b=0; 
            while(!b);  
            if(N==X)    //X初始值為50
            PWM=0; 
            if(N==100)   //N為總頻率段
           // {
           //    N=0;
           // }
            break;  
            N++; 
            if(P1_2==0) // M1 正轉
            {
               P1_1=1;
               P1_0=0;
               X=50;
               P0_0=0;
               P0_1=1; 
               lcd_init();
               wr_com(0x80);
               display(str1);
           } 
            if(P1_3==0) // M1 反轉
            {
               P1_1=0;
               P1_0=1;
               X=50;
               P0_0=1;
               P0_1=0; 
               lcd_init();
               wr_com(0x80);
               display(str3);
           } 
            if(P1_6==0) // M1 停止
            {
               P1_1=1;
               P1_0=1;
               P0_0=1;
               P0_1=1;
               P0_2=1;
               P0_3=1; 
               lcd_init();
               wr_com(0x80);
               display(str5);
            }  
             if(P1_4==0)  //加速
            {  
                P1_1=1;
                P1_0=0;
                X=100;
                P0_2=0; 
                P0_3=1; 
                lcd_init();
                wr_com(0xc0);
                display(str2);
            }  
             if(P1_5==0)   //減速                     

             {         
                P1_1=1;
                P1_0=0;
                X=20;
                P0_2=1;
                P0_3=0; 
                lcd_init();
                wr_ com(0xc0);
                display(str4);
            }
        } 
        N=0;
    }  
}


回復

使用道具 舉報

ID:684734 發(fā)表于 2020-12-26 16:30 | 顯示全部樓層
最好是綠色這一段,求大神解釋,謝謝啦
回復

使用道具 舉報

ID:852300 發(fā)表于 2020-12-28 11:09 | 顯示全部樓層
程序中改占空比是直接定義X值,啟動時X=50,加速直接給X=100,減速是X=20了!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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