【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

06-28 1167阅读

基于51单片机的简易密码锁设计

  • 1.主要功能:
    • 资料下载链接:
    • 实物图:
    • 2.仿真
    • 3. 程序代码
    • 4. 设计报告
    • 5. 设计资料内容清单

      【普中】基于51单片机的简易密码锁设计

      ( proteus仿真+程序+设计报告+讲解视频)

      仿真图proteus8.16(有低版本)

      程序编译器:keil 4/keil 5

      编程语言:C语言

      设计编号:P10

      1.主要功能:

      基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)

      基于51单片机的简易密码锁设计数码管显示

      以单片机为核心,设计一个六位电子密码锁。利用矩阵键盘输入密码,8位数码管显示输入的内容,要求如下:

      1、初始状态数码管为熄灭状态,不显示内容,系统等待按键按下。

      2、矩阵键盘按下,数码管按顺序显示被按下的按键数字,共六位。

      3、每按下六次按键,系统判断一次密码。密码正确,数码管显示open,然后回到初始状态;密码错误,数码显示------,持续2秒,然后回到初始状态。

      4、密码错误3次以上,禁止输入,如需再输入,需按下复位按键。

      4、密码为六位,初始密码为000 000。

      5、使用keil编程,proteus仿真调试,普中开发板完成实物演示。

      (目前仅完全适配普中开发板A234,其他普中开发板型号可能需要做代码修改或接线)

      需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

      资料下载链接:

      P系列单片机设计下载链接(复制到浏览器打开)

      https://docs.qq.com/doc/DS2pPenNRaHB6SlR1
      

      以下为本设计资料展示图:

      实物图:

      【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

      2.仿真

      开始仿真

      打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

      【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

      3. 程序代码

      使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

      【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

      #include
      完整代码在文章开头下载链接
      #define uchar unsigned char
      #define uint unsigned int
      uchar old1,old2,old3,old4,old5,old6; //原始密码000000
      uchar new1,new2,new3,new4,new5=1,new6=1;  //每次MCU采集到的密码输入
      uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量
      uchar wei,key,temp,num1;
      uint tt=100;
      uchar allow,wanbi,cwflag;	 //各个状态位
      sbit beep=P1^7;
      sbit jdq=P1^0;
      uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,	//数码管段码
      0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,
      0x3f,0x73,0x79,0x37		 //open
      };  //
      uchar code table[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};  //数码管位选
      void delay(unsigned int i)			   //延时
      {
      	uint j,k;
        for(j=i;j>0;j--)
          for(k=125;k>0;k--);
      }
      void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)  //数码管显示
      {
         P0=0x00;				   //数码管关闭
         P0=led[a];			   //段选
         P2=table[7];				   //位选
         delay(5);			   //延时
         
         P0=0x00;
         P0=led[b];
         P2=table[6];
         delay(5);
         P0=0x00;
         P0=led[c];
         P2=table[5];
         delay(5);
         
         P0=0x00;
         P0=led[d];
         P2=table[4];
         delay(5);
         
         P0=0x00;
         P0=led[e];
         P2=table[3];
         delay(5);
         
         P0=0x00;
         P0=led[f];
         P2=table[2];
         delay(5);
         
        
      }
      void delay_uint(uint i)//延时
      {
         while(i--);
      }
      uchar scan_key=0;
      uchar Matrix_buttons_scan(){
      	uchar i,j;
      	i=0;
      	j=0;
      	P1=0x0f;
      	if(P1!=0x0f) //检测有无按下
      	{
      	 	delay_uint(10000);
      		if(P1!=0x0f) //检测有无按下
      		{
      		 switch(P1)//检测行
      		 {
      		  case 0x0e:i=3;break;
      		  case 0x0d:i=2;break;
      		  case 0x0b:i=1;break;
      		  case 0x07:i=0;
      		 }
      		 P1=0xf0;
      		 switch(P1)//检测列
      		 {
      		  case 0xe0:j=13;break;
      		  case 0xd0:j=9;break;
      		  case 0xb0:j=5;break;
      		  case 0x70:j=1;
      		 }
      		}
      	}
      	
      	if(scan_key!=i+j)
      	{
      		scan_key=i+j;
      		return scan_key;
      	}else{
      		return 0;
      	}
      }
      //按键扫描子函数
      void keyscan()
      {
      	uchar i=0;
      	i=Matrix_buttons_scan();//按键检测
      	if(i==1) 
      	{
             key=0;		   //按键0定义
      	   wei++;		   //输入位数+1	
      	}else if(i==2)    
      	{
      		key=1;		  //按键1定义
      		wei++;		  //输入位数+1    
      	}else if(i==3)    
      	{
      		key=2;		  //按键2定义
      		wei++;		  //输入位数+1    
      	}else if(i==4)    
      	{
      		key=3;		  //按键3定义
      		wei++;		  //输入位数+1    
      	}else if(i==5)    
      	{
      		key=4;		  //按键4定义
      		wei++;		  //输入位数+1    
      	}else if(i==6)    
      	{
      		key=5;		  //按键5定义
      		wei++;		  //输入位数+1    
      	}else if(i==7)    
      	{
      		key=6;		  //按键6定义
      		wei++;		  //输入位数+1    
      	}else if(i==8)    
      	{
      		key=7;		  //按键7定义
      		wei++;		  //输入位数+1    
      	}else if(i==9)    
      	{
      		key=8;		  //按键8定义
      		wei++;		  //输入位数+1    
      	}else if(i==10)    
      	{
      		key=9;		  //按键9定义
      		wei++;		  //输入位数+1    
      	}
      }
      

      4. 设计报告

      6198字设计报告,内容包括目录,硬件设计、软件设计、软硬件框图、调试、结论等

      【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

      5. 设计资料内容清单

      资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

      0、常见使用问题及解决方法–必读!!!!

      1、仿真图

      2、程序源码注释

      3、功能要求

      4、开题报告

      5、设计报告

      6、软硬件流程框图

      7、烧录工具

      8、讲解视频

      Altium Designer 安装破解

      KEIL+proteus 单片机仿真设计教程

      KEIL安装破解

      Proteus元器件查找

      Proteus安装

      Proteus简易使用教程

      单片机学习资料

      普中-2&普中-3&普中-4开发板原理图.pdf

      相关数据手册

      答辩技巧

      设计报告常用描述

      鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

      【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]