欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《单片机实践项目》之《电子DIY》之基于51单片机+震动开关的模拟地雷设计

程序员文章站 2022-03-08 13:52:33
程序://视频讲解:B站:搜索:“逗比小憨憨”/*********************************************** 名称:基于51单片机的模拟地雷设计* 功能:1,使用震动开关进行相应的地雷触发2,当触发后,数码管进行60秒定时(即,60秒排雷时间)3,当定时时间到后,地雷爆炸(即,蜂鸣器报警,LED闪烁)4,当在排雷期间,若再次触发震动开关则地雷直接爆炸注意:踩到雷后,脚上发力前后两次不同并且受力差值(灵敏度)达到一定程度时则会触发地雷爆炸,...

程序:

//视频讲解:B站:搜索:“逗比小憨憨”
/**********************************************
*  名称:基于51单片机的模拟地雷设计
*  功能:
	1,使用震动开关进行相应的地雷触发
	2,当触发后,数码管进行60秒定时	(即,60秒排雷时间)
	3,当定时时间到后,地雷爆炸(即,蜂鸣器报警,LED闪烁)
	4,当在排雷期间,若再次触发震动开关则地雷直接爆炸
注意:
	踩到雷后,脚上发力前后两次不同并且受力差值(灵敏度)达到一定程度时则会触发地雷爆炸,震动开关可以通过点位器调节灵敏度

**************************************************/

#include<reg51.h>

#define uchar unsigned char
#define uint unsigned  int

sbit dula=P2^6;
sbit wela=P2^7;
sbit fm=P2^3;
sbit ctr=P3^2;

uchar flag=0;
uchar j,k,c1,c0,m,n=255;
uchar pp;
int k1=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint i)
{
  for(j=i;j>0;j--)
    for(k=118;k>0;k--);
}

void display(uchar a,uchar b)
{
   P0=table[a];
   dula=1;
   dula=0;
   
   P0=0xef;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[b];
   dula=1;
   dula=0;
   
   P0=0xdf;
   wela=1;
   wela=0;
   delay(5);
}

void main(void)
{
	int k=0;
	TMOD|=0x01;		 
	TR0=0;			 
	IT0=1;
	EX0=1;
	TH0=(65536-46080)/256;
	TL0=(65536-46080)%256;
	ET0=1;			 //开定时器0中断
	fm=1;
	P1=0XFF;
	EA=1;			 //开总中断
	while(1)
	{
		if(flag==1)
		{
			if(pp==20)
			{	
				pp=0;
				m++;
				if(m==60)
				{
					TR0=0;
					ET0=0;
					flag=0;
					m=0;	   //若到了60s,则归零
					for(k=0;k<20;k++)
					{
						P1=~P1;
						fm=!fm;
						delay(500);
					}
					fm=1;
				}
			}
			c0=m%10;		  //取出当前描述的个位与十位
			c1=m/10;
			display(c1,c0);	   //显示
		}
		else
			display(8,8);
	}
}


void int0(void) interrupt 0
{
	delay(10);
	if(ctr==0)
	{
		flag++;
		//while(ctr==0);
	}
	if(flag==1)
	{
		TR0=1;
		pp=0;
		m=0;
		fm=1;
		ET0=1;
		TH0=(65536-46080)/256;
		TL0=(65536-46080)%256;
	}
	else if(flag==2)
	{
		display(8,8);
		ET0=flag=0;
		TR0=0;
		fm=0;
		pp=0;
		m=0;
		for(k1=0;k1<20;k1++)
		{
			P1=~P1;
			delay(500);
		}
		TH0=(65536-46080)/256;
		TL0=(65536-46080)%256;		
	}
}

void time0(void) interrupt 1
{
	TH0=(65536-46080)/256;
	TL0=(65536-46080)%256;
	pp++;
}

本文地址:https://blog.csdn.net/liuxianfei0810/article/details/107299535