基于51单片机的红外线测距仿真

1、工具准备
仿真工具:Proteus 7.0
编程工具:KEIL 4
MCU :89C52

2、仿真电路图的搭建
2.1 最小系统搭建
最小系统的线路图在网上有很多,基本上都是街上晶振和复位按钮就行。本仿真的最小系统搭建如下:
这里写图片描述
2.2 LCD1602的连接
LCD1602主要由三个控制口和8个数据口组成,一般情况下,在仿真图中,相同标号的线表示在电气连接上是连接在一起的,所以本仿真中,用P0口作为数据口:
这里写图片描述这里写图片描述
2.3 红外传感器和ADC芯片的连接:
这里写图片描述 这里写图片描述

3、程序的编写
3.1 LCD1602驱动代码及其API
LCD1602.h文件如下

//LCD1602驱动
#ifndef __LCD1602_H__
#define __LCD1602_H__

#include"reg52.h"

#define uint unsigned int
#define uchar unsigned char

sbit cs = P3^2;
sbit wela = P2^7;
sbit dula = P2^6;
sbit lcden=P3^4;
sbit lcdrs=P3^5;

void delayms(uint z);
void write_com(uchar com);
void write_data(uchar date);
void init();
void print_data(uchar *dat);

#endif

LCD1602.c文件如下:

#include "lcd1602.h"

void delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y-- );
}

void write_com(uchar com)
{   
    lcdrs=0;
    P0=com;
    delayms(5);
    lcden=1;
    delayms(5);
    lcden=0;
}

void write_data(uchar date)
{
    lcdrs=1;
    P0=date;
    delayms(5);
    lcden=1;
    delayms(5);
    lcden=0;
}

void init()   //初始化液晶
{
    dula=0;
    wela=0;
    lcden=0;
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
}

void print_data(uchar *dat)
{
    uchar i = 0;
    while(dat[i]!='\0')
    {
        write_data(dat[i]);
        i++;
    }
}

3.2 主函数及ADC和红外模块

#include"reg52.h"
#include<intrins.h>
#include "lcd1602.h"

long int read=0;
uchar bai,shi,ge;

uchar table[] ="0123456789";
uchar table1[] ="Infrared Measure";
uchar table2[] ="Distance:";

void delay(uint a)     //  a 个1us延时
{
    for(;a > 0;a --)
    _nop_();_nop_();
}

void T0_time() interrupt 1
{
    cs = 0;
    RD = 0;
    read = P1;
    INT0 = 1;
}
uint adc0804()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)/256;
EA=1;
ET0=1;
TR0=1;

    INT0 = 1;
    cs = 0;
    WR = 0;
    delay(255);
    cs = 1;
    WR = 1;
    delay(200);     
    read = read * 196 /100;
    return read;

}

void math(uint x) 
{
    bai = x / 100; 
    shi = x /10 % 10;
    ge = x % 10;
}


void main()
{
    cs=0;
        init();     
      while(1)
        {
            write_com(0x80);
            print_data(table1);
            write_com(0x80+0x40);
            print_data(table2);
            math(adc0804());
            write_com(0x80+0x40+12);
            write_data(table[bai]);
            write_data(table[shi]);
            write_data(table[ge]);  
      write_data('M');
            delayms(500);
        }

}

3.3 最终效果图
这里写图片描述

4、总结
这是一个简单的51仿真实验。对于初学者而言很好理解,也很容易做出来。其中涉及到Proteus的学习,LCD1602、ADC、红外模块的驱动。于程序中,还有定时器。欢迎交流~~~ >_<

  • 64
    点赞
  • 353
    收藏
    觉得还不错? 一键收藏
  • 60
    评论
Proteus软件中,我们可以进行51单片机红外发射仿真。首先,我们需要打开Proteus软件,并创建一个新的工程。然后,从库中选择51单片机,并将其拖放到工程中。 接下来,我们需要添加红外发射器模块。在Proteus的库中,可以找到红外发射器的元件模型,我们可以将其拖放到工程中。然后,将51单片机的输出引脚与红外发射器的输入引脚连接起来。 接下来,我们需要编写51单片机的程序代码。代码中需要包含红外发射器相关的库函数,这些函数可以控制红外发射器的工作。我们可以在代码中设置红外发射的频率、波形等参数。 完成代码编写后,我们需要将代码下载到51单片机中,并进行仿真。在Proteus中,我们可以使用仿真工具来模拟51单片机的运行过程,并观察红外发射器的工作情况。 在仿真过程中,我们可以通过查看波形图和输出结果来验证红外发射是否正常工作。如果红外发射器发射出我们期望的红外信号,就说明仿真成功。 总结起来,51单片机红外发射Proteus仿真需要以下步骤: 1. 创建Proteus工程,并添加51单片机红外发射器模块。 2. 编写51单片机红外发射代码,并下载到单片机中。 3. 使用仿真工具进行仿真,并观察红外发射器的工作情况。 4. 通过观察波形和输出结果来验证红外发射是否成功。 通过Proteus仿真,我们可以方便地验证51单片机红外发射的功能和效果,节省了实际硬件开发的成本和时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值