我需要一段代码,用 STC89C52 单片机作为核心控制元件,LCD 显示,设计防盗密码锁,具体要求如下: (1) 系统启动后,第一次设置密码,用 LCD 显示“PLEASE SET CODE”,提示设置 密码。 (2) 当 8 位密码设置完成后,蜂鸣器响 2s,表示设置成功。 (3) 接着 LCD 显示“INPUT PASSWORD”,提示输入密码;当 8 位密码全部输入正 确后,LCD 显示“PLEASE COME IN”,同时 LED 小灯闪烁三下表示门打开。 (4) 如果密码输入错误,LCD 继续显示“INPUT PASSWORD”,如果连续三次密码 输入错误,则 LED 灯闪烁频率加快,同时蜂鸣器持续响起,发出警报声。
时间: 2024-02-29 20:52:58 浏览: 168
好的,以下是一份基于STC89C52单片机的防盗密码锁代码。请注意,这仅是一个参考示例,需要根据具体硬件环境和需求进行修改和优化。同时,本代码只提供基本的密码保护功能,不具备高级防盗功能。
```
#include <reg52.h>
#include <lcd.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P1^5; //蜂鸣器
sbit LED=P1^6; //LED灯
uchar code password[8]={1,2,3,4,5,6,7,8}; //初始密码
uchar input[8]; //输入的密码
uchar count=0; //输入的密码位数
uchar error=0; //输入错误次数
uchar i;
void DelayMS(uint ms) //延时函数
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<120;j++);
}
}
void Beep() //蜂鸣器响2秒
{
uchar j;
for(j=0;j<20;j++)
{
BEEP=~BEEP;
DelayMS(100);
}
}
void Open() //门打开
{
uchar j;
for(j=0;j<3;j++)
{
LED=~LED;
DelayMS(500);
}
}
void Alarm() //输入错误警报
{
uchar j;
while(1)
{
for(j=0;j<10;j++)
{
BEEP=~BEEP;
DelayMS(50);
}
LED=1;
DelayMS(500);
LED=0;
DelayMS(500);
}
}
void Check() //检查密码
{
for(i=0;i<8;i++)
{
if(input[i]!=password[i])
{
error++;
return;
}
}
error=0;
Open();
}
void Interrupt_Init() //定时器中断初始化
{
TMOD=0x01; //定时器0,模式1
TH0=0xFC; //定时1ms
TL0=0x18;
TR0=1; //启动定时器0
ET0=1; //开定时器0中断
EA=1; //开总中断
}
void main()
{
uchar j;
Interrupt_Init();
LCD_Init();
LCD_Clear();
P1=0xFF;
while(1)
{
if(count==0) //设置密码
{
LCD_Write_String(0,0,"PLEASE SET CODE");
for(i=0;i<8;i++)
{
input[i]=0;
}
count=8;
while(count!=0);
LCD_Clear();
Beep();
DelayMS(500);
}
else //输入密码
{
LCD_Write_String(0,0,"INPUT PASSWORD");
for(i=0;i<8;i++)
{
input[i]=0;
}
count=8;
while(count!=0);
Check();
if(error==3)
{
Alarm();
}
else if(error>0)
{
LCD_Write_String(0,0,"INPUT PASSWORD");
DelayMS(500);
}
else
{
LCD_Write_String(0,0,"PLEASE COME IN");
Open();
}
}
}
}
void Timer0_ISR() interrupt 1 //定时器0中断服务程序
{
uchar key=P1;
key=key&0xF0;
if(key!=0xF0) //有按键按下
{
DelayMS(10); //消抖
key=P1;
key=key&0xF0;
if(key!=0xF0) //确认按键
{
key=P1;
key=key|0x0F;
switch(key)
{
case 0x7E: //按键1,密码位数减1
if(count<8)
{
count++;
}
LCD_Write_String(0,1," ");
LCD_Write_Char(0,1,count+'0');
break;
case 0xBE: //按键2,密码位数加1
if(count>0)
{
count--;
}
LCD_Write_String(0,1," ");
LCD_Write_Char(0,1,count+'0');
break;
case 0xDE: //按键3,输入数字
if(count>0)
{
input[8-count]=i;
count--;
LCD_Write_Char(8-count,1,i+'0');
}
break;
case 0xEE: //按键4,清除输入
count=8;
LCD_Write_String(0,1," ");
break;
}
}
}
TH0=0xFC; //重新赋值
TL0=0x18;
}
阅读全文