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

📄 st.c

📁 单片机密码锁程序源码
💻 C
字号:
///////////////密码锁程序//////////////////////
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//////////////////////////////////////////////////////////
#define a 0x80
#define b 0x40
#define c 0x20
#define d 0x10
#define e 0x08
#define f 0x04
#define g 0x02
#define dp 0x01
uchar     n;
///////////////////延时子程序/////////////////////////
void delay(uint i){uint j;
                   for(j=0;j<i;j++)
			{;}}
//////////////////数据显示字模(共阳)/////////////////////
uchar const disp_code[16]={a+b+c+d+e+f,
                           b+c,
                           a+b+d+e+g,
						   a+b+c+d+g,
						   b+c+f+g,
						   a+c+d+f+g,
						   a+c+d+e+f+g,
						   a+b+c,
						   a+b+c+d+e+f+g,
						   a+b+c+d+f+g,
                           a+b+c+e+f+g,
                           c+d+e+f+g,
                           a+d+e+f,
                           b+c+d+e+g,
                           a+d+e+f+g,
                           a+e+f+g};
                     uchar disp_busf[4];
///////////////////动态显示子程序/////////////////////                     
void display(void){P0&=~0x08;
                   P2=~disp_code[disp_busf[0]];
						 delay(100);
						 P0|=0x0f;
                   P0&=~0x04;
                   P2=~disp_code[disp_busf[1]];
						 delay(100);
						 P0|=0x0f;
						 P0&=~0x02;
                   P2=~disp_code[disp_busf[2]];
						 delay(100);
						 P0|=0x0f;
                   P0&=~0x01;
                   P2=~disp_code[disp_busf[3]];
						 delay(100);
						 P0|=0x0f;}
///////////////////键盘扫描子程序(反转法)///////////////////////
uchar key_scan(void){uchar i,j;
                     P1=0x0f;
                     i=P1;
                     i&=0x0f;
                     if(i==0x0f) return(0xff);
                     delay(1000);
                     P1|=0x0f;
                     i=P1;
                     i&=0x0f;
                     if(i==0x0f) return(0xff);
                     P1=0xf0;
                     j=P1;
                     j&=0xf0;
                     return(i+j);}
////////////////////键盘键值//////////////////////
uchar const key_code[16]={0x77,0x7b,0x7d,0x7e,0xb7,0xbb,0xbd,0xbe,
                         /*k1   k2   k3   k4   k5   k6   k7   k8*/
                          0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
                         /*k9   k10  k11  k12  k13  k14  k15  k16*/ 
///////////////////键盘扫描与键值译码子程序//////////////////////////
uchar key(void){uchar i,j;
                i=key_scan();
                if(i==0xff) return(0xff);
           loop:j=key_scan();
                if(j!=0xff) goto loop;
                for(j=0;j<16;j++)
                   {if(i==key_code[j]) break;}
                return(j);}
//////////////////////定时器0的中断服务程序//////////////////////////
void xianshi(void) interrupt 1 using 1///中断方式显示数据////////////
     {TH0=50000/256;
      TL0=50000%256;
      display();}
uchar key_busf;
//////////////////////清除后从新输入////////////////////////////////////
void qingchu(void)
           {          disp_busf[3]=0;
	                  disp_busf[2]=0;
	                  disp_busf[1]=0;
	                  disp_busf[0]=0;P0&=0xff;
						return; }
/////////////////////初始密码数据/////////////////////////////////////
uchar mima[4]={1,1,2,2};
uchar xiu_gai[4];
///////////////////////输入数据子程序////////////////////////////////
void shuru(void){uchar i,j,k,n;
                       j=0;k=0;
					 loop:i=key();
                 if(i==0xff) goto loop;
                 else if(i<10)
                    {P0|=0xf0;
                       disp_busf[3]=disp_busf[2];
                     disp_busf[2]=disp_busf[1];
                     disp_busf[1]=disp_busf[0];
                     disp_busf[0]=i;}
				else if(i==0x0d)
						  qingchu();	  
                 else if(i==0x0f)
                    {for(i=0;i<4;i++)
                        {if(disp_busf[i]!=mima[i]) break;}
                     if(i!=4)
							{P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
								P0&=0x7f;delay(240000);
								disp_busf[3]=0;
	                  disp_busf[2]=0;
	                  disp_busf[1]=0;
	                    disp_busf[0]=0;}
                     else 
                        {P3|=0x40;
						delay(240000);
					  disp_busf[3]=0;
	                  disp_busf[2]=0;
	                  disp_busf[1]=0;
	                  disp_busf[0]=0;}} 
				
           else if(i==0x0e)		 
		 { 
		 				P0=0x60;
					  for(i=0;i<4;i++)
                        {if(disp_busf[i]!=mima[i]) break;}
                      if(i!=4)
						{P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
							P0|=0xf0;delay(5000);P0&=0x0f;delay(5000); 
					  disp_busf[3]=0;
	                  disp_busf[2]=0;
	                  disp_busf[1]=0;
	                  disp_busf[0]=0;  return; 	} 
				else	 {

						disp_busf[3]=0;
	                    disp_busf[2]=0;
	                    disp_busf[1]=0;
	                    disp_busf[0]=0;
				    loop1:  i=key();
						   if(i==0xff) goto loop1;
						  else if(i<10) 
						  { disp_busf[3]=disp_busf[2];
							disp_busf[2]=disp_busf[1];
							disp_busf[1]=disp_busf[0];
							disp_busf[0]=i;
						  }
						  else if(i==0x0d)
						  qingchu();
						  else if(i==0x0f) 
						  { 	
						    xiu_gai[0]=disp_busf[0];
						    xiu_gai[1]=disp_busf[1];
						    xiu_gai[2]=disp_busf[2];
						    xiu_gai[3]=disp_busf[3];
								disp_busf[3]=0;
	                            disp_busf[2]=0;
	                            disp_busf[1]=0;
	                            disp_busf[0]=0;
								goto loop3;}
						goto loop1;

						loop3:		i=key();
                 if(i==0xff) goto loop3;
                 else if(i<10)
                    {	
                     disp_busf[3]=disp_busf[2];
                     disp_busf[2]=disp_busf[1];
                     disp_busf[1]=disp_busf[0];
                     disp_busf[0]=i;}
				else if(i==0x0d)
						  {	
						   disp_busf[3]=0;
	                       disp_busf[2]=0;
	                       disp_busf[1]=0;
	                       disp_busf[0]=0;
                           goto loop3;}  
                 else if(i==0x0f)
                    {for(i=0;i<4;i++)
                        {if(xiu_gai[i]!=disp_busf[i]) break;}
                     if(i!=4)
                         {P0|=0xf0;return;}
						 else
						 {
						 for(n=0;n<4;n++)
						 mima[n]=xiu_gai[n];
						disp_busf[3]=0;
	                    disp_busf[2]=0;
	                    disp_busf[1]=0;
	                    disp_busf[0]=0;}
						P0|=0xf0;		  
							return;} goto loop3;
						  }
					   }
					 

				 goto loop;}

				
					 
                    
void main(void){TMOD=0x01;
                TH0=50000/256;
                TL0=50000%256;
                ET0=1;
                TR0=1;
                EA=1;
           loop:shuru();
	                goto loop;}

⌨️ 快捷键说明

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