《簡易金屬探測器制作》由會員分享,可在線閱讀,更多相關《簡易金屬探測器制作(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、金屬探測器
元件清單
提供Altium Designer 6.9和Protel99 SE所用格式的原理圖和PCB,
此外,原理圖分兩種網(wǎng)絡標號連接和使用線直接連接,并有PDF格式的原理圖和PCB圖,方便使用和查看。
1、 提供KEIL編寫程序工程和程序的文本文檔文件方便打開,程序詳盡注釋。
二、功能說明
1、實現(xiàn)金屬物質(zhì)的探測,如硬幣,鑰匙,金屬手機殼等,LED和蜂鳴器實現(xiàn)聲光報警。
2、按鍵設置探測金屬的精度。
3、LED顯示高、中、低。三種精度。
4、結(jié)構簡潔,穩(wěn)固,高效。
本系統(tǒng)采用USB電源供電,提供電源線,可以插到電腦、手機充電器、充電寶上供電,十分方
2、便。
三、按鍵說明
系統(tǒng)有一個按鍵,設置精度加和精度減。
使用時,將金屬物質(zhì)放到線圈的上方或線圈中間,系統(tǒng)會自動報警
程序:
#include
#define uchar unsigned char
#define uint unsigned int
bit flag; //定義標志位,確定是否到了1s
unsigned long x=0,x1=0,x2=0;
uchar T0count; //從T0的計數(shù)單元中讀取計數(shù)的數(shù)值
uchar timecount;
sbi
3、t LED = P2^0;//LED引腳定義
sbit Speak = P2^1;//蜂鳴器引腳定義
sbit KEY = P1^0;//按鍵1
void Timer(void);
//延時函數(shù)
void Delay_ms(uint jj)
{
uint ii;
while(jj--)
for(ii=0;ii<125;ii++);
}
void main() //函數(shù)功能:主函數(shù)
{
unsigned char k=5,j=0;
Timer(); //定時器初始化
LED = 1; //關閉LED和蜂鳴器
4、 Speak = 1;
P0 = 0X00;
Delay_ms(3000);
x1=0;
while(k)
{
if(flag==1)
{
k--;
flag=0; //清標志位
x=T0count*65536+TH0*256+TL0; //取得時間寬度參數(shù)
x1 = x1+x;
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
5、 //TR0=1,控制開關閉合,計數(shù)脈沖進入T1計數(shù)器,啟動計數(shù)
}
Delay_ms(1000);
}
x1 = x1/5;
LED = 0; //關閉LED和蜂鳴器
Speak = 0;
P0 = 0XFF;
Delay_ms(200);
LED = 1;
Speak = 1;
P0 = ~0X01;
x2 = x1+100;
while(1)
{
if(flag==1)
{
flag=0;
6、 //清標志位
x=T0count*65536+TH0*256+TL0; //取得時間寬度參數(shù)
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1; //TR0=1,控制開關閉合,計數(shù)脈沖進入T1計數(shù)器,啟動計數(shù)
}
if(!KEY)
{
Delay_ms(20);
if(!KEY)
{
j++;
if(j==3)j=0;
if(j==0)
{
7、
x2 = x1+80;
P0 = ~0X01;
}
if(j==1)
{
x2 = x1+110;
P0 = ~0X02;
}
if(j==2)
{
x2 = x1+140;
P0 = ~0X04;
}
while(!KEY);
}
}
if(x>x2)//判斷,發(fā)現(xiàn)金屬
{
LED = 0; //打開LED和蜂鳴器
Speak = 0;
Delay_m
8、s(200);
LED = 1; //關閉LED和蜂鳴器
Speak = 1;
}
}
}
void t0() interrupt 1 using 0 //T0中斷服務
{
T0count++; //對P3。4口的脈沖進行計數(shù)
}
void t1(void) interrupt 3 using 0 //T1中斷服務
{
TH1=(65536-3689)/256; //計數(shù)初值重裝載
T
9、L1=(65536-3689)%256;
timecount++;
if(timecount==25)
{ TR0=0;
timecount=0;
flag=1; // 置標志
}
}
void Timer(void)
{
TMOD=0x15; //T0工作為16位計數(shù)器(方式1),T1工作方式為16位定時器
TH0=0; //計數(shù)為65536
10、
TL0=0; //
TH1=(65536-4000)/256; //定時器采用定時4ms. 初值為4000
TL1=(65536-4000)%256;
TR1=1; //TR1=1,控制開關閉合,計數(shù)脈沖進入T1計數(shù)器,啟動定時
TR0=1; //TR0=1,控制開關閉合,計數(shù)脈沖進入T1計數(shù)器,啟動計數(shù)
ET0=1; //定時器0開中斷 必須關閉?。。?!
ET1=1; //定時器1開中斷
EA=1; //CPU開中斷
}