⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufobeloved.c

📁 这是我的一个单片机竞赛设计
💻 C
字号:
#include<reg51.h>
#include<stdio.h>
#define uint unsigned int
#define ulong unsigned long

sbit P0_0=P0^0;		  //输0按键
sbit P0_1=P0^1;		  //输1按键
sbit P0_2=P0^2;		  //输2按键
sbit P0_3=P0^3;		  //输3按键
sbit P0_4=P0^4;		  //输4按键
sbit P0_5=P0^5;		  //输5按键
sbit P0_6=P0^6;		  //输6按键
sbit P0_7=P0^7;		  //输7按键		  
sbit P2_0=P2^0;		  //输8按键
sbit P2_1=P2^1;		  //输9按键

sbit P3_0=P3^0;	      //红外接口
sbit P3_1=P3^1;		  //密码重设键
sbit P3_2=P3^2;		  //报警LED闪耀
sbit P3_3=P3^3;	      //报警器接口

ulong sec=666666;	  //初始密码为111111
ulong input=0;		  //确认的输入值
uint num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的led共阳数字显示码
uint count=6;	         //输入密码个数
unsigned char temp;	    //控制输入

void delay(uint count)     //延时1毫秒子程序
{
	uint i,j;
	for(i=0;i<count;i++)
		for(j=0;j<120;j++)
			;
}

void alert(void)			  //报警30秒子程序
{
	uint i,k=1;
	for(i=0;i<500;i++)
	{
		P3_3=1;
		delay(30);
		P3_3=0;
		delay(30);
		k=-1*k;
		if(k==1)
		P3_2=1;
		else
		P3_2=0;
	}
}

void cot(void)	     //检查并记录输入的数字
{
	delay(10);
	temp=P0+P2;
	if(temp!=0)
	{
		if(P0_0)
		{
			input=input*10+0;
		}					     
		if(P0_1)
		{	
			input=input*10+1;
		}
		if(P0_2)
		{
			input=input*10+2;
		}
		if(P0_3)
		{
			input=input*10+3;
		}
		if(P0_4)
		{
			input=input*10+4;
		}
		if(P0_5)
		{
			input=input*10+5;
		}
		if(P0_6)
		{
			input=input*10+6;
		}
		if(P0_7)
		{
			input=input*10+7;
		}
		if(P2_0)
		{
			input=input*10+8;
		}
		if(P2_1)
		{
			input=input*10+9;
		} 
		count--;
		P0=0;
		P2=0;
		while(temp!=0)
		{
			temp=P0+P2;
			delay(10);
		}
	}
}

void abs(void)		 //输入密码解密过程
{
	uint i;
	uint j;
	uint flag=0;
	input=0;
	P0=0;
	P2=0;
	for(i=0;flag==0&&i<10;i++)
	{		
		P1=num[9-i];
		delay(10);			
		for(j=0;flag==0&&j<100;j++)
		{					
			delay(10);     ///////////////
			temp=P0+P2;
			if(temp!=0&&count!=0)
				cot();
			if(sec==input) 
			{
				P1=0xff;
				flag=1;
			}
			count=6;
		}							
	}	
}
void set(void)		//输入密码过程受Resec子函数调用 
{
	delay(10);
	temp=P0+P2;
	if(temp!=0)
	{
		if(P0_0)
		{
			P1=num[0];
			sec=sec*10+0;
		}
		if(P0_1)
		{	
			P1=num[1];
			sec=sec*10+1;
		}
		if(P0_2)
		{
			P1=num[2];
			sec=sec*10+2;
		}
		if(P0_3)
		{
			P1=num[3];
			sec=sec*10+3;
		}
		if(P0_4)
		{
			P1=num[4];
			sec=sec*10+4;
		}
		if(P0_5)
		{
			P1=num[5];
			sec=sec*10+5;
		}
		if(P0_6)
		{
			P1=num[6];
			sec=sec*10+6;
		}
		if(P0_7)
		{
			P1=num[7];
			sec=sec*10+7;
		}
		if(P2_0)
		{
			P1=num[8];
			sec=sec*10+8;
		}
		if(P2_1)
		{
			P1=num[9];
			sec=sec*10+9;
		} 
		count--;
		P0=0;
		P2=0;
		while(temp!=0)
		{
			P0=0;
			P2=0;
			delay(10);
			temp=P0+P2;
		}
	}
}

void Resec(void)	//重设密码子函数
{
		do{
		set();
		temp=P0+P2;
		}while(count!=0);
		P1=0xff;
		count=6;
}

void main(void)		 //主函数
{
    P0=0x00;
	P2_0=0;
	P2_1=0;
	P3_0=0;
    P3_1=0;
	P3_2=0;
 	while(1)
	{
		P1=0xff;
		if(P3_1)
		{
		    P3_1=0;
			sec=0;
			Resec();
		 }
		 
		 else if(P3_0)
         {
		   	P3_0=0;
			abs();
			if(sec!=input)
				alert();
			P3_2=0;
		 }		 
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -