基于单片机GP2D12测距-proteus仿真-源程序

基于51单片机红外测距-proteus仿真-源程序
一、系统方案
本设计采用51单片机作为主控器,液晶1602显示,GP2D12采集距离值,按键设置报警阀值,测量值超过阀值,蜂鸣器报警。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
//=lcd1602初始化函数===
void lcd_init()
{
lcdrw=0;
lcden=0;
lcd_write_com(0x38); //显示模式设置
lcd_write_com(0x0c); //显示开关,光标关闭
lcd_write_com(0x06); //显示光标移动设置
lcd_write_com(0x01); //清除屏幕
lcd_write_com(0x80); //数据指针移到第一行第一个位置
}
2、液晶显示程序
//=lcd1602写指令函数===
void lcd_write_com(char cmd) //写指令函数
{
lcdrs=0;
lcdrw=0;
LCD_PORT=cmd;
delayms(1);
lcden=1;
delayms(1);
lcden=0;
}

//=lcd1602写数据函数===
void lcd_write_data(uchar dat)
{
lcdrs=1;
LCD_PORT=dat ;
lcdrw=0;
delayms(1);
lcden=1;
delayms(1);
lcden=0;
}

//=定位写字符串函数====
void LCD_DispStr(uchar y,uchar x,uchar *str)
{
if(y0)lcd_write_com(0x80|x);
else if(y
1)lcd_write_com(0xc0|x);
while(*str!=‘\0’)
{
lcd_write_data(*str++);
delayms(5);
}
}

3、按键程序
void key()//按键扫描
{
if(key10)
{
delay(10);
if(key1
0)
{
while(!key1);
lcd_init();
mode++;
if(mode>2) mode=0;

	}
 }	

if(key20)
{
delay(10);
if(key2
0)
{
while(!key2);
if(mode==2)
{
ah++;
if(ah>80) ah=80;

			}
			if(mode==1)
			{
				al++;
				if(al>80) al=80;
			}
	}
 }	

if(key30)
{
delay(10);
if(key3
0)
{
while(!key3);
if(mode==2)
{

				if(ah>=1) ah--;
				
			}
			if(mode==1)
			{
			
				if(al>=1) al--;
			}
	}
}	

}
4、核心算法程序
//ADC0832函数==
uchar ADC0832()
{
uchar i,dat;
EA=0;
CS=1; //一个转换周期开始
CLK=0; //为第一个脉冲作准备
CS=0; //CS置0,片选有效
DIO=1; //DIO置1,规定的起始信号
CLK=1; //第一个脉冲
CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1; //DIO置1, 通道选择信号
CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
CLK=0; //第二个脉冲下降沿

DIO=0;                                                //选择通道0
CLK=1;                                                 //第三个脉冲
CLK=0;                                                 //第三个脉冲下降沿
DIO=1;                                                 //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1;                                                 //第四个脉冲
for(i=0;i<8;i++)                                       //高位在前
{
    CLK=1;                                             //第四个脉冲
    CLK=0;
    dat<<=1;                                           //将下面储存的低位数据向右移
    dat|=(unsigned char)DIO;                           //将输出数据DIO通过或运算储存在dat最低位
}            
CS=1;                                                 //片选取消
EA=1;
return dat;                                           //将读出的数据返回    

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值