栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51系列密码锁:Proteus仿真+Keil程序(免费提供)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51系列密码锁:Proteus仿真+Keil程序(免费提供)

仿真图效果图:

密码输入正确时:

密码输入错误时:

 完整代码(不用担心不可以运行): 

#include
#include
#define uchar unsigned char
sbit RS=P1^0;      //LCD1602Êý¾Ý/ÃüÁîÑ¡Ôñ붨Ò壬½«RS¶¨ÒåΪP1.0µÄÒý½Å
sbit RW=P1^1;     // LCD1602¶ÁдѡÔñ붨Ò壬½«RW¶¨ÒåΪP1.1µÄÒý½Å
sbit EN=P1^2;     // LCD1602ʹÄÜÐźÅ붨Ò壬½«EN¶¨ÒåΪP1.2µÄÒý½Å
sbit ledg=P1^3;    //¿ªËøÖ¸Ê¾µÆ¶¨ÒåΪP1.3¿Ú
sbit ledr=P1^7;     //¿ªËøÊ§°ÜָʾµÆ¶¨ÒåΪP1.7¿Ú
sbit relay=P1^4;     //¼ÌµçÆ÷Êä³ö¶Ë¶¨ÒåΪP1.4¿Ú
sbit buzz=P1^6;     //·äÃùÆ÷Êä³ö¶Ë¶¨ÒåΪP1.6¿Ú
char table0[]="error";
char table1[]="open";
char table2[]="password:";            
int temp,ch,m0,m1,p,n0,n1,n2,n3,n4,n5;
void   delay(int z)
{
	int x,c;
	for(x=z;x>0;x--)
	for(c=100;c>0;c--);
}
keyscan()                         //¼üÅÌɨÃè×Ó³ÌÐò
{
	temp=P2&0xf0;
	P2=0xfe;                       //ɨÃèµÚ0ÐÐ
	delay(1);
	temp=P2&0xf0;
	while(temp!=0xf0)
	{
		switch(temp)
		{
			case 0xe0:ch='7';break;     //µÚ0ÐеÄÈý¸ö¼üÖµÅжÏ
			case 0xd0:ch='8';break;
			case 0xb0:ch='9';break;
			default:ch=p; break;       //pÊÇÏû¶¶Ö¸Ê¾Î»
		}
		while(temp!=0xf0)            //µÈ´ý°´¼üÊÍ·Å
		{
			temp=P2;
			temp=temp&0xf0;
		}
	}
	P2=0xfd;                          //ɨÃèµÚ1ÐÐ
	delay(1);
	temp=P2&0xf0;
	while(temp!=0xf0)
	{
		switch(temp)                   //µÚ1ÐеÄÈý¸ö¼üÖµÅжÏ
		{
			case 0xe0:ch='4';break;
			case 0xd0:ch='5';break;
			case 0xb0:ch='6';break;
			default:ch=p;break;
		}
		while(temp!=0xf0)            //µÈ´ý°´¼üÊÍ·Å
		{
			temp=P2;
			temp=temp&0xf0;
		} 
	}
	P2=0xfb;                        //ɨÃèµÚ2ÐÐ
	delay(1);
	temp=P2&0xf0;
	while(temp!=0xf0)
	{
    	switch(temp)                  //µÚ2ÐеÄÈý¸ö¼üÖµÅжÏ
		{
			case 0xe0:ch='1';break;
			case 0xd0:ch='2';break;
			case 0xb0:ch='3';break;
			default:ch=p;break;
		}
		while(temp!=0xf0)            //µÈ´ý°´¼üÊÍ·Å
		{
			temp=P2;
			temp=temp&0xf0;
		}
	}
	P2=0xf7;                        //ɨÃèµÚ3ÐÐ
	delay(1);
	temp=P2&0xf0;
	while(temp!=0xf0)  
	{
		switch(temp)                  //µÚ3ÐеÄÈý¸ö¼üÖµÅжÏ
		{
			case 0xe0:ch='A';break;
			case 0xd0:ch='0';break;
			case 0xb0:ch='B';break;
			default:ch=p;break;
		}
		while(temp!=0xf0)            //µÈ´ý°´¼üÊÍ·Å
		{
			temp=P2;
			temp=temp&0xf0;
		}
	}
	return ch;                           //·µ»Ø¼üÖµ
}
void wcom(uchar com)                   //LCD1602дÃüÁÊý
{
	RS=0;
	P3=com;
	delay(1);                      //дÃüÁîÑÓʱ¿ÉÒÔΪ1
	EN=1;
	delay(1);                     //дÃüÁîÑÓʱ¿ÉÒÔΪ1
	EN=0;
}
void wdat(uchar dat)                  //LCD1602дÊý¾Ýº¯Êý
{
	RS=1;
	P3=dat;
	delay(1);                      //дÊý¾ÝÑÓʱ¿ÉÒÔΪ1
	EN=1;
	delay(4);                     //дÊý¾ÝÑÓʱÖÁÉÙΪ4
	EN=0;
}
void init()                //LCD1602³õʼ»¯º¯Êý
{
	EN=0;
	wcom(0x38);
	wcom(0x0c);
	wcom(0x06);
	wcom(0x01);
}
void error()              //ÃÜÂë´íÎóÏÔʾ×Ó³ÌÐò
{
	char m2;
	wcom(0xc6);
	for(m2=0;m2<5;m2++)
	{
		wdat(table0[m2]);
	}
}
void open()              //ÃÜÂëÕýÈ·£¬¿ªËøÏÔʾ×Ó³ÌÐò
{
	char m2;
	wcom(0xc6);
	for(m2=0;m2<4;m2++)
	{
		wdat(table1[m2]);
	}
}
void pass()                //PasswordÏÔʾ
{
	char m2;
	wcom(0x80);
	for(m2=0;m2<9;m2++)
	{
		wdat(table2[m2]);
	}
}
change(int m)             //¼üÅÌÊýֵת»»Îª¡°*¡±ÏÔʾ
{
	delay(500);
	wcom(m);
	wdat('*');
}
main()                   //Ö÷³ÌÐò
{
	RW=0;
	ledg=0;
	ledr=0;
	relay=1;
	buzz=1;
	init();
	delay(5);
	pass();
	wcom(0x89);   //0x89=0x80+0x09£¬LCD1602´ÓµÚ1ÐеÚ9¸ö×Ö·û¿ªÊ¼ÏÔʾ
	while(keyscan()==p)  //µÈ´ý¼üÅ̰´ÏÂ
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());  //½«¼üÅ̰´ÏµÄÊýÖµÒÀ´Îдµ½LCD1602Òº¾§ÆÁ
	n0=keyscan();
	change(0x89);
	delay(10);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());
	n1=keyscan();
	change(0x8a);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
	keyscan();
	}
	wdat(keyscan());
	n2=keyscan();
	change(0x8b);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());
	n3=keyscan();
	change(0x8c); 
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
 	}
	wdat(keyscan());
	n4=keyscan();
	change(0x8d);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());
	n5=keyscan();
	change(0x8e);
	if(n0=='9'&&n1=='9'&&n2=='1'&&n3=='1'&&n4=='2'&&n5=='1')//ÃÜÂëÆ¥Åä³É¹¦
	{
		int m3=1;
		open();         //¿ªËøÏÔʾ
		relay=0;
		delay(3000);
		relay=1;  //ÈôÏ£Íû¼ÌµçÆ÷Ëù½Ó¶þ¼«¹ÜÔÚÁÁÒ»¶Îʱ¼äºóϨÃð£¬Ôò½«±¾ÐмÓÉÏ
		while(m3)
		{
			int m4,m5;
			ledg=0;
			for(m4=200;m4>0;m4--)
			{
				keyscan();
				if(keyscan()=='A')     //ÊäÈë¡°A¡±£¬Çå³ýָʾµÆ
				{
					m4=0;
					m3=0;
				}
			}
			ledg=1;
			if(m3!=0)
			{
				for(m5=200;m5>0;m5--)
				{
					keyscan();
					if(keyscan()=='A')
					{
						m3=0;
					}
				}
			}
		}
	}
	else                         //ÃÜÂëÆ¥Åä²»³É¹¦£¬ÏÔʾ´íÎó
	{
		ledr=1;
		error();
		buzz=0;
		delay(5000);
	}
}

若以上代码有任何错误或可以改进的地方欢迎在评论区指出并讨论。

感谢你的阅读与支持!

不想自己做仿真的自己下载(需要积分)源码和仿真,不过建议自己做一遍,可以加深理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号