普中单片机密码锁源程序
时间: 2023-07-24 20:23:24 浏览: 50
以下是普中单片机密码锁的源程序,你可以参考它进行开发:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lock=P1^0; //锁控制引脚
sbit beep=P1^1; //蜂鸣器控制引脚
sbit led=P1^2; //LED控制引脚
sbit key1=P3^0; //密码输入键
sbit key2=P3^1; //开锁键
sbit key3=P3^2; //关锁键
uchar password[4]={'1','2','3','4'}; //预设密码
uchar input[4]; //输入密码
uchar count=0; //计数器
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar i) //显示函数
{
switch(i)
{
case 0:P2=0x3f;break;
case 1:P2=0x06;break;
case 2:P2=0x5b;break;
case 3:P2=0x4f;break;
case 4:P2=0x66;break;
case 5:P2=0x6d;break;
case 6:P2=0x7d;break;
case 7:P2=0x07;break;
case 8:P2=0x7f;break;
case 9:P2=0x6f;break;
case 10:P2=0x77;break;
case 11:P2=0x7c;break;
case 12:P2=0x39;break;
case 13:P2=0x5e;break;
case 14:P2=0x79;break;
case 15:P2=0x71;break;
default:break;
}
}
void check() //密码比对函数
{
uchar i=0;
for(i=0;i<4;i++)
{
if(input[i]!=password[i])
break;
}
if(i==4) //密码正确
{
lock=0; //打开锁
beep=1; //蜂鸣器响
led=1; //LED亮
display(10); //显示“开”
}
else //密码错误
{
beep=0; //蜂鸣器不响
led=0; //LED灭
display(13); //显示“错”
}
delay(500); //延时0.5秒
display(15); //清除LED显示
led=1; //LED亮
count=0; //计数器清零
}
void main() //主函数
{
while(1)
{
if(key1==0) //密码输入键按下
{
delay(10); //延时去抖
if(key1==0)
{
input[count]=count+1; //输入密码
if(input[count]>9)
input[count]=0; //密码为0~9
display(input[count]); //显示输入的密码
count++; //计数器加1
if(count>=4) //输入密码完成
{
check(); //比对密码
}
while(!key1); //等待键释放
}
}
if(key2==0) //开锁键按下
{
delay(10); //延时去抖
if(key2==0)
{
lock=0; //打开锁
beep=1; //蜂鸣器响
led=1; //LED亮
display(10); //显示“开”
while(!key2); //等待键释放
}
}
if(key3==0) //关锁键按下
{
delay(10); //延时去抖
if(key3==0)
{
lock=1; //关闭锁
beep=0; //蜂鸣器不响
led=0; //LED灭
display(11); //显示“关”
while(!key3); //等待键释放
}
}
}
}
```
注意:此源程序仅供参考,具体实现需要根据硬件电路和实际需求进行调整。