找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6549|回复: 19
收起左侧

51单片机密码锁课程设计源码+仿真图+报告 (全部文件在附件里面)

  [复制链接]
ID:454420 发表于 2018-12-25 15:18 | 显示全部楼层 |阅读模式
51单片机密码锁课程设计源码+仿真图+报告(全部文件在附件里面)
下载过的同学记得回来留个言
(自己两周做的课程设计不容易)



文件

文件

报告

报告

电路图

电路图

51单片机密码锁课程设计.zip

7.84 MB, 下载次数: 389, 下载积分: 黑币 -5

全部文件

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:454420 发表于 2018-12-25 15:19 | 显示全部楼层
电气信息学院
课程设计任务书

课题名称        电子密码锁设计
姓名    名                专业        电子信息工程        班级                学号       
指导老师       
时间       
一、任务及要求
设计任务:
本课题要求以MCS-51系列单片机为核心,设计一个简易电子密码锁。
(1)具备密码输入、密码修改功能;
(2)*其它功能
设计要求:
(1)确定系统设计方案;
(2)进行系统的硬件设计;
(3)完成应用程序设计;
(4)应用系统的硬件和软件的调试。
二、进度安排
第一周:
周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。
周二~周三:完成硬件设计和电路连接
周四~周日:完成软件设计
第二周:
周一~周三:程序调试
周四~周五:设计报告撰写。周五进行答辩和设计结果检查。
三、参考资料
1、王迎旭等.单片机原理及及应用[M]. 2版.机械工业出版社,2011
2、胡汉才.单片机原理及其接口技术[M].3版.清华大学出版社,2010
目   录
第一章  设计任务及要求        1
1.1  设计任务        1
1.2  设计要求        1
第二章  系统方案设计        1
2.1   设计框图        1
2.2   框图简介        1
第三章  系统硬件电路设计        2
3.1   单片机最小系统        2
3.2   按键电路        2
3.3   显示电路        3
3.4   LED指示开锁灯、蜂鸣器        4
第四章  系统软件设计        4
4.1   程序流程图        4
4.2   程序简介        5
第五章  系统仿真及调试        5
5.1   软件仿真及调试        5
5.2   实物调试        6
第六章  总结与设计调试体会        8
附录一   程序源代码        9
附录二   硬件电路图        14
第七章  电气信息学院课程设计评分标准        15
回复

使用道具 举报

ID:454420 发表于 2018-12-25 15:20 | 显示全部楼层
附录一   程序源代码
#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;
#define GPIO_DIG P0                      //数码管送数据
#define GPIO_KEY P1                      //矩形按键
sbit LSA=P2^0;                         //数码管位选
sbit LSB=P2^1;
sbit LSC=P2^2;                                 
sbit k1=P2^3;                              //独立按键
sbit k2=P2^4;
sbit beep=P3^0;                           //蜂鸣器
sbit led=P3^1;                            //LED开锁
char srmm[8]=                                        //输入密码   
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08};               
char ysmm[8]=                            //原始密码1111 1111
{0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06};
u8 code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
u16 b,n,x,y,i,mm,ss,m1,m2,s1,s2,z=0,j=1,s=0,m=0,t=0;       
u8 Mima;                                           // 存放密码
u8 KeyValue;                                         // 按键值定义
void delay(u16 i)                            //延时函数
{while(i--);}
void shuoding()                                    //锁定
{
   mm=1;ss=30;
   m2=mm/10;m1=mm%10;
   s2=ss/10;s1=ss%10;
   TMOD=0x01;   
   TH0=(65536-50000)/256;  
   TL0=(65536-50000)%256;   
   EA=1;ET0=1;TR0=1;
}
void timer0() interrupt 1
{
   TH0=(65536-50000)/256;  
   TL0=(65536-50000)%256;
   t++;
   if(t==20)
   {
   t=0;ss--;
   if(ss==0)
        {j=1;}
   }
   m2=mm/10;m1=mm%10;
   s2=ss/10;s1=ss%10;
}
void bep()                           //蜂鸣器函数
{
   for(b=0;b<100;b++)
   {
    beep=~beep;
    delay(50);
   }
   b=0;
}
void xgmm()                              //修改密码显示函数
{        for(n=0;n<=7;n++)
        {srmm[n]=0x01;}
}
void dsmm()                              //待输入密码显示函数  _ _ _ _ _ _ _ _
{        for(n=0;n<=7;n++)
        {srmm[n]=0x08;}
}
void mmzq()                               //密码正确显示函数  - - - - - - - -
{        for(n=0;n<=7;n++)
        {srmm[n]=0x40;}
}
void DigDisplaysr()                   //输入显示函数
{for(i=0;i<8;i++)
  {switch(i)         
        {
        case(0):LSA=0;LSB=0;LSC=0;P0=srmm[0];break;//显示第0位
        case(1):LSA=1;LSB=0;LSC=0;P0=srmm[1];break;//显示第1位
        case(2):LSA=0;LSB=1;LSC=0;P0=srmm[2];break;//显示第2位
        case(3):LSA=1;LSB=1;LSC=0;P0=srmm[3];break;//显示第3位
        case(4):LSA=0;LSB=0;LSC=1;P0=srmm[4];break;//显示第4位
        case(5):LSA=1;LSB=0;LSC=1;P0=srmm[5];break;//显示第5位
        case(6):LSA=0;LSB=1;LSC=1;P0=srmm[6];break;//显示第6位
        case(7):LSA=1;LSB=1;LSC=1;P0=srmm[7];break;//显示第7位       
        }delay(100);P0=0x00;
  }
}
void daojishi()                                       //锁定后倒计时显示
{
  for(i=0;i<8;i++)
  { switch(i)
        {
         case(0): LSA=0;LSB=0;LSC=0;P0=0x00;break;
         case(1): LSA=1;LSB=0;LSC=0;P0=0x00;break;
         case(2): LSA=0;LSB=1;LSC=0;P0=table[m2];break;
         case(3): LSA=1;LSB=1;LSC=0;P0=table[m1];break;
     case(4): LSA=0;LSB=0;LSC=1;P0=0x40;break;
         case(5): LSA=1;LSB=0;LSC=1;P0=table[s2];break;
         case(6): LSA=0;LSB=1;LSC=1;P0=table[s1];break;
         case(7): LSA=1;LSB=1;LSC=1;P0=0x00;break;
        }delay(100);P0=0x00;
  }
}
void key()                                                 //独立按键扫描
{
        if(k1==0)                  
        {        delay(100);   
                if(k1==0)         
                {j=1;dsmm();led=0;}
                while(!k1);         
        }
        if(k2==0)                  
        {        delay(2);   
                if(k2==0)         
                {j=2;xgmm();led=0;}
                while(!k2);         
        }       
}
void KeyDownsr(void)                             //矩形按键扫描
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)          //读取按键是否按下
{   delay(1000);            //延时10ms进行消抖
        if(GPIO_KEY!=0x0f)      //再次检测键盘是否按下
        {   GPIO_KEY=0X0F;                //测试列
                switch(GPIO_KEY)
                {   case(0X07):        KeyValue=0;break;
                        case(0X0b):        KeyValue=1;break;
                        case(0X0d): KeyValue=2;break;
                        case(0X0e):        KeyValue=3;break;
                }
                GPIO_KEY=0XF0;                                //测试行
                switch(GPIO_KEY)
                {   case(0X70):        KeyValue=KeyValue;break;
                        case(0Xb0):        KeyValue=KeyValue+4;break;
                        case(0Xd0): KeyValue=KeyValue+8;break;
                        case(0Xe0):        KeyValue=KeyValue+12;break;
                }
                while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测
                {delay(1000);a++;}       
            switch(KeyValue)                                 //给相应的按键赋值
            {   case(0):Mima=0x06; break;
                        case(1):Mima=0x5b; break;
                        case(2):Mima=0x4f; break;
                        case(3):break;
                        case(4):Mima=0x66; break;
                        case(5):Mima=0x6d; break;
                        case(6):Mima=0x7d; break;
                        case(7):break;                       
                        case(8):Mima=0x07; break;
                        case(9):Mima=0x7f; break;
                        case(10):Mima=0x6f; break;
                        case(11):Mima=0x3f; break;
                        case(12):break;
                        case(13):break;
                        case(14):break;
                        case(15):break;
                        case(16):break;
                }srmm[s]=Mima;s++;bep();
        }
}
}
void main()                                       
{        led=0;
    while(1)
        {   key();
                if(j==1)
                {   do
                        {        KeyDownsr();DigDisplaysr();  
                                if(s==8)
                                {   s=0;m=0;                                if(ysmm[0]==srmm[0]&&ysmm[1]==srmm[1]&&ysmm[2]==srmm[2]&&ysmm[3]==srmm[3]&&ysmm[4]==srmm[4]&&ysmm[5]==srmm[5]&&ysmm[6]==srmm[6]&&ysmm[7]==srmm[7])
                                        {mmzq();led=1;z=0;}
                                        else
                                        {  z++;dsmm();
                                           if(z==3)
                                           {led=0;z=0;shuoding();
                                                  while(mm!=0||ss!=0)
                                                  {daojishi();}
                                           }               
                                        }
                                }       
                        }while(m==8);if(m==8){m=0;}
                }
                if(j==2)
                {        while(m<8)
                        {KeyDownsr();DigDisplaysr();  
                                if(s==8)
                                {        s=0;m=0;
        if(ysmm[0]==srmm[0]&&ysmm[1]==srmm[1]&&ysmm[2]==srmm[2]&&ysmm[3]==srmm[3]&&ysmm[4]==srmm[4]&&ysmm[5]==srmm[5]&&ysmm[6]==srmm[6]&&ysmm[7]==srmm[7])
                                        {mmzq();z=0;led=1;
                                                while(m<8)
                                   {  KeyDownsr();DigDisplaysr();
                                                        if(s==8)
                                                        {       
                                                                for(x=0;x<=7;x++)
                                                            {ysmm[x]=srmm[x];}
                                                                s=0;led=0;
                                                        }
                                                }j=1;dsmm();       
                                        }
                                        else
                                        {z++;xgmm();
                                                if(z==3)
                                           {z=0;shuoding();
                                                  while(mm!=0||ss!=60)
                                                  {daojishi();}
                                           }               
                                        }s=0;
                                }       
                        }
                        if(m==8)m=0;
                }
        }
}
回复

使用道具 举报

ID:552896 发表于 2019-6-2 18:57 | 显示全部楼层
感谢大佬
回复

使用道具 举报

ID:561036 发表于 2019-6-12 16:31 | 显示全部楼层
感谢分享 正愁着没有思路
回复

使用道具 举报

ID:560514 发表于 2019-6-14 02:41 来自手机 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:563043 发表于 2019-6-16 02:41 | 显示全部楼层
为什么程序烧到普中的51单片机上数码管不能完全显示出来
回复

使用道具 举报

ID:561185 发表于 2019-6-16 06:09 来自手机 | 显示全部楼层
为什么锁定倒计时只能30秒,后边就无限循环了
回复

使用道具 举报

ID:563528 发表于 2019-6-16 11:17 | 显示全部楼层
可以使用
回复

使用道具 举报

ID:563528 发表于 2019-6-16 13:11 | 显示全部楼层
好用·
回复

使用道具 举报

ID:505975 发表于 2019-6-28 22:40 | 显示全部楼层
感谢大佬
回复

使用道具 举报

ID:52915 发表于 2019-9-12 23:06 | 显示全部楼层
学习一下,谢谢LZ!!!
回复

使用道具 举报

ID:620850 发表于 2019-10-12 08:13 | 显示全部楼层
感谢大佬
回复

使用道具 举报

ID:454420 发表于 2019-10-14 18:42 | 显示全部楼层
zyq2367503734 发表于 2019-6-16 06:09
为什么锁定倒计时只能30秒,后边就无限循环了

软件里面你自己看懂了就会设置了,超级简单
回复

使用道具 举报

ID:4811 发表于 2019-10-21 22:23 来自手机 | 显示全部楼层
请问为什么运行以后,液晶屏上一直是闪烁的,全暗或者全亮。
回复

使用道具 举报

ID:599674 发表于 2019-10-25 21:09 | 显示全部楼层
感谢大佬的分享
回复

使用道具 举报

ID:659282 发表于 2019-12-9 09:34 | 显示全部楼层
非常有用
回复

使用道具 举报

ID:660410 发表于 2019-12-10 11:13 | 显示全部楼层
楼主好人
回复

使用道具 举报

ID:660410 发表于 2019-12-10 11:13 | 显示全部楼层
楼主好人
回复

使用道具 举报

ID:670014 发表于 2019-12-21 21:19 | 显示全部楼层
好用 谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表