历史上的今天
返回首页

历史上的今天

今天是:2024年12月30日(星期一)

正在发生

2020年12月30日 | 红外遥控循迹超声波避障跟随光电码盘计数测速智能小车

2020-12-30 来源:51hei

红外遥控循迹超声波避障跟随光电码盘计数测速五个中断智能小车                                                                                                  *
通过红外遥控,控制小车的方向,通过循迹前进,通过超声波跟随。通过光电码盘计数测速,把52单片机的五个中断用上了。。。
ryz学习

单片机源码:
#include
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"        
#define uchar unsigned char
#define uint  unsigned int
sfr T2MOD= 0xC9;
typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
                                                   //p0,25,26,27  lcd1602
sbit P10=P1^0; //寻迹模块左
sbit P11=P1^1; //寻迹模块中
sbit P12=P1^2; //寻迹模块右
sbit key1=P1^3;                  //无线端口
sbit key2=P1^4;
sbit key3=P1^5;
sbit key4=P1^6;
sbit RX = P2^1;                  //超声波端口
sbit TX = P2^0;
sbit IRIN=P3^2;                  //红外端口
                                                //p35测速端口

sbit SER=P2^3;                          //8                   电机驱动端口
sbit SCK=P2^2;                   //4         en=0才工作
sbit RCK=P2^4;           //12
//sbit PWM2A=P2^3;  //未使用  低电平有效   12
//sbit PWM2B=P2^0;  //未使用  低电平有效         3

unsigned int  time1=0,kop,mm=0,s20=0,s21=0;
bit      flag =0,flag1=0,flag3=0;//flag 超声波超时标志,flag1,循迹标志,超声波控制就不循迹。      
u8 IrValue[6];
u8 Time;


//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码
char num[16]="CODE:   DIR:    ";                //第一行显示的数据
char num1[16]="IR: .   / .    ";        //第二行显示的数据
/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}
void delayms(u16 i)//i=1时,时间为1ms
{        int q;
     for(q=0;q     {
          delay(100);
         }        
}


void delays(u16 i) //i=1时,时间为1s
{         int q;
     for(q=0;q     {
         delayms(1000);
     }
}





/*******************************************************************************
* 函数名         :DigDisplay()
* 函数功能                 :数码管显示函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/

void HC595SendData(unsigned char SendVal)//发一字节
{  
  unsigned char i;
for(;i<8;i++)
   {
           SER = SendVal>>7;         
       SendVal= SendVal<<1;      

          SCK = 1;         
        _nop_();
        _nop_();

        SCK = 0;   
                 RCK=1;
        _nop_();
  _nop_();
        RCK=0;
   }
   }         




/*******************************************************************************
* 函数名         : IrInit()
* 函数功能                   : 初始化红外线接收
* 输入           : 无
* 输出                  : 无
*******************************************************************************/

void IrInit()
{
        IT0=1;//下降沿触发
        EX0=1;//打开中断0允许
        EA=1;        //打开总中断

        IRIN=1;//初始化端口
}
void Chaoshengbo()
{ TMOD |=0x01;                   //设T0为方式1,GATE=1;
         TH0=0;
         TL0=0;         
         ET0=1;             //允许T0中断
         EA=1;                           //开启总中断        
         }
void cesu()                                           //测速初始化
{
TH1=0x00;
TL1=0x00;
ET1=1;
//ET2=1;
TMOD |= 0x50;// 打开定时器和计数器T1,因此矩形脉冲输入端接P3.5

RCAP2H=0x3C;
RCAP2L=0xb0;

T2CON=0;
T2MOD=0;              
IE=0XA0;  
TR1 = 1;
TR2 = 1;
}         
                        
char scan()
{        int key;
        if(key1==1)
        { delayms(10);
                if(key1==1){key=1;HC595SendData(0x66);num[12]= 'q';}
        }
        if(key2==1)
        { delayms(10);
                if(key2==1){key=2;HC595SendData(0x99);num[12]= 'h';}
        }
        if(key3==1)
        { delayms(10);
                if(key3==1){key=3;HC595SendData(0x78);num[12]= 'z';}
        }
        if(key4==1)
        { delayms(10);
                if(key4==1){key=4;HC595SendData(0x87);num[12]= 'y';}
        }
        return key;
}
char Judge()
{
        char num=-1;
      
                switch(IrValue[2])
                {
                                                case 0x47:num=19;break;
                        case 0x46:num=18;break;
                                                case 0x45:num=17;break;
                                                case 0x43:num=16;break;
                                                case 0x40:num=15;break;
                        case 0x44:num=14;break;
                        case 0x07:num=13;break;
                        case 0x15:num=12;break;
                        case 0x09:num=11;break;
                                                case 0x19:num=20;break;
                        case 0x0D:num=10;break;
                        case 0x16:num=0;break;
                        case 0x0C:num=1;break;
                        case 0x18:num=2;break;
                        case 0x5E:num=3;break;
                        case 0x08:num=4;break;
                        case 0x1C:num=5;break;
                        case 0x5A:num=6;break;
                        case 0x42:num=7;break;
                        case 0x52:num=8;break;
                        case 0x4A:num=9;break;
                        default :num=16;break;  //
                        }
               
                return num;
        
}
int Conut()
        {  unsigned long S=0;
         
           while(!RX);                //当RX为零时等待
           TR0=1;                            //开启计数
           while(RX);                        //当RX为1计数并等待
           TR0=0;                                //关闭计数
         
         time1=TH0*256+TL0;
         TH0=0;
         TL0=0;
        
        S=(time1*1.7)/100;     //算出来是CM
        
          return S;
        }

推荐阅读

史海拾趣

EUDYNA公司的发展小趣事

在电子行业,产品质量是企业生存和发展的基石。EUDYNA深知这一点,因此对每一件产品都进行严格的测试和检验。公司建立了完善的质量管理体系,从原材料采购到生产过程中的每一个环节都进行严格把控。这种对质量的坚守不仅赢得了客户的信赖和好评,也为EUDYNA赢得了良好的口碑和声誉。

Actel公司的发展小趣事

在2004年,电子行业的两大巨头FUJITSU富士通与SUMITOMO住友电气工业宣布合并,成立了EUDYNA半导体有限公司。这一合并不仅是两家公司资源的整合,更是技术力量的融合。EUDYNA自诞生之日起,就承载着推动半导体行业创新的重任。通过不断研发,EUDYNA在光波、微波器件领域逐渐崭露头角,成为全球客户的信赖之选。

General Diode Corp公司的发展小趣事
检查电磁振动系统是否堵塞或损坏,清理或更换故障部件;检查送丝轮是否磨损严重,必要时更换新的送丝轮。
CIPS公司的发展小趣事

为了满足市场不断变化的需求,CIPS公司不断推出创新产品和服务。例如,推出了CIPS汇路指南、CIPS数据洞察等产品服务,这些服务不仅解决了跨境支付过程中的信息不对称问题,还提高了支付效率,降低了退汇率。此外,CIPS还推出了港元业务等多元化服务,进一步丰富了其服务内容与形式。

BALLUFF公司的发展小趣事

随着自动化技术的不断进步,传感器技术的需求也日益增长。BALLUFF公司紧跟时代潮流,不断推出创新的传感器产品。从1968年开始生产感应式接近开关BES,到1978年光学开关BOS的面世,再到后来由微型处理器控制的转换机构与角度编码器的加入,BALLUFF在传感器领域的技术实力不断增强。此外,公司还陆续推出了旋转传感器BRG、识别系统BIS和超声波位移传感器BTL等产品,进一步丰富了其传感器产品线,满足了不同行业的需求。

Benchmarq Microelectronics Inc公司的发展小趣事

在国内市场取得一定成绩后,Benchmarq Microelectronics Inc开始积极拓展国际市场。公司积极参加国际电子展会和交流活动,与国际同行建立合作关系,将产品打入国际市场。同时,公司还加强品牌建设,提升品牌知名度和美誉度。通过广告宣传、媒体报道等多种方式,公司成功塑造了专业、可靠的品牌形象,赢得了客户的信任和认可。

问答坊 | AI 解惑

新颖的单电极触摸式开关电路

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 …

查看全部问答>

分享:经典的Code VisionAVR错误!千万小心!!

大家请看下面的程序: void Show_BMP(unsigned int Width,unsigned int Height) { unsigned long int position; position=0x4d200+0x3e+Width/7+Height*408; ... ... }   以上程序的写法绝对没有任何语法错误!!Code ...…

查看全部问答>

一次倒霉的MP3维修记(接排线高手转)

开机检测,不是充电电路问题,该机采用ATJ2085方案,可以充电,但是开机后,立马显示电池电量低,电池电压正常,检查ATJ2085的第31脚,电量检测脚,发现所连接的两个电阻有一个虚焊,加焊后,检测OK。 准备装机,装好后,结果还是开不 ...…

查看全部问答>

MSP430 系列单片机资料 7 册

全集锦 与大家分享 [ 本帖最后由 wzt 于 2010-4-25 23:23 编辑 ]…

查看全部问答>

也发一个关于中断相应时间的问题,SDLC通信

wince 下我要用AM85C30实现同步通信(SDLC),问题是这个芯片接收FIFO 3字节,发送没有缓冲! 比如我要用1Mbps通信,中断频率就要1M/8=125k/s, 接收的状况要好一些,3字节的FIFO可以把中断频率降到125k/3=42k/s, 发送就更郁闷了,完全是125k/s ...…

查看全部问答>

ISP下载问题

我用的是RS232做的下载线,但不知道是怎么回事,一直提示不能连接。请问ISP下载程序与哪些信号有关呢?与PSEN、与时钟信号有关系没有?我测试了一下,我的XTAL2信号频率是11.0592,但是波形有一点变形了,而且VP-P变到6V多了。我用的是P89C51RD2单 ...…

查看全部问答>

请教直接驱动TFT的固件库在哪有下载

版主:     您好,使用STM32F有一段时间了,感觉STM32的性价比较高,最近在了解使用FSMC驱动rgb接口的相关内容,在ST官方网站上下载了与之相关的AN3241文档,看到有个基于STM3210E-EVAL的demo板的支持直接驱动TFT液晶的函数库,我 ...…

查看全部问答>

CC1101 30dBm资料,欢迎大家下载讨论

[local]1[/local][localimg=600,450]3[/localimg]…

查看全部问答>

退耦电容/去耦电容的作用及选择知识

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 …

查看全部问答>

adc采样问题

本人想用ADC模块采集干电池电压,然后用SCI模块进行软件显示,可惜一直未能成功。 采样用的是周期中断,SCI用的查询模式,可是最后编译一直显示.out文件无法连接,求大神指教…

查看全部问答>