微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求纠错,急急急急急急!

求纠错,急急急急急急!

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar R,ch;                         //定义接收缓冲区
bit ReceOK_Flag = 0;
uchar code zz[]={0x01,0x02,0x04,0x08};
uchar code fz[]={0x08,0x04,0x02,0x01};
uchar code azz[]={0x10,0x20,0x40,0x80};
uchar code afz[]={0x80,0x40,0x20,0x10};
void send_char_com(uchar ch) ;
void Delay_ms(uint x)                   //延时程序,xms是形式参数
{
        uint y, z;
        for(y=x;y>0;y--)                   // i=xms,即延时xms, xms由实际参数传入一个值
                for(z=10;z>0;z--);             //此处分号不可少
}
void series_init()
{
        PCON &= 0x7F;                     //波特率不倍速
        SCON = 0x50;                     //8位数据,可变波特率
        //AUXR &= 0xBF;                         //定时器1时钟为Fosc/12,即12T
//        AUXR &= 0xFE;                         //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                         //清除定时器1模式位
        TMOD |= 0x20;                         //设定定时器1为8位自动重装方式
        TL1 = 0xF3;                             //设定定时初值
        TH1 = 0xF3;                             //设定定时器重装值
        ET1 = 0;                             //禁止定时器1中断
        TR1 = 1;                             //启动定时器1
        EA = 1;
        ES = 1;
}
void motor_zz()//第二个电机正转
{
    uint i,j;
    for(i=0;i<8;i++)      //转的角度
    {
        for(j=0;j<4;j++)//转圈
        {
            P2=zz[j];//开始转
        }
    }
}         
void motor_fz()//第二个电机反转
{
    uint i,j;
    for(i=0;i<8;i++)//转的角度
    {
        for(j=0;j<4;j++)//转圈
        {
            P2=fz[j];//开始转
        }
    }
}
void motor_zz1()//第一个电机正转
{
    uint i,j;
    for(i=0;i<8;i++)//转的角度
    {
        for(j=0;j<4;j++)//转圈
        {
            P2=azz[j];//开始转
        }
    }
}
void motor_fz1()//第一个电机反转
{
    uint i,j;
    for(i=0;i<8;i++)//转的角度
    {
        for(j=0;j<4;j++)//转圈
        {
            P2=afz[j];//开始转
        }
    }
}
void main()
{
    unsigned int i;
        series_init();                             //调串行口初始化函数
        while(1)                                 //等待中断
        {       
        P1=0xff;//初始化P1全部高电平                                       
            if( ReceOK_Flag ){        ReceOK_Flag = 0;
                        SBUF = R;
                }
                else if(R==1)
                {
                    motor_zz();
                }
            else if(R==2)
                {
                    motor_fz();
                }
            else if(R==3)
                {                         
                    motor_zz1();
                }
                else if(R==4)
                {
                    motor_fz1();
                }
                else if(R==0)
                {
                    P1==0xfb;                                                               
            }
        else if(P1==0xfe)//判断1键是否按下
        {
            while(P1==0xfe);//软件去抖,确认是1键按下
            P0=0xfe;//1灯亮
            motor_zz();//第二个电机转
                        delay_ms()
        }
        else if(P1==0xfd)//2键按下
        {
            while(P1==0xfd)//软件去抖,确认2键按下
            P0=0xfd;//2灯亮
            motor_fz();//第二个电机反转
                        delay_ms()
        }
            if(P1==0xef)//5键按下
        {
            while(P1==0xef);//软件去抖,确认5键按下
            P0=0xef;//5灯亮
            motor_zz1();//第一个电机正转
                        delay_ms()
        }
        else if(P1==0xdf)//6键按下
        {
            while(P1==0xdf)//软件去抖,6键按下
            P0=0xdf;//6灯亮
            motor_fz1();//第一个点机反转
                        delay_ms()
        }
        else
        {
            P0=0xfb;
            P2=0x03;
        }
    }
}
void send_char_com(uchar ch)
{
    SBUF=ch;
    while(TI==0);
    TI=0 ;
}
void series() interrupt 4
{
        if( RI == 1 ){
            RI = 0;                                   
            R = SBUF;                  
                ReceOK_Flag = 1 ;
        }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top