找回密码
 立即注册

QQ登录

只需一步,快速开始

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

帮忙看一下单片机PWM加减速程序,有些不明白

[复制链接]
跳转到指定楼层
楼主
ID:684734 发表于 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) // 写数据 // 液晶显示屏
{
   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;
    }  
}


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

使用道具 举报

沙发
ID:684734 发表于 2020-12-26 16:30 | 只看该作者
最好是绿色这一段,求大神解释,谢谢啦
回复

使用道具 举报

板凳
ID:852300 发表于 2020-12-28 11:09 | 只看该作者
程序中改占空比是直接定义X值,启动时X=50,加速直接给X=100,减速是X=20了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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