找回密码
 立即注册

QQ登录

只需一步,快速开始

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

智能小车源代码

[复制链接]
跳转到指定楼层
楼主
ID:410899 发表于 2018-10-17 08:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <intrins.h>

void Delay10ms();
void Delay5ms();
void Delay1ms();

#define uchar unsigned char
#define uint unsigned int

sbit a=P1^0;  //电机信号输入
sbit b=P1^1;
sbit c=P1^2;
sbit d=P1^3;
sbit pwm1=P1^4;
sbit pwm2=P1^5;

sbit buzz=P2^7;

uchar cishu; //中断次数
uchar p1;  //p1占空比
uchar p2;  //p2占空比



void qian()   //方向控制
{
        a=1;b=0;c=1;d=0;       
}
void hou()   //方向控制
{
        a=0;b=1;c=0;d=1;
}
void zuo()   //方向控制
{
        a=1;b=0;c=0;d=1;
}
void you()   //方向控制
{
        a=0;b=1;c=1;d=0;
}
void ting()   //方向控制
{
        a=0;b=0;c=0;d=0;
}

void jia()
{
       
        if(p1>29)
        {
                p1=30;p2=30; buzz=0;       
        }
        else
        {
        p1++; p2++;        buzz=1;
        }

}
void jian()
{
       
        if(p1<21)
        {
                p1=20;p2=20;buzz=0;       
        }
        else
        {
        p1--; p2--; buzz=1;
        }

}


uchar RxData()
{
   uchar tmp;   //定义一个临时变量,用来保存接收到的数据
   while (!RI);//等待数据接收完,接收完后时RI会自动置1
   RI = 0;     //清中断标志
   tmp = SBUF; //将接收到的数据保存到tmp中
   return tmp; //返回接收到的数据
}

void UartInit(void)                //9600bps@11.0592MHz
{

        SCON = 0x50;                //8位数据,可变波特率

        TMOD &= 0x00;                //清除定时器1模式位
        TMOD |= 0x21;                //设定定时器1为8位自动重装方式
        TL1 = 0xFD;                //设定定时初值
        TH1 = 0xFD;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1

        TL0 = 0xF1;                //设置定时初值
        TH0 = 0xFF;                //设置定时初值
        TF0 = 0;                //清除TF0标志

        TR0 = 1;                //定时器0开始计时
        ET0 = 1;
        EA = 1;

        ES=1;
}


void main()
{
        UartInit();
        RI = 1;  
        p1=25;p2=25;  
        while(1)
        {
               
//                switch(RxData())
//                {
//                        case 0x01: qian(); Delay1ms(); p1=30;p2=30; break;
//                        case 0x02: hou(); Delay1ms(); p1=30;p2=30; break;
//                        case 0x03: zuo(); Delay1ms(); p1=21;p2=21; break;
//                        case 0x04: you(); Delay1ms(); p1=21;p2=21; break;
//                        case 0x00: ting(); Delay1ms(); p1=0;p2=0; break;
//                        default :  ;
//                }

        }
}

void es () interrupt 4
{
        uchar tmp;   //定义一个临时变量,用来保存接收到的数据
        if(RI==1)
        {
                tmp = SBUF; //将接收到的数据保存到tmp中
                switch(tmp)
                {
                        case 0x01: qian(); Delay1ms();  break;        //p1=30;p2=30;
                        case 0x02: hou(); Delay1ms();   break;        //p1=30;p2=30;
                        case 0x03: zuo(); Delay1ms();   break;        //p1=21;p2=21;
                        case 0x04: you(); Delay1ms();   break;        //p1=21;p2=21;
                        case 0x00: ting(); Delay1ms();  break;        //p1=0;p2=0;
                        case 0x09: buzz=~buzz; break;
                        case 0x06:  jia(); buzz=0;Delay1ms();buzz=1; break;
                        case 0x07:  jian(); buzz=0;Delay1ms();buzz=1; break;
                        default :  ;
                }

        }
        RI=0;
}


void T_0 () interrupt 1
{
        TR0=0;
        TL0 = 0xF1;                //设置定时初值
        TH0 = 0xFF;                //设置定时初值
        if(cishu<=30)
        {
                cishu++;
        }
        else
        {
                cishu=0;
        }

        if(cishu<=p1)
        {
                pwm1=1;
        }
        else
        {
                pwm1=0;
        }

        if(cishu<=p2)
        {
                pwm2=1;
        }
        else
        {
                pwm2=0;
        }
        TR0=1;
}




void Delay10ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 108;
        j = 145;
        do
        {
                while (--j);
        } while (--i);
}

void Delay5ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 54;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}

void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
}


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

使用道具 举报

沙发
ID:1 发表于 2018-10-17 13:26 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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