基于51单片机的宠物投喂系统(简易版)

  1. 功能
    1.外部放置四个键盘,用于设置不同的投喂时间间隔
    2.时间达到设定值,发光二极管以及蜂鸣器工作。
    3.距离下次投喂的时间以倒数形式展示在数码管

  2. 具体思路
    为了实现时间计算的精准,这里通过t0。
    其次,为了实现倒计时,需要在中断部分进行相应的调整。
    最后,我们需要控制蜂鸣器以及LED。

  3. 实现
    本文在Proteus上进行仿真,使用89C51型号的单片机。
    第一步:计时准确以及如何实现倒计时:

	TMOD|=0x01; //定时计数器0,工作方式1

以及我们需要设置它的初值,在这里,我设置为10ms,循环100次

	TH0=0xd8;
	TL0=0xf0;

当然,接下来的就是模板化的语句,开中断,设置触发方式等等

	EA=1;
   ET0=1;
   TR0=1;

实现了1ms的初值设置,我们需要在中断部分设置变量,使之实现1s的精确定时。之后,我们需要通过判断经过了多少个1s 来计算 分钟 以及 小时。

void Inter0() interrupt 1
{
   TH0=0xd8;
   TL0=0xf0;
   i++;
   if(i==100)
   {
   	 i=0;
	   s--;
	   if(s==0)
	   {				
		   if(m==0)
		   { 
				 if(h==0) 
				 {
					 react();//当倒计时结束,我们需要点亮LED以及使蜂鸣器工作
				 }
				 else if(h!=0)
				 {
					 h--;
					 m=59;
					 s=59;
				 }
			 }
			 else if(m!=0)
			 {
				 m--;
				 s=59;
			 }
		}
	}
}

关于如何使LED以及蜂鸣器工作,这里简单的展示下函数内容:

void react()
{	
		EA = 0;	
		buzzer = ~buzzer;
		led = 0;//这里看自己的接线是接+5V还是接地。
}

最后,就是如何通过按键来调整倒计时的具体时间:

void keydown()
{
	if(key0 == 0)      //关闭定时器,进而使数码管显示不变
	{
		delay(1000);
		if(key0 == 0)
		{
			EA = 0;
			led = 1;
			buzzer = 1;
		}
	}
	if(key1 == 0)			 //开启定时器,使数码管显示继续变化		
	{
		delay(1000);
		if(key1 == 0)
		{
			EA = 1;
		}
	}
	if(key2 == 0)			 
		{
			delay(1000);
			if(key2 == 0)
			{
				h=3;
				m=30;
				s=value;
			}
		}
		if(key3 == 0)			 
		{
			delay(1000);
			if(key3 == 0)
			{
				h=4;
				m=0;
				s=value;
			}
		}
		if(key4 == 0)			 
		{
			delay(1000);
			if(key4 == 0)
			{
				h=4;
				delay(5);
				m=30;
				delay(5);
				
			}
		}
}

这里,我直接设置了几种倒计时方案,没有选择通过某个按键来为小时+1等待,(是因为我在尝试这个方式时,秒的显示一直是乱码,最终没能解决,如果有这方面经验的希望可以分享)

最后的最后,本文的Proteus接线图以及单片机编程已上传至CSDN,如有需要直接搜索 基于51单片机的宠物投喂系统 (免费)

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值