基于51单片机的智能垃圾桶程序及protues仿真图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

传统垃圾桶存在诸多不便,如需要手动开盖、容易滋生细菌、无法提醒清理等问题。为了解决这些问题,我们设计了这款智能垃圾桶,它结合了传感器技术、单片机控制和自动化机械结构,实现了自动开盖、垃圾满溢提醒,为人们的生活带来了全新的体验。


题目要求

蜂鸣和led报警、超声波传感器检测垃圾高度,进行垃圾桶状态检测、红外对管进行人体检测、按键电路手动控制垃圾桶开关 
1、    上电液晶显示“欢迎使用智能垃圾桶系统”,5秒后显示 “垃圾桶状态:正常”
2、    白天有人的时候,垃圾桶打开,液晶显示“垃圾桶状态:打开”
3、    晚上有人扔垃圾,绿色照明灯打开,垃圾桶打开,5秒后,垃圾桶关闭,液晶显示“垃圾桶状态:关闭”
4、    超声波测距检测垃圾桶的容量,容量满,蜂鸣器报警,红色指示灯闪烁,液晶显示,“垃圾桶状态:异常”
5、    此时,如果有人继续投放垃圾,垃圾桶盖不再打开,蜂鸣器报警,红色指示灯闪烁,频率加快。
6、    手动按键可手动打开垃圾桶。若垃圾桶状态已满,则手动按键失去作用。

一、protues仿真图

二、相关程序

1.头文件,引脚定义及延时函数

代码如下(示例):

#include "reg52.h"
#include "intrins.h"

typedef unsigned int u16;
typedef unsigned char u8;

//1602
sbit cs=P1^5;
sbit clk=P1^6;
sbit di=P1^7;

//0832
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;

//开关
sbit md=P1^4;
//舵机
sbit pwm=P2^7;
//超声波
sbit trig=P3^0;
sbit echo=P3^1;
//led灯
sbit green=P3^6;
sbit red=P3^7;
//蜂鸣器
sbit buzz=P3^5;
//按键
sbit key=P1^0;

u8 h[5];
u16 h1=0;

unsigned long dist;

u8 open=0;
u8 a=150;
u8 dev=1;
u8 on_off=0;
u8 be=0;
u8 op=0;
u16 time=0;
u16 tt;
u16 flag;
u8 display[6];

void us(u16 u)//10us
{
    while(u--);
}
void ms(u16 ms)//1ms
{
    u16 i,j;
    for(i=ms;i>0;i--)
    for(j=110;j>0;j--);
}

2.驱动程序

代码如下(示例):

void write_cmd(u8 cmd)
{
    rs=0;
    rw=0;
    e=0;
    P0=cmd;
    ms(1);
    e=1;
    ms(1);
    e=0;
}
void write_data(u8 dat)
{
    rs=1;
    rw=0;
    e=0;
    P0=dat;
    ms(1);
    e=1;
    ms(1);
    e=0;
}
void init()
{
    write_cmd(0x38);
    write_cmd(0x0c);
    write_cmd(0x06);
    write_cmd(0x01);
}
void lcd_str(u8 x,u8 y, u8 *str)
{
    u8 i=0;
    if(y==0)
        write_cmd(0x80+x);
    if(y==1)
        write_cmd(0xc0+x);
    if(y==2)
        write_cmd(0x94+x);
    if(y==3)
        write_cmd(0xd4+x);
    for(i=0;str[i]!='\0';i++)
    {
        write_data(str[i]);
    }
}

u8 ad0832()
{
    u8 i,k,j;
    cs=0;
    for(j=0;j<3;j++)
    {
        clk=1;
        di=1;
        us(2);
        clk=0;
        us(2);
    }
    for(i=0;i<8;i++)
    {
        clk=1;
        us(2);
        clk=0;
        us(2);
        k=(k<<1)|di;
    }
    cs=1;
    us(2);
    return k;
}

void count()
{
    time=TH0*256+TL0;
    TH0=0;
    TL0=0;
    dist=(int)(time*0.1725);
}

3.打开定时器程序

代码如下(示例):

void timeinit()
{
	TMOD=0X11;
	TH0=0;
	TL0=0;
	TH1=0XFF;
	TL1=0X00;
	EA=1;
	ET1=1;
	ET0=1;
	TR1=1;
	TR0=1;
}

4.main函数

void main()
{
	init();
	lcd_str(0,0,"Welcome to the smart trash can system");
	ms(5000);
	write_cmd(0x01);
	timeinit();
	red=1;
	while(1)
	{
		while(!echo);
		TR0=1;
		while(echo);
		TR0=0;
		count();
		lcd_str(0,3,h);
		if(dist<501)
		{
			lcd_str(3,1,"normal");
			red=1;
			on_off=1;
		}
		if(dist>500)
		{
			lcd_str(3,1,"adnormal");
			lcd_str(12,1,"overflow");
			dev=1;
			on_off=2;
		}
		lcd_str(0,0,"Trash can ststus:");
		lcd_str(11,1,"-");
		h1=ad0832()/2.55;
		if(h1<51)
		{
			lcd_str(0,2,"night");
			open=1;
		}
		if(h1>50)
		{
			lcd_str(0,2,"night");
			open=2;
		}
		if(on_off==1)
		{
			if(md==1)
			{
				lcd_str(12,1,"close");
				op=0;
				dev=1;
			}
			if(md==0)
			{
				lcd_str(12,1,"close");
				if(open==1)
				{
					dev=7;
				}
				if(open==2&&op==0)
					dev=7;
			}
		}
		if(on_off==1)
		{
			if(md==0&&open==2&&op==0)
			{
				green=0;
				dev=7;
				ms(2000);
				green=1;
				dev=1;
				op=1;
			}
		}
		if(key==0)
		{
			if(on_off==1)
			{
				md=~md;
			}
			if(on_off==2&&a>10)
			{
				a-=10;
			}
			while(key==0);
		}
		if(on_off==2)
		{
			red=~red;
			ms(a);
			buzz=~buzz;
			ms(a);
		}
	}
}

5.定时器程序

void time0() interrupt 1
{
	flag=1;
}
void time1_time() interrupt 3
{
	TH1=0XFF;
	TL1=0X00;
	tt++;
	if(on_off==1)
	{
		time++;
		if(time>199)
		{
			time=0;
		}
		if(time<dev)
		{
			pwm=1;
		}
		if(time>dev)
		{
			pwm=0;
		}
	}
	if(tt>=100)
	{
		tt=0;
		trig=1;
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		trig=0;
	}
}

总结

以上是智能垃圾桶的protues仿真及程序编写,如有不足请各位大佬指正。

通过百度网盘分享的文件:51智能垃圾箱.rar
链接: https://pan.baidu.com/s/18qWvPb3PFq1md9AE44hkWg?pwd=4cps 提取码: 4cps

### 回答1: 基于51单片机的电子时钟项目需要通过Keil编写程序,并使用Proteus进行仿真电路搭建。该项目主要包括以下几个步骤: 1. 硬件搭建:按照电子时钟的设计需求,连接51单片机和相关的电子元件,如晶体振荡器、数码管、按键等。通过Proteus软件,可以将这些元件连接起来,搭建出完整的电路。 2. Keil程序编写:使用Keil软件,编写51单片机的C语言程序。该程序需要实现时钟的功能,包括时、分、秒的显示和计时、调整时间、闹钟功能等。通过编程,可以控制数码管的显示,以及对按键进行响应。 3. Proteus仿真:将编写好的程序通过Proteus软件连接至搭建好的电路。进行仿真测试时,可以通过模拟时钟的不同状态,调试和验证编写的程序的正确性和稳定性。仿真过程中,可以检查数码管的显示情况,以及程序对按键输入的响应。 4. 优化和调试:根据仿真过程中的结果,对程序进行优化和调试。可能需要根据具体的需求,修改程序中的一些逻辑或代码,确保电子时钟的功能正常运行,并符合设计要求。 总的来说,基于51单片机的电子时钟项目需要通过Keil编写程序,并结合Proteus进行仿真电路搭建和测试。通过这样的开发流程,可以实现一个功能完善、稳定可靠的电子时钟。 ### 回答2: 基于51单片机的电子时钟keil程序protues仿真电路组成了一个完整的设计方案。 首先,keil程序是用于开发51单片机的集成开发环境,它提供了编译、调试和仿真等功能,能够帮助程序员快速开发51单片机的应用程序。在电子时钟的设计中,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能。 其次,protues是一款电子设计自动化软件,它提供了电子电路仿真和PCB布局设计等功能,能够帮助我们快速验证电路的正确性。在电子时钟的设计中,我们可以使用protues来建立电子时钟的仿真电路,验证单片机代码的正确性和稳定性。 基于51单片机的电子时钟设计,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能,包括时间显示、报时功能、闹钟功能等。通过keil的编译、调试和仿真功能,我们可以验证代码的正确性和稳定性。 在电路设计方面,我们可以使用protues来建立电子时钟的仿真电路,通过仿真可以验证电路的正确性和稳定性,包括时钟电路、数码管驱动电路、按钮输入电路等。通过protues的电路仿真功能,我们可以检查电路设计的错误和漏洞,提前解决电路问题。 基于51单片机电子时钟keil程序protues仿真电路的组合,我们可以全面验证电子时钟的功能和性能,确保设计的准确性和可靠性,为最终实现一个完整的电子时钟设计提供了有力的支持。 ### 回答3: 基于51单片机的电子时钟keil程序protues仿真电路可以实现以下功能: 1. 显示当前时间:我们可以使用数码管或LCD显示模块来显示当前的时、分和秒。通过编写相应的程序,我们可以从单片机的时钟源获取当前时间,并将其转换为可以在数码管或LCD上显示的格式。 2. 时间调整功能:可以通过按钮或旋钮等输入设备来调整电子时钟的时间。当用户按下或旋转输入设备时,我们可以响应用户的操作,并对时钟的时间进行相应的调整。 3. 闹钟功能:我们可以设置闹钟功能,让电子时钟在特定的时间点发出警报声。通过在程序中设置闹钟时间和警报声的播放方式,我们可以实现这一功能。 4. 温湿度监测:如果我们希望电子时钟能够同时监测室内的温度和湿度,我们可以连接温湿度传感器,并在程序中读取传感器的数据。然后,我们可以将这些数据显示在数码管或LCD上。 程序开发过程中,我们可以使用keil来编写51单片机程序,通过keil提供的调试工具来测试和调试程序的正确性。同时,我们可以在protues中设计和仿真电子时钟的电路,包括单片机、显示模块、输入设备和传感器等所有的硬件组件。这样,我们可以在protues中验证电路的功能和效果,并进行性能优化和调试。当电路和程序都满足我们的要求后,我们就可以将程序烧录到实际的硬件上,并使用它作为一台完整的电子时钟了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值