⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms-1602-good.txt

📁 八位数字密码锁设计资料
💻 TXT
字号:
#include<reg52.h>             
#include<math.h>                
#include<intrins.h>              
#define	uchar unsigned char      
#define	uint unsigned int
#define	 data_IO P2
#define Mng 0x80 		//用于检测LCM状态字中的Busy标识
sbit     rs=P3^0;	//指令和数据寄存器 "1是数据," "0是指令"
sbit     rw=P3^1;//读写控制,"1读" "0写"
sbit	  e=P3^2; //片选信号
sbit      p=P2^7;
sbit   deng=P3^7;/// 修改密码时的灯
sbit   md=P3^4;///响音乐的端口


void WriteDataLCM(unsigned char WDLCM);           //写数据
void WriteCommandLCM(unsigned char WCLCM,BuysC);  //写命令字
unsigned char ReadDataLCM(void);                  //读数据
uchar busy(void); 
uchar pwflag;//密码是否正确的标志位
uchar count;//
uchar gg=0 ;//只有输入正确的密码才能修改密码
uchar cs=3 ;//输入密码的错误次数

uchar m[]={1,1,1,1,1,1,1,1}; ///初始密码
static uchar mbuf[8];///输入的密码位数


char d[32]={' ','I','M','P','O','R','T',' ','C','I','P','H','E','R',':',' ',
             ' ',' ',' ',' ','_','_','_','_','_','_','_','_',' ',' ',' ',' '};//输入密码

code char ks[32]={'C','O','N','G','R','A','T','U','L','A','T','E',' ','Y','O','U',
			  ' ','O','P','E','N','I','N','G',' ',' ','L','O','C','K','!',' '};////开锁

code char cw[32]={' ','C','I','P','H','E','R',' ',' ','E','R','R','O','R',' ',' ',
			      '~','~','~','~','~','~','~','~','~','~','~','~','~','~','~','~' };////错误	  

code char xc[32]={' ',' ','A','M','E','N','D',' ','S','U','C','C','E','E','D',' ',
                  ' ',' ',' ',' ',' ','!','!','!','!','!','!',' ',' ',' ',' ',' '};//修改成功  

code char xg[32]={' ','A','M','E','N','D',' ',' ','C','I','P','H','E','R',':',' ',
                  ' ',' ',' ',' ',' ','_','_','_','_','_','_','_',' ',' ',' ',' '};///修改密码*/


void yanshi(uint n)///////////////延时函数///////////////////////////////////
{
 uint i;
  for(i=0;i<n;i++){};
}

void delay(uint n)///////////////延时函数///////////////////////////////////
{
 uint i,j;
  for(i=0;i<1000;i++)
   {for(j=0;j<n;j++){}}
   
}

uchar busy(void) ////////////////////读状态////////////////////////////////////////
{data_IO=0xff;
 rs=0; //写指令        ////////////////////
 rw=1; //表示读状态    // 三个的状态表示 //
 e=0;
 e=0;
 e=1;  //下降延//      // 判忙状态       //
 while(data_IO & Mng);         ////////////////////
return(data_IO);;
} 

void xiezl(uchar shuju) /////////////////////*写指令*/////////////////////////////
{
 busy();/*yanshi(6500);*/
 data_IO=shuju;
 rs=0; //写指令        ////////////////////
 rw=0; //表示写状态    // 三个的状态表示 //
 e=1;  //下降延//      // 写指令         //
 e=0;  /////////       ////////////////////

}

void w_dat(uint n)//////////////////写数据//////////////////////////
{
 busy(); /*yanshi(6500) ;*/
  data_IO=n;
   rs=1; //写数据       ////////////////////
   rw=0; //表示写状态    // 三个的状态表示 //
   e=1;  //下降延//      //写数据         //
   e=0;  /////////       ////////////////////
  // return;
}

void xianshi(uchar js[]) //////////////////显示函数///////////////////////////////
{
  uchar h,v;
  xiezl(0x01); //清屏显示
  yanshi(2000) ;
  xiezl(0x80); // DDRAM地址的设置
 for(h=0;h<16;h++)
   {w_dat(js[h]);  ///n表示有写几位数据
   yanshi(100) ;
   }
   xiezl(0xc0);//换行
 for(v=(16);v<32;v++)
   {w_dat(js[v]);  ///n表示有写几位数据
   yanshi(100) ;
   }
}

void chushihua(void)///////////////////*液晶模块初始化*/
 { uchar i;
   rs=0; //写指令
   rw=0; //表示写状态
   e=0;  //使能
   for(i=0;i<3;i++)
   {
    xiezl(0x38);  //功能设置,8位,一行显示,5*7点阵
    yanshi(1000);
   }
    xiezl(0x38); //两行显示
    xiezl(0x0f); //显示开关控制位
    xiezl(0x18); //移位控制,光标和显示一起左移  
    xiezl(0x06); //设置输入模式
    xiezl(0x01); //清屏显示
    xiezl(0x80); // DDRAM地址的设置
    }

bit pwcmp(void)
{
	bit flag;
	uchar i;
	for (i=0;i<8;i++)
	{
		if (m[i]==mbuf[i]) 
		flag = 1;           //*密码正确*/
		else  {	flag = 0;  i=8; } //*密码错误*/
	}
	return(flag);
}

void gb(void)/////////转移光标
{  uchar c;
   xiezl(0xc0);//换行
   yanshi(3000) ;
   for(c=0;c<4;c++)
   {w_dat(' ');///n表示有写几位数据
    yanshi(2000) ;
   } 
}
uchar getkey(void)///得到键值
{ uchar h,l,k;
  while(P1!=0x0f)
  {
   h=P1&0x0f;
   P1=0xf0;
   l=P1&0xf0;
   k=h|l;
   return(k);
  }
}


void diaoyong(uchar i)///////////调用各键的函数//////输入密码
{  uchar lq;
         switch(i)
	    {
          case 0x7e: if (count<8) { mbuf[count]=1; count++;  w_dat('*');}  break;  // 01111110       1
          case 0xbe:  if (count<8) { mbuf[count]=2; count++;  w_dat('*');}  break;  // 10111110		 2
          case 0xde: if (count<8) { mbuf[count]=3; count++;  w_dat('*');}  break;  // 11011110		 3
          case 0xee:  if (count<8) { mbuf[count]=4; count++;  w_dat('*');}  break;  // 11101110		 4

          case 0x7d:  if (count<8) { mbuf[count]=5; count++;  w_dat('*');}  break;  // 01111101		 5
          case 0xbd:  if (count<8) { mbuf[count]=6; count++;  w_dat('*');} break; // 10111101		 6
          case 0xdd: if (count<8) { mbuf[count]=7; count++;  w_dat('*');}  break;  // 11011101		 7
          case 0xed: if (count<8) { mbuf[count]=8; count++;  w_dat('*');} break;  // 11101101		 8

          case 0x7b:  if (count<8) { mbuf[count]=9; count++;  w_dat('*');}  break;  // 01111011		 9
          case 0xbb:  if (count<8) { mbuf[count]=0; count++;  w_dat('*');} break;  // 10111011		 0
          case 0xdb: if (count==8) { pwflag = pwcmp();}   else  pwflag = 0;// 只有输入8个密码后按确认键才作密码比较
			           if(pwflag) {deng=1; xianshi(ks);gg=1; }   else { cs--;deng=0; xianshi(cw); delay(200); xianshi(d);gb();count = 0; }
			            break;  // 11011011		 a	   
          case 0xeb:  count = 0;deng=0; xianshi(d);  gb();gg=0; 	/*取消键*/
		               break;  // 11101011		 b	 

          case 0x77: if(gg==1){ count=0;xianshi(xg); gb();} //修该密码
		               break;  // 01110111		 c
          
		  case 0xb7: if((count==8)&&(gg==1)) { count=0;
		  for (lq=0;lq<8;lq++){ m[lq]=mbuf[lq]; yanshi(10000);} md=0; xianshi(xc); delay(200); xianshi(d);yanshi(2000);gb();yanshi(200);gg=0;}//保存密码
		               break;  // 10110111		 d
          /*case 0xd7: sr[jm]='e'; break;  // 11010111		 e
            case 0xe7: sr[jm]='f'; break;  // 11100111		 f	*/

          default: break; 
          }
       
}


void main(void)
{uchar key;
chushihua();
xianshi(d);//显示函数
gb(); //移光标到第二行第六位
while(cs)
{
  P1=0x0f;
    if(P1!=0x0f)  
 {
   yanshi(20); 
   key=getkey(); 
	md=1;
   diaoyong(key); 
   yanshi(20000);
   md=0;
  
}
}while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -