51单片机循迹小车Proteus仿真程序

发布者:asa1670最新更新时间:2020-01-06 来源: eefocus关键字:51单片机  循迹小车  Proteus  仿真程序 手机看文章 扫描二维码
随时随地手机看文章

51循迹智能小车仿真电路及程序
仿真原理图如下
2.jpg

单片机源程序如下:

#include

#define uchar unsigned char 

#define uint unsigned int

uchar temp,signal,tt1,t0,t1,t2,t3,t4,t5,t6;



void delay_1ms(uint d)

{

        uint i;

        while(d--)

                for(i=0;i<75;i++);

}


void motor_run()                   //电机起动

{

          P1=0x35;

        delay_1ms(200);

        P1=0x53;

        delay_1ms(10);

/*        ENA=1;


        OUT1=0;


        OUT2=1;

        delay_1ms(800);

        OUT2=0;

        delay_1ms(200);

        

        ENB=1;


        OUT4=0;


        OUT3=1;

        delay_1ms(800);

        OUT3=0;

        delay_1ms(200);

*/

}

void motor_left()                         //左进

{

        P1=0x30;

        delay_1ms(200);

        P1=0x00;

        delay_1ms(20);

}


void motor_right()                   //右进

{

        P1=0x05;

        delay_1ms(200);

        P1=0x00;

        delay_1ms(20);

}


void motor_big_right()                         //粗右进

{

        P1=0x55;

        delay_1ms(200);

        P1=0x00;

        delay_1ms(20);

}

void motor_big_left()

{

        P1=0x33;

        delay_1ms(200);

        P1=0x00;

        delay_1ms(20);

}

void motor_stop()                                        //电机停止

{

         P1=0x00;

}

void motor_back()

{

        P1=0x53;

}

void main()

{

        t0=0;

        t1=0;

        t2=0;

        t3=0;

        t4=0;

        t5=0;

        t6=0;


        tt1=0;

        EA=1;

        ET1=1;

        TR1=1;

        TMOD=0x01;

        TH1=-(1000/256);

        TL1=-(1000%256);

        while(1)

        {


                 temp=P2;

                signal=temp&0xff;                   //得到红外反向信号

                switch(signal)

                {

                        case 0xff:           //无偏差

                                motor_run();

                                t0++;

                                if(t0==10)

                                {

                                        t0=0;

                                        motor_left();

                                        motor_right();

                                }

                                t1=t2=t3=t4=t5=t6=0;        

                                break;

                        case 0xfd:           //1轮右偏                        


                                motor_big_left();

                                t1++;

                                if(t1==4)

                                {

                                        t1=0;

                                        motor_left();

                                }

                                t0=t2=t3=t4=t5=t6=0;        

                                break;

                        case 0xef:            //4轮左偏                           


                                motor_big_right(); 

                                t2++;

                                if(t2==4)

                                {

                                        t2=0;

                                        motor_right();

                                }

                                t0=t1=t3=t4=t5=t6=0;        

                                break;

                        case 0xfb:     //2轮右偏出轨

                        case 0xf9:           //1、2轮右偏                                                

                                motor_big_left();

                                t3++;

                                if(t3==4)

                                {

                                        t3=0;

                                        motor_left();

                                }

                                t0=t1=t2=t4=t5=t6=0;        

//                                delay_1ms(10);

                                break;


                        case 0xdf:           //5左偏出轨                           

                        case 0xcf:      //4、5轮左偏

                                motor_big_right();

                                t4++;

                                if(t4==4)

                                {

[1] [2]
关键字:51单片机  循迹小车  Proteus  仿真程序 引用地址:51单片机循迹小车Proteus仿真程序

上一篇:单片机出租车计价器电路原理图与源程序
下一篇:单片机成长之路(51基础篇) - 026 基于stm89c52之单片机看门狗

推荐阅读最新更新时间:2024-11-09 19:03

基于STC89C51单片机的GPS智能塔钟控制系统的研究
本文研究的GPS自动校时塔钟控制系统是以STC89C51单片机为控制器,由GPS接收器、伺服电机、LED显示、语音报时等部分组成,具有自动校时、显示、报时等功能。通过GPS15XL-W接收芯片捕捉来自卫星的准确时间信息,以此为时钟源。利用单片机对接收到的时间信息进行提取和处理,并完成对单片机走时的校正。系统由单片机走时构成母钟,单片机向伺服电机发送脉冲驱动子钟走时。其优点是实现上电后的自动校时,改变了传统校时的不便,减少了机械误差,塔钟精度可达±1μs,没有累计误差。 随着经济社会的不断发展,人们生活的节奏逐步加快,人们对时间的精确度要求越来越高,尽管城市建筑物上的塔钟也越来越多,但大部分都是以传统塔钟为基础的传动、人
[单片机]
基于STC89C<font color='red'>51单片机</font>的GPS智能塔钟控制系统的研究
以AT89C51单片机为核心的LED汉字滚动显示屏设计
引言 LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图1所示
[单片机]
以AT89C<font color='red'>51单片机</font>为核心的LED汉字滚动显示屏设计
51单片机课程设计:基于DS18B20的温度报警器
本程序用于读取DS18B20温度,同时具备报警功能,工程分为3个文件,main.c、temp.c、temp.h,经本人修改部分代码,适用于吉林农业大学51开发板,其他朋友亦可移植到其他型号开发板。工程文件及对应开发板的电路图在文章最下方。 关于粘贴复制乱码的问题:如果程序复制到Keil编译器上出现注释乱码,可以先建一个.c文件,也就是说不在keil里面编辑,然后用记事本打开.c文件,将源码复制进去,再在keil中添加文件即可,其他操作方法一样。 1.main.c文件 /*********************************说明*****************************************
[单片机]
51单片机的Pl口实现独立的键盘控制
  独立式按键就是各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。   独立式按键的优点是电路配置灵活,软件结构简单,并且能同时检测到多个键被按下的情况。但缺点是每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构复杂。因此,此键盘常用于按键较少的系统或操作速度较高的场合。   计本电路由上拉电阻和按键组成,对于每路键盘来讲,当键没有按下时,单片机相应引脚上的电平为低电平,当键按下时,单片机相应引脚上的电平为高电平,详细电路如下图所示。   程序设计      程序中采用轮询
[单片机]
用<font color='red'>51单片机</font>的Pl口实现独立的键盘控制
51单片机实验11:串口通信
目的:通过电脑向单片机发送字符,单片机收到字符后,向电脑回应相同的字符。 开发板时钟频率为12MHz。程序设置波特率为4800,加倍。 #include reg52.h #define uc unsigned char void usartinit() { TMOD=0X20; TH1=0XF3; TL1=0XF3; PCON=0X80; SCON=0X50; TR1=1; ES=1; EA=1; } void usart() interrupt 4 { uc receive_data; receive_data=SBUF; RI=0; SBUF=receive_data
[单片机]
51单片机pwm调速调光程序
#include reg52.h typedef unsigned char uchar; typedef unsigned int uint; sbit ENA=P0^0; sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^3; sbit IN4=P0^4; sbit ENB=P0^5; uint k,j; #define OFF ENA=0;ENB=0; #define ON ENA=1;ENB=1; #define LEDL(key) P2&=(0xfe key); //指定对应的二极管发亮 #define LEDH(key) P2|=(0x01 key); //指定LED
[单片机]
C51单片机 写一个外部中断(入门单片机)
代码部分 void main() { /*---------------EA,IT,EX必须写-------------*/ EA=1; //开启总中断 IT1=1; //中断触发模式 //=0为低电平触发,=1为下降沿触发 EX1=1; //外部中断允许位 while(1) { led1=0; } } void int1() interrupt 0 { led=~led1; } 解释: 1.外部中断(按键中断)最最重要的部分就是EA,IT,EX三条语句,这三条是必不可少的。 2.EA是中断总开关,类似家里电闸的总闸,总闸
[单片机]
C<font color='red'>51单片机</font> 写一个外部中断(入门单片机)
基于AT89c51单片机的流水灯,中断定时,按钮控制
中断 定时器/计时器是51单片机最基本的功能器件,熟练掌握其编写方法至关重要; #include reg51.h #include stdio.h unsigned char n=0,f=0,s=0; void main() { TMOD=0X61; TH0=(65536-9216)/256; TL0=(65536-9216)%256;初始化定时器 TH1=156; TL1=156; IT0=1; EX0=1; EA=1; T1=0; while(1)P1=s; } void Timer0() interrupt 1 { T1=1; TH0=(65536-9216
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved