📄 ufobeloved.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 + -