密码锁的整体电路图:
程序流程图:
源程序:
/*
课程名称:电子密码锁设计
设计任务:根据设定好的密码,采用按键实现6为的输入功能,
当用户输入的密码正确并且是在规定的时间(普
通用户要求在12s内输入正确的密码)时,锁就
打开,如果输入的三次密码不正确,就发出警报
声。如果用户的时间超过40秒,电路将报警80
秒,若电路连续报警三次,电路将锁定键盘5分
钟,防止他人的非法操作
*/
#include"reg51.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit bj = P3^0; //定义报警
sbit led_y = P3^5; //定义黄色灯
sbit led_r = P3^6; //定义红色灯
sbit led_g = P3^7; //定义绿色灯
ulong pwd = 234567; //定义电子锁密码
uint gy = 0; //定义管理员/用户(管理员为1)标识
uint ss = 0; //定义上锁标识(0时表示已上锁)
uint flag = 0; //定义中断函数中所用到的标识
uchar sd = 1; //定义键盘锁定(1为未锁)标识
uint pcw = 0; //定义密码错误次数
uint bjc = 0; //定义报警次数
uint jp = 0; //定义键盘扫描值
uint cnt = 0; //定义中断次数
uint mcnt = 0;
uint cs = 0; //定义超时标识
uchar key;
//uchar j;
//定义共阳数码管段选数组
uchar code table[11] ={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,0x08};
//定义按键
uchar code table1[16] = {0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
//定义储存按键值
uchar table2[6];
//定义短延迟函数
void delay(uint n)
{
while(n--);
}
//定义延迟n s函数
void delayns(uint n)
{
unsigned char a,b,c,e;
for(e=n;e>0;e--)
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
//定义初始化函数
void init()
{
uchar i,k;
led_y = 0;
led_r = 1;
led_g = 1;
bj = 1;
EA = 1; //打开总中断
EX1 = 1; IT1 = 1; //打开外部中断1,并设置触发方式为下降触发方式
TMOD = 0X01; //设置定时器0工作方式1
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256; //给定时器0赋值为50ms
for(i = 0;i < 6; i++)
{
table2[i] = 10;
}
for(k = 0;k<8;k++)
{
P0=0x08;
P2 = k;
}
}
//定义上锁中断函数
void INT_0() interrupt 0
{
uchar h;
ss = 0; //密码锁上锁
led_g = 1;
for(h = 0;h < 6; h++) //初始化table2[]为10
{
table2[h] = 10;
}
}
//定义管理员/用户切换中断函数
void INT_1() interrupt 2
{
uchar h;
if(flag == 0)
{
gy = 1; //关闭管理员指示灯
led_y = 1; //关闭密码错误指示灯
flag = 1;
for(h = 0;h < 6; h++) //初始化table2[]为10
{
table2[h] = 10;
}
}
else
{
gy = 0; //关闭管理员指示灯
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』