标题:
单片机密码锁设计 包含c51程序及proteus图 功能齐全
[打印本页]
作者:
fangsheng
时间:
2018-4-27 14:56
标题:
单片机密码锁设计 包含c51程序及proteus图 功能齐全
密码锁仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg
(62.78 KB, 下载次数: 61)
下载附件
2018-4-29 01:08 上传
0.jpg
(54 KB, 下载次数: 42)
下载附件
2018-4-29 01:07 上传
单片机源程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6 ;
sbit RW = P2^5;
sbit E = P2^7;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
uchar b,c,d,n,g=0,e=0;
uchar o=0,t=0,m=0;
uchar a[2][6];
uint j;
void fbusy(void);
void write_command(uchar com);
void write_data(uchar j);
void LCD_init(void);
void string(uchar ad ,uchar *s);
void lcd_test(void);
void input1(void);
void panduan(void);
void jinggao(void);
void delay();
void delay1(unsigned char x);
void key(void);
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++)
{
;
}
}
void fbusy(void) //忙函数
{
RS = 0;
RW = 1;
E = 1;
E=0;
while(P0 & 0x80)
{E = 0;E=1;}
delay(1);
}
void write_command(uchar com) //写命令函数
{ fbusy();
E = 0;
RS = 0;
RW = 0;
E=1;
P0 = com;
E = 0;
delay(1);
}
void write_data(uchar j) //写数据函数
{
fbusy();
E = 0;
RS = 1;
RW = 0;
E=1;
P0 = j;
E=0;
delay(1);
}
void LCD_init(void) //LCD初始化
{ write_command(0x38);
write_command(0x01);
write_command(0x0e);
write_command(0x14);
delay(1);
}
void string(uchar ad, uchar *s)
{ write_command(ad);
while(*s>0)
{ write_data(*s++);
delay(100);
}
}
void delay1(unsigned char x) //大延迟函数
{
unsigned char i,j,k;
do
{
for(i=10;i>0;i--)
for(j=100;j>0;j--)
for(k=249;k>0;k--);
}
while(--x);
}
void key() //键盘
{
while(1)
{
if(m>2) //输错三次
{
LCD_init();
for(t=0;t<100;t++)
{
P3_1=0;
delay(10);
P3_1=1;
delay(10);
}
jinggao(); //警告
delay1(5);
m=0;
input1();
}
P1=0xf0;
if(P1!=0xf0)
{
delay(150);
if(P1!=0xf0)
{
switch(P1)
{
case 0x70:b=0;break;
case 0xb0:b=1;break;
case 0xd0:b=2;break;
case 0xe0:b=3;break;
default:break;
}
P1=0x0f;
switch(P1)
{
case 0x07:c=0;break;
case 0x0b:c=1;break;
case 0x0d:c=2;break;
case 0x0e:c=3;break;
default:break;
}
d=(4*b+c);
if(d==10) //更改键
{
delay1(1);
if(e>=1)
{
write_command(0x04);
write_data(' ');
write_command(0x06);
e--;
}
}
if(d==11) //设置新密码
{
delay1(2);
g=1;e=0;o=1;
LCD_init();
string(0x80,"new code:");
if(e<6)
{
key();
write_data('0'+d);
a[g][e]=d;
e++;
}
for(e=0;e<6;e++)
{
a[0][e]=a[1][e];
}
LCD_init();
string(0x80,"Reset");
string(0xc0,"Successfully");
delay1(2);
o=0;e=0;
input1();
key();
}
if(d<=9)
{
if(e<6)
{
write_data('0'+d);
a[g][e]=d;
e++;
delay1(1);
if(g==0&e>5)
{
e=0;g++;
delay1(2);
LCD_init();
string(0x80,"set");
string(0xc0,"successfully");
delay1(2);
input1();
}
if(g>0&e>5)
{
delay1(1);
LCD_init();
if(o==0)
panduan();
if(o==1)
break;
}
}
}
}
}
}
}
void panduan()
{
n=1;g=1;
for(e=0;e<6;e++)
{
if(a[0][e]!=a[1][e]) //第一次输入与第二次输入不同为n=0
{
n=0;
}
}
if(n==1) //相同
{
P3_0=1;
LCD_init();
string(0x80,"Right");
delay1(5);
input1();
e=0;m=0;
key();
}
if(n==0) //不同
{
P3_0=0;
LCD_init();
string(0x80,"Error");
delay1(3);
input1();
e=0;m=m+1;
key();
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
密码锁.zip
(137.74 KB, 下载次数: 54)
2018-4-27 14:54 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1