51单片机 订阅
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 展开全文
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
信息
外文名
mcu
始    祖
Intel公司始创的8004单片机
定    义
兼容Intel 8031系统的单片机统称
用    途
工业测控系统
中文名
51单片机
缺    点
不具备自编程能力
51单片机主要产品
*Intel(英特尔)的:80C31、80C51、87C51,80C32、80C52、87C52等;*ATMEL(爱特梅尔)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等;*Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品;STC(国产宏晶)单片机:89c51、89c52、89c516、90c516等众多品牌。
收起全文
精华内容
下载资源
问答
  • 51单片机

    千次阅读 2017-01-18 12:46:40
    51单片机  编辑 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机...

    51单片机

     编辑
    51单片机是对所有兼容Intel 8031指令系统单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
    中文名
    51单片机
    外文名
    mcu
    定    义
    兼容Intel 8031系统单片机统称
    始    祖
    Intel公司始创的8004单片机
    缺    点
    不具备自编程能力
    用    途
    工业测控系统
    1
     

    主要产品

    编辑
    *Intel(英特尔)的:80C31、80C51、87C51,80C32、80C52、87C52等;
    *ATMEL(艾德梅尔)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等;
    *Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品;
    STC(国产宏晶)单片机:89c51、89c52、89c516、90c516等众多品牌。

    功能

    编辑
    ·8位CPU·4kbytes程序存储器(ROM) (52为8K)
    ·128bytes的数据存储器(RAM) (52有256bytes的RAM)
    ·32条I/O口线·111条指令,大部分为单字节指令
    ·21个专用寄存器
    ·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
    ·外部数据存储器寻址空间为64kB
    ·外部程序存储器寻址空间为64kB
    ·逻辑操作位寻址功能·双列直插40PinDIP封装
    ·单一+5V电源供电
    CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器
    RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
    ROM:用以存放程序、一些原始数据和表格;
    I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
    T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
    五个中断源的中断控制系统
    一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机微机之间的串行通信
    片内振荡器时钟产生电路,石英晶体微调电容需要外接。最佳振荡频率为6M—12M。

    学习

    编辑
    作为一个初学者,如何单片机入门?
    实际上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。一般的大学毕业生都可以了,自学过这2门课程的高中生也够条件。设备上,一般是建议购买一个仿真器,例如,的“双功能下载线”就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。通过实验,这样才可以进行实际的,全面的学习。日后在工作上,仿真器也大有用处。还有,一般光有仿真器是不行,还得有一个实际的电路,即学习板,如图,即为,单片机最小系统
    学习板以强大的接口为主,单片机的学习分两方面,一方面是单片机的原理及内部结构,另一方面是单片机的接口技术。这些都是需要平时多积累,多动手,多思考,这样才能学好单片机技术。
    注:“双功能下载线”在百度文库里有详细的使用说明,并且上位机会定期更新以支持更多的单片机。
    单片机学习的4个阶段
    一、整体了解
    要知道 单片机是什么?单片机有何用?如何系统学习单片机?单片机系统设计的流程是怎样的,需要掌握哪些辅助软件?
    了解这些之后,我们的学习就有了目标和方向。
    二、揭秘 单片机很难学,是因为其内部结构、编程语言抽象,且实际应用中与其他电子技术和元器件知识相互关联,需结合起来一起设计开发产品。所以,第二阶段要了解单片机的内部结构是怎样的?单片机开发经常会用到哪些电子技术和元器件知识?如何将一条条编程指令组合成一段段有效的程序?
    三、解密 之所以单片机能成为控制核心,设计出包罗万象的应用系统来,是因为开发者利用了单片机提供的种种功能及各种外设。所以,第三阶段我们要掌握单片机的各种功能,再加上诸如传感器、模数转换、扫描显示、串行、中断的应用思维,结合更多的元器件电子电路知识,逐个学习、体会实际的单片机系统的秘密。
    四、远航 通过以上三个阶段,读者基本就可掌握单片机的应用了。但要设计出丰富的单片机系统,解决复杂的实际问题,还需要了解更多的外设知识及其与单片机的联系(如电动机、各类
    存储器继电器、红外管等)。这些需要不断的学习和积累。有时候,接到一些开发任务,就需要你针对这个任务自觉地去搜集、学习相关知识,在实践中不断学习和提高。
    最后推荐几本经典图书:
    实例解读51单片机完全学习与应用(配教学视频)》,杨欣编著(他写过多本很有口碑的电子读物,风格独特),电子工业出版社出版。
    爱上单片机》,杜洋著,全新风格,使用面包板入门,人民邮电出版社。
    《手把手教你学51单片机》,宋雪松编著(很经典),清华大学出版社出版。

    仿真

    编辑

    电脑仿真

    Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

    功能特性

    1,可以仿真63K程序空间,接近64K 的16位地址空间
    2,可以仿真64Kxdata 空间,全部64K 的16位地址空间;
    3,可以真实仿真全部32 条IO脚;
    4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;
    5,可以使用C51语言或者ASM汇编语言进行调试 ;
    6,可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
    7,可选 使用用户晶振,支持0-40MHZ晶振频率;
    8,片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真;
    9,可以仿真双DPTR 指针;
    10,可以仿真去除ALE 信号输出. ;
    11,自适应300-38400bps 的所有波特率通讯;
    12,体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障;
    13,仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. ;
    14,仿真时监控和用户代码分离,不可能产生不能仿真的软故障
    15,RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。

    功能限制

    仿真器占用单片机串口及定时器2,与Keil C(PC)通讯,故不支持串口及定时器2 的仿真功能。全速运行时单片机串口及定时器2 可供用户使用。

    使用方法

    1.将仿真器插入需仿真的用户板的CPU插座中,仿真器由用户板供电;
    2.将仿真器的串行电缆和PC机接好,打开用户板电源;
    3.通过Keil C 的IDE 开发仿真环境UV2 下载用户程序进行仿真调试

    硬件说明

    1、使用用户板的晶振仿真器晶振旁有两组跳线用来切换内部晶振和用户板晶振,当两个短路块位于仿真器晶振一侧时,默认使用仿真板上的晶振(11.0592MHz), 当两个短路块位于电容一侧时,使用用户板的晶振。
    2、为便于调试带看门狗的用户板,仿真器的复位端未与用户板复位端相连;故仿真器的复位按钮只复位仿真器,不复位用户板;若要复位用户板,请使用用户板复位按钮。

    区别

    编辑
    同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51,PHILIPS,和WINBOND等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
    不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。89S51就是在这样的背景下取代89C51的,89S51已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel公司已经停产AT89C51,将用AT89S51代替。89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89SXX可以向下兼容89CXX等51系列芯片。同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。
    89S51相对于89C51增加的新功能包括:
    -- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
    -- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
    -- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
    -- 具有双工UART串行通道。
    -- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
    -- 双数据指示器。
    -- 电源关闭标识。
    -- 全新的加密算法,这使得对于89S51的盗版变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
    -- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。
    比较结果:就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。从AT89C51升级到AT89S51 ,也是同理。和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。
    展开全文
  • 电子设计从这开始——51单片机25个小作品

    万次阅读 多人点赞 2016-09-23 13:09:09
    这是大二我做某实验室管理员,为了方便自己管理整理,都是一些51单片机的小作品,适合给刚学完51单片机的新手练手 一目录 1基于51单片机的火灾温度烟雾报警器 2基于51单片机的声光电子琴 3基于51单片机的音乐喷泉 4...

            这是我大二做某实验室管理员,为了方便自己管理整理,都是一些51单片机的小作品,适合给刚学完51单片机的新手练手!

                  时间好快,目前我已经研二了,没有想到底下会有这么多评论,谢谢各位学弟学妹捧场!我在这统一回复,这些是我总结的可以用来练手的关于51单片机的小项目,不过我自己没有做过,真的没有资料。          

    一目录

    1基于51单片机的火灾温度烟雾报警器

    2基于51单片机的声光电子琴

    3基于51单片机的音乐喷泉

    4基于51单片机的智能温控风扇

    5基于51单片机的超声波测距

    6基于51单片机的无线温湿度控制系统设计

    7基于51单片机脉搏心率计

    8.基于51单片机led音乐频谱

    9.基于51单片机的智能充电器

    10.基于51单片机的贪吃蛇游戏

    11.基于51单片机的电子秤

    12.基于51单片机的视力保护器

    13.基于51单片机防人水位检测报警系统

    14.基于51单片机的声光控制器设计

    15.基于51单片机的红外计数器

    16.基于51单片机的自行车码表设计

    17.基于51单片机的计算器的设计

    18.基于51单片机的酒精浓度测试仪设计

    19.基于51单片机的智能台灯设计

    20.基于51单片机的卫星定位

    21.基于51单片机防尘PM2.5灰尘设计

    22.基于51单片机的无线音乐门铃

    23基于51单片机的短信收发控制器

    24.基于51单片机的智能插座定时开关设计

    25.基于51单片机的4*4*4单片机的光立方设计

     

    二.作品参考图

     

    1基于51单片机的火灾温度烟雾报警器

     

     

     

     

     

    2基于51单片机的声光电子琴

     

     

     

     

    3基于51单片机的音乐喷泉

     

     

     

     

    4基于51单片机的智能温控风扇

     

     

     

     

    5基于51单片机的超声波测距

     

     

    6基于51单片机的无线温湿度控制系统设计

    7基于51单片机脉搏心率计

    8.基于51单片机led音乐频谱

    9.基于51单片机的智能充电器

    10.基于51单片机的贪吃蛇游戏

    11.基于51单片机的电子秤

    12.基于51单片机的视力保护器

    13.基于51单片机防人水位检测报警系统

    14.基于51单片机的声光控制器设计

    15.基于51单片机的红外计数器

    16.基于51单片机的自行车码表设计

    17.基于51单片机的计算器的设计

    18.基于51单片机的酒精浓度测试仪设计

    19.基于51单片机的智能台灯设计

    20.基于51单片机的卫星定位

    21.基于51单片机防尘PM2.5灰尘设计

    22.基于51单片机的无线音乐门铃

    23基于51单片机的短信收发控制器

     

    24.基于51单片机的智能插座定时开关设计

     

    25.基于51单片机的4*4*4单片机的光立方设计

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 51单片机——51单片机入门基础知识

    万次阅读 多人点赞 2018-07-20 19:38:07
    MSC-51单片机指以8051为核心的单片机,由美国的Intel公司在1980年推出,80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。 单片机:在一片集成电路芯片上集成...

    第一部分。单片机简介

    MSC-51单片机指以8051为核心的单片机,由美国的Intel公司在1980年推出,80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。

    单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。

    CPU( Central Processing Unit ):由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

    RAM( Random-Access Memory ):用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

    ROM (Read-Only Memory):用以存放程序、一些原始数据和表格;

    I/O(input/output)口:四个8位并行I/O口,既可用作输入,也可用作输出;

    T/C (timer/counter):两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

     数字电路中只有两种电平:高和低

    单片机为TTL电平: +5V       0V

    RS232电平:计算机的串口    -12V     +12V

    所以计算机与单片机之间通讯时需要加电平转换芯片max232等其他芯片

    数字电路的点评特性据定了他只能用二级制:

    二进制逻辑运算,与或非和异或

    数据类型:

    因为51单片机是8位的,所以他的数据类型一般用unsigned char 

    第二部分。引脚简介

    1.  电源引脚:Vcc (40脚):电源端,接+5V电源。

    Vss(Gnd) (20脚):接地端,接+5V电源地端

    2. 外接晶体引脚:XTAL1和XTAL2

    89C51内部有一个振荡器和时钟产生电路。

    XTAL1(19脚):   片内振荡电路反相放大器输入

    XTAL2(18脚):片内振荡电路反相放大器输出 当采用内部时钟时,片外连接石 英晶体和微调电容,产生原始 的振荡脉冲信号。

    采用外部时钟时, XTAL1输入 外部时钟脉冲信号, XTAL2悬空.

    3. 控制信号引脚:RST、ALE、PSEN、EA

    RST (9脚) : 复位信号输入端,高电平有效。

              保持两个机器周期高电平时,完成复位操作。

    ALE/PROG (30脚) :

    地址锁存允许输出端/编程脉冲输入端

    正常时,连续输出振荡器频率的1/6正脉冲信号。

    访问片外存储器时:

    作为锁存P0口低8位地址的控制信号。

    对8751片内 ROM编程写入时:作为编程脉冲输入端。

    PSEN (29脚): 外部程序存储器读选通输出信号

    访问片外ROM时,输出负脉冲作为读ROM选通.

    常连接到片外ROM芯片的输出允许端(OE)作外部ROM的读选通信号。

    EA/Vpp (31脚):

    外部程序存储器地址使能输入/编程电压输入端.   平常,接“1”时,CPU访问片内4KB的ROM,当地址超4KB时,自动转向片外ROM中的程序。当接“0”时,CPU只访问片外ROM。 第2功能Vpp              对8051编程时,编程电压输入端。

    4. 输入/输出端口引脚 P0、P1、P2、P3

    4个8位的并行输入/输出端口,共32个引脚。作为通用输入/输出端口

    通用输入/输出端口

         准双向口:  作输入时要先对锁存器写“1”。默认启动初始化为高电平

    P0端口(P0.0—P0.7,第39—32脚):

          漏极开路的准双向口, 内部没有上拉电阻,为搞阻状态,不能正常输出高低电平,做I/O时需要接上拉电阻(10K)

    P1端口(P1.0—P1.7,第1—8脚):

          内部带上拉电阻的准双向口,在做输入时要先1

    P2端口(P2.0—P2.7,第21—28脚):

          内部带上拉电阻的准双向口,与P1相似

    P3端口(P3.0—P3.7,第10—17脚):

          内部带上拉电阻的准双向口,做I/O时与P1相似,另外有第二功能

    P3口的第二功能

     

    展开全文
  • 基于51单片机四路循迹小车

    万次阅读 多人点赞 2018-11-14 13:54:59
    这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    一. 任务要求

    在这里插入图片描述
    在这里插入图片描述

    二. 系统原理

    本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。

    这里的轨道是指汽车沿着白色地板上的黑线行驶。由于黑线与白地板的反射系数不同,可以根据接收到的反射光的强度来判断“道路”。常用的方法是红外检测。

    红外检测方法,即在汽车行驶过程中,利用红外光在具有不同颜色的物体表面的不同反射特性,不断向地面发射红外光。当红外光与白纸地板相遇时,会发生漫反射,反射光被安装在车内的接收器接收,如果遇到黑线,就会变成红色。外部光被吸收,车内的接收器不能接收红外线。单片机根据是否接收到反射的红外光来确定黑线的位置和汽车的行驶路线。

    三. 整体方案

    1. 控制模块

    小车的核心控制部件采用STC公司生产的8位单片机STC89C52。它是一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。STC89C52有3个16 位定时器/计数器,2个外部中断,1个串口中断。

    最小系统

    51单片机的具体引脚功能不细说,不了解的可自行百度。直接上最小系统电路图(自己画的,凑合着看)。顺便说一句,在我看来一个没有指示灯的电路是最烦的电路<(`^´)> 我的复位一定要有灯才行!

    在这里插入图片描述
    三部分:
    ①电源电路:给单片机提供5V的电源
    ②时钟电路:外接11.0592M石英晶振。
    ③复位电路:确保单片机是从一个确定的初始状态开始。

    焊接时注意P0口要接上拉电阻,否则不能用,一般都用排阻做上拉电阻(当然如果能自己画板子就更好了)。

    去除AD网格线

    记一下怎么去除AD网格线,如图步骤,最后去掉Visible前面的对勾即可,别忘记最后点OK:
    在这里插入图片描述

    2. 电机驱动模块

    我使用的是最经典的LM298N电机驱动:

    我太喜欢用298了。不仅可以接至12v(即拥有更强的驱动能力),而且有过电流保护功能,当出现电机卡死时,可以保护电路和电机等。且自带7805降压模块可直接给单片机供电~~
    实物图:
    在这里插入图片描述
    驱动与各部分的连接简介:
    输出A、B:分别接到左右马达上,通过使能A、使能B来控制电机正常工作(接高电平为正常工作);
    单片机IO控制输入(即IN1-IN4):用来控制马达正反转。接单片机引脚,通过在程序中给引脚高低电平实现正转或反转(详见下边输入输出关系表);
    12V输入:接电池盒正极;
    5V输入:接单片机VCC,给单片机供电;
    电源地(即GND):把电池盒负极和单片机的GND一起接入。
    在这里插入图片描述
    电路图:
    在这里插入图片描述
    输入输出关系(使能ENA、ENB均为1的状态下):

    In1 In2 运转状态
    1 0 正转
    0 1 反转
    1 1 刹停
    0 0 停止

    3. 电源模块

    我自己使用的是两节18500锂电池供电。如果觉得两节电池不够,三节12V又太大,也可以在中间加一个7809稳压管把电压降到9V再接入驱动:
    在这里插入图片描述

    4. 循迹模块

    光电循迹是由四对红外收发管组成,通过检测接收到的反射光强,判断黑白线。

    当模块探测灯检测到黑线时指示灯熄灭,同时 OUT端口持续输出高电平信号,反之未检测到黑线的探测灯应常亮,OUT端口输出低电平。该模块检测距离 2~60cm,检测角度 35 ° ,检测距离可以通过电位器进行调节,顺时针调电位器,灵敏度增加;逆时针调电位器,灵敏度减少。
    在这里插入图片描述
    原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。

    主控板的电路图:
    在这里插入图片描述
    小板电路图:
    在这里插入图片描述
    注意连接的时候:VCC-VCC、GND-GND、IN-OUT。

    比较器LM339
    在这里插入图片描述

    5. 超声波测距模块

    实物图:
    在这里插入图片描述
    电路图:
    在这里插入图片描述
    工作原理
      (1)采用IO口TRIG触发测距,给至少10us的高电平信号;
      (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
      (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
      测试距离=(高电平时间*声速(340M/S))/2;

    四. 车体实物图

    在这里插入图片描述

    五. 软件实现

    #include<reg52.h>
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    sbit ENA = P2^0;   //右点机使能
    sbit IN1 = P2^1;   //为0右轮反转
    sbit IN2 = P2^2;   //为0右轮正转
    sbit IN3 = P2^3;   //为0左轮正转
    sbit IN4 = P2^4;   //为0左轮反转
    sbit ENB = P2^5;   //左电机使能
    
    sbit left1 = P1^3;
    sbit left2 = P1^2;
    sbit right1 = P1^1;
    sbit right2 = P1^0;
    
    u8 PWMCnt1 = 0;
    u8 PWMCnt2 = 0;
    u8 cntPWM1 = 0;
    u8 cntPWM2 = 0;
    
    void Timer0Init();
    void XunJi();
    
    void main()
    {
    	Timer0Init();
    	while(1)
    	{
    		XunJi();
    
    	}	
    }
    // i = 1时, 大概延时10us
    //void delay(u16 i)
    //{
    //    while (i--);
    //}
    
    void Timer0Init()
    {
    	TH0 = 0xFF;
    	TL0 = 0xA3;
    	TMOD &= 0xF0;
    	TMOD |= 0x01;
    	EA = 1;
    	ET0 = 1;
    	TR0 = 1;
    }
    
    void TurnRight1()		   //右转
    {
    	IN1 = 0;	//右轮反转
    	IN2 = 1;
    
    	IN3 = 0;	//左轮正转
    	IN4 = 1;
    	cntPWM1 = 70;
    	cntPWM2	= 55;
    }
    
    void TurnRight2()		   //右转
    {
    	IN1 = 0;	//右轮反转
    	IN2 = 1;
    
    	IN3 = 0;	//左轮正转
    	IN4 = 1;
    	cntPWM1 = 50;
    	cntPWM2	= 40;
    }
    
    void TurnLeft1()				//左转
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 1;
    	IN4 = 0;   	//左轮反转
    	cntPWM1 = 55;
    	cntPWM2	= 70;
    }			  	
    
    void TurnLeft2()				//左转
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 1;
    	IN4 = 0;   	//左轮反转
    	cntPWM1 = 40;
    	cntPWM2	= 50;
    }	
    	
    void Forward()				 //前进
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 0;   	//左轮正转
    	IN4 = 1;
    
    	cntPWM1 = 40;
    	cntPWM2	= 40;
    }
    
    //void Backward()					 //后退
    //{
    //	IN1 = 0;	//右轮反转
    //	IN2 = 1;
    //
    //	IN3 = 1;
    //	IN4 = 0;	//左轮反转
    //	cntPWM1 = 30;
    //	cntPWM2	= 30;
    //}
    
    void Stop()					  //停止
    {
    	IN1 = 0;
    	IN2 = 0;
    
    	IN3 = 0;
    	IN4 = 0;
    }
    void XunJi()
    
    {
    	unsigned char flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 0)&&(right2 == 0))   //0 0 0 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 0)&&(right2 == 1))   //0 0 0 1
    		flag = 1;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 1)&&(right2 == 0))   //0 0 1 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 1)&&(right2 == 1))   //0 0 1 1
    		flag = 1;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 0)&&(right2 == 0))   //0 1 0 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 0)&&(right2 == 1))   //0 1 0 1
    		flag = 4;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 1)&&(right2 == 0))   //0 1 1 0
    		flag = 0;
    	
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 1)&&(right2 == 1))    //0 1 1 1
    		flag = 1;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 0)&&(right2 == 0))   //1 0 0 0
    		flag = 3;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 0)&&(right2 == 1))   //1 0 0 1
    		flag = 0;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 1)&&(right2 == 0))   //1 0 1 0
    		flag = 2;
    	// ?
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 1)&&(right2 == 1))   //1 0 1 1
    		flag = 0;
    	
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 0)&&(right2 == 0))   //1 1 0 0
    		flag = 3;
    	 //?
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 0)&&(right2 == 1))   //1 1 0 1
    		flag = 0;
    
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 1)&&(right2 == 0))   //1 1 1 0
    		flag = 3;
    	
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 1)&&(right2 == 1))   //1 1 1 1
    		flag = 5;
    	
    	switch(flag)
    	
    {
    		case 0:Forward();break;
    		
    		
    		case 1:TurnRight1();break;
    		
    		
    		case 2:TurnRight2();break;
    		
    		
    		case 3:TurnLeft1();break;
    		
    		
    		case 4:TurnLeft2();break;
    
    
    		default:Stop();break;
    	}
    }
    
    void InterruptTime0() interrupt 1
    {
    	PWMCnt1++;
    	PWMCnt2++;
    	
    	if(PWMCnt1  >= 200)
    	{
    		PWMCnt1 = 0;
    	}
    	if(PWMCnt1 <= cntPWM1)
    	{
    		ENA = 1;
    	}
    	else
    	{
    		ENA = 0;
    	}
    
    	if(PWMCnt2 >= 200)
    	{
    		PWMCnt2 = 0;
    	}
    	if(PWMCnt2 <= cntPWM2)
    	{
    		ENB = 1;
    	}
    	else
    	{
    		ENB = 0;
    	}
    
    	TH0 = (65536 - 50)/256;
    	TL0 = (65536 - 50)%256;
    }
    
    展开全文
  • 51单片机通过WIFI模块ESP8266控制LED灯

    万次阅读 多人点赞 2018-06-16 18:47:40
    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而...
  • 51单片机(一)—— 51单片机简介

    千次阅读 2020-02-11 20:01:35
    一、51单片机标识信息 通常我们所说的51单片机是指以51内核扩展出的单片机。生产51单片机的厂商很多,51单片机的型号也很多。下表列出了一些51单片机的厂商和型号。 公司 产品 AT...
  • 巫妖王51单片机开发板配套视频课程

    万人学习 2017-12-19 16:42:57
    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。
  • 快速入门51单片机

    千次阅读 多人点赞 2018-05-09 09:08:55
    首先打开看51单片机的管脚分布,51单片机是8个引脚一组,为什么是8个一组呢? 因为它是8位单片机,正好一个字节8位可以控制它 51单片机有4组(P1,P2,P3,P4)通用管脚,所以51单片机有4*8=32个通用管脚 管脚...
  • 基于51单片机的交通灯控制系统设计

    万次阅读 多人点赞 2018-11-24 13:38:11
    本设计为基于51单片机交通灯系统的设计,采用模块化、层次化设计。运用单片机AT89C51进行数据的分析和处理,为显示提供信号,显示部分采用8位数码管显示倒计时值。系统电路简单、集成度高、工作稳定、调试方便、检测...
  • 51单片机蓝牙小车

    万次阅读 多人点赞 2019-02-25 20:41:23
    51单片机蓝牙小车(是我大二做的一个课程设计,小菜鸟一个,欢迎大家指正和参考。) 摘要 本次设计选择基于蓝牙遥控的多功能智能小车为对象。选用STC98C52RC单片机作为主控芯片,电机驱动采用L293N ,...
  • 51单片机系列

    千次阅读 2020-11-23 23:28:30
    接线下来准备出一个51单片机的超详细的系列教程,主要是自己也在学习51单片机,在学习过程中给大家分享自己学到的知识,另外该系列将会放到微信公众号【零基础玩嵌入式】的菜单栏(自学教程–>51单片机)中,大家...
  • 51单片机学习历程(二)快速入门51单片机

    千次阅读 多人点赞 2018-07-19 11:43:59
    首先打开看51单片机的管脚分布,51单片机是8个引脚一组,为什么是8个一组呢?  因为它是8位单片机,正好一个字节8位可以控制它  51单片机有4组(P1,P2,P3,P4)通用管脚,所以51单片机有4*8=32个通用管脚 管脚有...
  • 基于51单片机电子时钟

    万次阅读 多人点赞 2019-01-05 21:39:20
    1 基于51单片机用LCD1602实现时-分的显示 2. 按键控制时-分的调整 3. 能实现整时报时的功能(蜂鸣器响) 4. 闹钟模式 5.按键切换模式(模式一:时-分显示,模式二:60秒倒计时) 一、设计思路: 主体: 通过外部中断...
  • 51单片机入门教程(2)——实现流水灯

    万次阅读 多人点赞 2018-11-03 13:06:52
    51单片机入门教程(2)——实现流水灯一、搭建流水灯电路二、流水灯程序2.1 延时程序2.2 延时函数2.3 按字节寻址2.4 逻辑移位2.5 条件判断 一、搭建流水灯电路 在Proteus中搭建流水灯电路如图 二、流水灯程序 我们...
  • macOS系统实现51单片机编程

    千次阅读 2019-09-27 16:47:08
    51单片机
  • 前面为大家介绍的点亮LED灯、数码管、按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯、操作数码管,那可真是大才小用了。这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将为大家一一...
  • 51单片机通过ESP8266模块与手机进行通讯(单片机)

    万次阅读 多人点赞 2018-02-08 18:29:43
    本文章内容已经弃用,最新内容请参考ESP8266系列ESP-01S模块的配置使用(51单片机) Step1:配置ESP8266 通过USB转TTL模块把ESP8266模块和电脑连接起来,如图 把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转...
  • 51单片机的超声波智障(避障)小车

    万次阅读 多人点赞 2018-07-20 16:10:07
    51单片机制作的超声波智障(避障)小车 最近在学习51单片机,暑假闲着无聊,便从网上买了个51单片机和一些传感器模块,不知怎么的突然想起小时候对小车的痴迷,于是便准备利用暑假时间做一超声波避障小车,就算是对...
  • 学习单片机很重要的一步就是为单片机烧写程序,烧写程序是初学者体验单片机并快速入门的第一步,51单片机由于比较简单,并且为了节省学习成本,一般很少使用调试器,而是直接用单片机的串口烧写程序。下图是我使用的...
  • 经典51单片机精品设计合集

    万次阅读 多人点赞 2018-08-23 13:41:08
    51单片机作为基础入门的单片机应用十分广泛,一直以来基于51单片机的作品就层出不穷,推陈出新,有一段时间没有给大家整理关于51单片机的作品了,今天给大家分享电路城上最新的基于51单片机的作品,尤其是智能家居...
  • 51单片机需要哪些C知识
  • 51单片机自动浇水系统/51单片机自动浇花系统 整个设计由51单片机模块、湿度传感器模块(土壤湿度传感器或者温度传感器或者温湿度传感器,都可以)、lcd1602液晶显示模块等组成,实现智能浇花和智能浇水功能。该系统...
  • AT89C51单片机

    千次阅读 2020-04-07 19:28:13
    AT89C51单片机学习一、AT89S51单片机的I/O端口二、AT89S51单片机的中断系统  1、中断处理过程  2、AT89S51单片机的中断源(2)AT89S51单片机的中断控制(3)AT89S51单片机的中断优先级(4)AT89S51单片机中断...
  • 51单片机连接ESP8266串口WiFi模块

    万次阅读 多人点赞 2017-01-18 15:53:57
    51单片机 VCC 3.3V (5V连接时间过长可能会烧坏WiFi模块) GND GND CH_PD 3.3V GPIO0 GND UTXD TXD URXD RXD 烧录固件 打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件...
  • 89c51单片机

    千次阅读 多人点赞 2018-05-19 23:29:14
    89c51是一款很大众化的入门级单片机,ATMEL、NXP、STC、和SST等公司生产的与80c51兼容低功耗、高性能8位89c51/s51单片机具有比80c31更丰富的外设资源。89c51/s51单片机芯片内包括:①一个8位的80c51微处理器(CPU)...
  • 在前面的文章中,我们都是直接用串口将程序烧写到单片机中运行,在这种开发方式下...51单片机比较低端,本身不支持在线调试,但是可以使用仿真芯片进行调试。本文我们就来介绍如何使用仿真芯片SST89E516RD。 SST8...
  • 51单片机控制的数字温度计 PROTEUS 和51单片机教程

    千次阅读 热门讨论 2020-02-15 15:48:05
    51单片机控制的数字温度计 总览部分 MCU部分 显示部分 开仿真以后实时显示温度 因为这个程序比较简单,我就直接上代码了,有不明白的请看我以前的文章,谢谢哦! 参考代码如下: #include “reg51.h” char disp...
  • 基于51单片机设计的简易电子琴

    万次阅读 多人点赞 2018-06-10 16:55:42
    基于51单片机设计的简易电子琴
  • STM32单片机和51单片机区别

    万次阅读 多人点赞 2017-05-26 09:44:10
    单片机简介单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件,在我们自己...51单片机和STM32单片机...
  • 基于51单片机的电梯控制系统

    万次阅读 热门讨论 2020-04-27 18:43:04
    第一篇的项目,实现了51单片机控制电机,从而控制一台六层电梯。 具体说明:系统启动后自动定位到一楼。当外部按键按动时,电梯前往该楼层;内部按键共七个,其中六个对应六层,第七个为报警按键,按下后电梯停止...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,402
精华内容 12,560
关键字:

51单片机