单片机按钮设置影响变量问题

这是用keil编的51单片机代码,加速按钮和减速按钮本来能调setspeed的数值,但是我在223行附近加了几行关于pwm1和pwm2代码之后运行的时候按钮就不管用了,是我设置的pwm1和2变量影响了setspeed么
#include<reg51.h>
unsigned char code table[]="speed:";                  //想要显示的字符
unsigned char code table_error[]="error!";
unsigned char code table_none[]="none";
unsigned char code table_unit[]="rps";
unsigned char code table_set[]="set";
unsigned char code table_high_tem[]="high_tem!";
unsigned int speed;                                    //数据
unsigned int setspeed=96;
unsigned int control=0;

unsigned int count=0;                                   //计数
unsigned char ms=0;                                    //定时
unsigned int o_f=0;                                    //开关

float pwm1=25.0;
float pwm2=75.0;

sbit IN0=P2^3;                                            //电机控制
sbit IN1=P2^4;                                            //电机控制
sbit E=P2^5;                                            //电机控制

sbit RS=P2^0;                                           //寄存器选择引脚
sbit RW=P2^1;                                           //读写引脚
sbit EN=P2^2;                                           //片选引脚

sbit tem=P1^1;                                           //过温断路

sbit key1 = P1^5;                            //加速按钮
sbit key2 = P1^6;                           //减速按钮
sbit key3 = P1^7;                            //程序开关

//sbit p=P2^7;                                   //测试口
sbit P2_6=P2^6;

void delay(unsigned int x){                               //延时函数
    unsigned int i;
    for(i=x;i>0;i--);
}

void write_com(unsigned char com){                     //写指令函数
    P0 = com;                                          //送出指令
    RS=0;RW=0;EN=1;                                     //写指令时序
    delay(10);
    EN=0;
}

void write_dat(unsigned char dat){                      //写数据函数
    P0 = dat;                                           //送出数据
    RS=1;RW=0;EN=1;                                       //写数据时序
    delay(10);
    EN=0;
}

void init(){                                           //初始化
    //write_com(0x01);                                   //清屏
    write_com(0x38);                                   //设置16*2显示,5*7点阵
    //write_com(0x0f);                                   //开显示,显示光标且闪烁
    write_com(0x0c);                                   //开显示,光标不显示
    write_com(0x06);                                   //地址加1,写入数据时光标右移一位
}
void interrupt_int() {                       //转速测量-开计数器
   TMOD=0x21;      //启动T0,定时方式一
   TH0=0x3C;      //装载计数初值
   TL0=0xb0;      

   TH1=0xe7;
   TL1=0xe7;

   ET0=1;          //开T0中断
   TR0=1;          //启动T0

   ET1=1;
   TR1=1;

   EX0=1;          //开INT0
   IT0=1;          //设置INT0为边沿触发

   EA=1;          //开总中断
 }

void int0() interrupt 0{
   count++;    
}
void key(){               //按钮控制
    if (key1 == 0){
        delay(10);            //消抖
        if (key1 == 0){
                if (setspeed < 9999)
                setspeed++;
                while (key1 == 0);
        }
    }
    if (key2 == 0){
        delay(10);
        if (key2 == 0){
            if (setspeed>0)
                setspeed--;
            while (key2 == 0);
        }
    }
}              
void t0() interrupt 1{
   TH0=0x3C;      
   TL0=0xb0;      
   ms++;                             //定时变量,每50ms加一
   key();
   if(ms>=20){                          //1S定时
       ms=0;                        //清除计时
       speed=count/2;                 //每秒转动的圈数
       count=0;                        //重新计数                  
    }

 }

void t1() interrupt 3{
    control++;
    if(control==5){
        P2_6=!P2_6;
        control=0;
    }
}

void high_tem(){
    unsigned char i;
    write_com(0x01);
    for(i=0;i<9;i++){                                   
        write_dat(table_high_tem[i]);
    }
    while(tem==0)
    write_com(0x02);    
    
}
void print(){
    unsigned char i;
        init();
        write_com(0x80);                                   //起点为第一行第一列
        for(i=0;i<6;i++){                                   //写入第一行,speed:
            write_dat(table[i]);
        }
                for(i=0;i<3;i++){                                   
            write_dat(' ');
        }
        if(speed>9999)                                    //超过4位数时输出“error”
            for(i=0;i<6;i++){                               
                write_dat(table_error[i]);
            }
        else{                                                
            if(speed>999)                                //数据部分speed
                write_dat(0x30+speed/1000%10);            //输入千位        
             else
                write_dat(' ');
    
            if(speed>99)
                write_dat(0x30+speed/100%10);            //输入百位    
             else
                write_dat(' ');
    
            if(speed>9)
                write_dat(0x30+speed/10%10);            //输入十位    
             else
                write_dat(' ');
               if(speed>0)write_dat(0x30+speed%10);        //输入个位
            if(speed==0)                                //静止时输出“none”
                for(i=0;i<4;i++){                               
                    write_dat(table_none[i]);
                }    
        }
        for(i=0;i<3;i++){                                   //输入单位
                write_dat(table_unit[i]);
            }
    
    
    
        write_com(0xc0);                                   //起点为第二行第一列
        for(i=0;i<3;i++){                               
                write_dat(table_set[i]);
            }
        for(i=0;i<6;i++){                               
            write_dat(table[i]);
        }
    
            if(setspeed>9999)                            //超过4位数时输出“error”
            for(i=0;i<6;i++){                               
                write_dat(table_error[i]);
            }
        else{
                                        
            if(setspeed>999)                            //数据部分setspeed
                write_dat(0x30+setspeed/1000%10);        //输入千位        
             else
                write_dat(' ');
    
            if(setspeed>99)
                write_dat(0x30+setspeed/100%10);        //输入百位    
             else
                write_dat(' ');
    
            if(setspeed>9)
                write_dat(0x30+setspeed/10%10);            //输入十位    
             else
                write_dat(' ');
    
                write_dat(0x30+setspeed%10);            //输入个位
    
        }
        for(i=0;i<3;i++){                                   //输入单位
            write_dat(table_unit[i]);
        }
    

    }    

void delay_deal(unsigned int n){                        //转速控制延时
    unsigned int i=0,j=0;
    for(i=0;i<n;i++){
    
        for(j=0;j<120;j++){
        }
    }
}
void deal(){                                                //转速控制
    pwm1=setspeed*100/192;                //周期内高电平持续的时间
    pwm2=100-pwm1;                    //周期内低电平持续的时间                                       
    IN0=0;
    IN1=1;
    delay_deal(pwm1);
    IN1=0;
    delay_deal(pwm2);
    E=1;
}
void key_o(){                                              //开关控制
        if (key3 == 0){
        delay(20);
        if(key3==0){            
            write_com(0x01);    
        }
        while(key3==0);
    }
}
void main(){
    interrupt_int();
    tem=1;

    if(key3==0) key_o();                            //关机按钮

    while(tem==0)high_tem();                        //过温断路

    while(tem==1&&key3==1){                                                
        print();                                    //显示函数
                                            //转速控制函数
        }                                            
     while(1){
     deal();
     }
}

pwm运算前加两个过渡变量,把setspeed和speed转换成float型,再用这两个float型数据去计算pwm1,pwm2试试

51 单片机,RAM有限,确认RAM下是否够用?

之前是可以正常运行的吗?