简易金属探测器制作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define uchar unsigned char
#define uint unsigned int
bit flag; //定义标志位,确定是否到了1s
unsigned lonwenku.baidu.com x=0,x1=0,x2=0;
uchar T0count; //从T0的计数单元中读取计数的数值
uchar timecount;
}
}
}
void t0() interrupt 1 using 0 //T0中断服务
{
T0count++; //对P3。4口的脉冲进行计数
}
void t1(void) interrupt 3 using 0 //T1中断服务
{
TH1=(65536-3689)/256; //计数初值重装载
TL1=(65536-3689)%256;
P0 = ~0X02;
}
if(j==2)
{
x2 = x1+140;
P0 = ~0X04;
}
while(!KEY);
}
}
if(x>x2)//判断,发现金属
{
LED = 0; //打开LED和蜂鸣器
Speak = 0;
Delay_ms(200);
LED = 1; //关闭LED和蜂鸣器
Speak = 1;
2、按键设置探测金属的精度。
3、LED显示高、中、低。三种精度。
4、结构简洁,稳固,高效。
本系统采用USB电源供电,提供电源线,可以插到电脑、手机充电器、充电宝上供电,十分方便。
三、按键说明
系统有一个按键,设置精度加和精度减。
使用时,将金属物质放到线圈的上方或线圈中间,系统会自动报警
程序:
#include<reg52.h>
TH1=(65536-4000)/256; //定时器采用定时4ms.初值为4000
TL1=(65536-4000)%256;
TR1=1; //TR1=1,控制开关闭合,计数脉冲进入T1计数器,启动定时
TR0=1; //TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数
ET0=1; //定时器0开中断必须关闭!!!!
ET1=1; //定时器1开中断
EA=1; //CPU开中断
}
T0count=0;
TH0=0;
TL0=0;
TR0=1; //TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数
}
if(!KEY)
{
Delay_ms(20);
if(!KEY)
{
j++;
if(j==3)j=0;
if(j==0)
{
x2 = x1+80;
P0 = ~0X01;
}
if(j==1)
{
x2 = x1+110;
金属探测器
元件清单
提供Altium Designer 6.9和Protel99 SE所用格式的原理图和PCB,
此外,原理图分两种网络标号连接和使用线直接连接,并有PDF格式的原理图和PCB图,方便使用和查看。
1、提供KEIL编写程序工程和程序的文本文档文件方便打开,程序详尽注释。
二、功能说明
1、实现金属物质的探测,如硬币,钥匙,金属手机壳等,LED和蜂鸣器实现声光报警。
}
void main()//函数功能:主函数
{
unsigned char k=5,j=0;
Timer(); //定时器初始化
LED = 1; //关闭LED和蜂鸣器
Speak = 1;
P0 = 0X00;
Delay_ms(3000);
x1=0;
while(k)
{
if(flag==1)
{
k--;
flag=0; //清标志位
Speak = 0;
P0 = 0XFF;
Delay_ms(200);
LED = 1;
Speak = 1;
P0 = ~0X01;
x2 = x1+100;
while(1)
{
if(flag==1)
{
flag=0; //清标志位
x=T0count*65536+TH0*256+TL0; //取得时间宽度参数
timecount=0;
x=T0count*65536+TH0*256+TL0; //取得时间宽度参数
x1 = x1+x;
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1; //TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数
}
Delay_ms(1000);
}
x1 = x1/5;
LED = 0; //关闭LED和蜂鸣器
sbit LED = P2^0;//LED引脚定义
sbit Speak = P2^1;//蜂鸣器引脚定义
sbit KEY = P1^0;//按键1
void Timer(void);
//延时函数
void Delay_ms(uint jj)
{
uint ii;
while(jj--)
for(ii=0;ii<125;ii++);
timecount++;
if(timecount==25)
{ TR0=0;
timecount=0;
flag=1; //置标志
}
}
void Timer(void)
{
TMOD=0x15; //T0工作为16位计数器(方式1),T1工作方式为16位定时器
TH0=0; //计数为65536
TL0=0; //
相关文档
最新文档