1. 感应开关盖垃圾桶需求设计(196.41)
项目概述
- 功能描述
- 检测靠近时,垃圾桶自动开盖并伴随滴一声,2秒后关盖
- 发生震动时,垃圾桶自动开盖并伴随滴一声,2秒后关盖
- 按下按键时,垃圾桶自动开盖并伴随滴一声,2秒后关盖
- 硬件说明
- 接线说明
- 舵机控制口 P1.1;
- 超声波 Trig接 P1.5 ,Echo接 P1.6 ;
- 蜂鸣器接 P2.0 口;
- 震动传感器接 P3.2口(外部中断0)
2. 垃圾桶01_修改超声波为定时器一控制(197.42)
开发步骤:
- 舵机和超声波代码整合
- 舵机用定时器0
- 超声波用定时器1
- 实现物体靠近后,自动开盖,2秒后关盖
- 查询的方式添加按键控制
- 查询的方式添加震动控制
- 使用外部中断0配合震动控制
- 代码(13./垃圾桶01代码/11. 舵机控制)(舵机的代码不变)(舵机接P1.1口)
#include "reg52.h"
#include <intrins.h>
sbit sg90_con=P1^1;
int cnt=0;
int degree;
void Timer0Init()
{
TMOD=0x01;
TH0=0xFE;
TL0=0x33;
ET0=1;
EA=1;
TR0=1;
}
void Delay300ms()
{
unsigned char i, j, k;
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay2000ms()
{
unsigned char i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
Delay300ms();
Timer0Init();
degree=1;
cnt=0;
sg90_con=1;
while(1)
{
degree=3;
cnt=0;
Delay2000ms();
degree=1;
cnt=0;
Delay2000ms();
}
}
void Timer0Helper() interrupt 1
{
cnt++;
TH0=0xFE;
TL0=0x33;
if(cnt<degree)
{
sg90_con=1;
}else
{
sg90_con=0;
}
if(cnt==40)
{
cnt=0;
sg90_con=1;
}
}
- 代码(13./垃圾桶01代码/12. 超声波测距)(修改超声波代码,定时器0改为定时器1)
#include "reg52.h"
#include <intrins.h>
sbit D5 = P3^7;
sbit D6 =