密码锁课程设计

发布者:火星叔叔最新更新时间:2016-09-14 来源: eefocus关键字:密码锁  课程设计 手机看文章 扫描二维码
随时随地手机看文章
要求:

1.设计基于单片机控制的密码锁

2.基本功能要求:

a.12个按键,用于输入密码及设定,其中s/c分短按(clear)和长按(set)

b.两个led灯反映密码输入正确(绿灯亮),错误(红灯亮)

c.原始密码为:000000 应可随以修改(掉电新密码不丢失)

 

下面是我做的具体过程

下面是protues的截图如下(你可以照着在proteus中设置):

密码锁课程设计 - gududesiling - suixin
如果你看不到的话,右键点击另存为。。。下载下来。。,就可以了。。。
proteus运行的时候,首先要输入6位密码,然后点击ok键,如果正确的话,绿灯会亮,否则,红灯亮(上面的说明上说的很清楚)

 

代码贴出来,可以直接子啊uvision4上运行的。。。

//下面程序为密码锁控制程序,可实现设定密码,判断密码是否正确,并且掉电不丢失的功能

 

#include

//类型重定义

#define uchar unsigned char

#define uint unsigned int

 

 

//函数声明

void start();  //开始信号

uchar read_add(uchar);

void key_scan();

void write_add(uchar address,uchar date);

void delay1ms(uint z);

void delay();

void stop(); //停止

void respons();  //应答

void init();

void write_byte(uchar date);

uchar read_byte();

 

//全局变量声明

uchar key=0;

uchar password[6];

uchar KeyCnt;

uchar flag=0;

uchar password_err;

uchar ok_right;

 

//ii2c芯片的时钟线和数据线

sbit sda=P2^3;

sbit scl=P2^2;

 

//主函数

void main(){

    uchar temp,i;

    uchar password_err=0;

    uchar password_old[6]={0};

    KeyCnt=0;

    flag=0;

    ok_right=0;  

    password_err=0;

 

    init();        //ii2c芯片初始化

    for(i=0;i<6;i++){

       temp=read_add(i+1);  //调用ii2c芯片中的数据(已设定为6位)

      

       if(temp<0 || temp >9 ){     //如果读出的数据不对,说明为第一次使用密码锁,就初始化为0

           for(i=0;i<6;i++)

              password_old[i]=0;

           break;

       }

       password_old[i]=read_add(i+1); 

       delay1ms(10);

    } 

    key=255;     //默认key值设定为255,为了调试使用

     

    while(1){

       key_scan();   //扫描按键扫描函数

       if( key <= 9 ){

           password[KeyCnt]=key;

           P3=KeyCnt;   //输出调试信息

       }

 

       if(key == 11){       //对应于ok键,判断密码是否正确

           for(i=0;i<6;i++)

              if(password_old[i] != password[i]){

                  password_err=1;                       

                  break;

              }

           if(password_err==1){

               P2 =(P2&0xfc)|0x02;

               password_err=0;    

           }

           else {

               P2 =(P2 &0xfc)|0x01;

           }

       }

 

       if(key==10){     //对应于s/c键,进入重设密码子程序

           KeyCnt=0;

           ok_right=0;

           while(1){

              key_scan();

              //;//key=0;   key=16;

              if( key <= 9 ){

                  password[KeyCnt]=key;

                  P3=KeyCnt;

              }

 

              if(flag==2){ //长按

                  P2 =P2&0xfc;   //重设的话,双灯亮

                  if(ok_right==7&&key==11){

                     for(i=0;i<6;i++)

                     {   //重设的密码写入存储芯片中

                         write_add(i+1,password[i]);

                         delay1ms(10);

                     }

                     key=255;

                     KeyCnt=0;

                     ok_right=0;

                     break;

                  }

              }

              if(flag == 1){    //短按

                  for(i=0;i<6;i++){

                     write_add(i+1,0);

                     if((i+1)/2) P2 =(P2&0xfc)|0x02;

                     else   P2 =(P2&0xfc)|0x01; 

                     delay1ms(300);

                  }

                  KeyCnt=0;

                  ok_right=0;

                  key=255;  

                  break;

              }

           }

      

       }

    }  

   

}

 

/***************************下面为ii2c芯片操作函数集**************************/

void delay()

{ ;; }

 

void delay1ms(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

       for(y=110;y>0;y--);

}

 

 

void start()  //开始信号

{  

    sda=1;

    delay();

    scl=1;

    delay();

    sda=0;

    delay();

}

void stop()   //停止

{

    sda=0;

    delay();

    scl=1;

    delay();

    sda=1;

    delay();

}

void respons()  //应答

{

    uchar i;

    scl=1;

    delay();

    while((sda==1)&&(i<250))i++;

    scl=0;

    delay();

}

void init()

{

    sda=1;

    delay();

    scl=1;

    delay();

}

 

void write_byte(uchar date)

{

    uchar i,temp;

    temp=date;

    for(i=0;i<8;i++)

    {

       temp=temp<<1;

       scl=0;

        delay();

       sda=CY;

       delay();

       scl=1;

       delay();

    }

    scl=0;

    delay();

    sda=1;

    delay();

}

uchar read_byte()

{

    uchar i,k;

    scl=0;

    delay();

    sda=1;

    delay();

    for(i=0;i<8;i++)

    {

       scl=1;

       delay();  

       k=(k<<1)|sda;

       scl=0;

       delay();  

    }

    return k;

}

 

//向ii2c芯片中写入数据

void write_add(uchar address,uchar date)

{

    start();

    write_byte(0xa0);

    respons();

    write_byte(address);

    respons();

    write_byte(date);

    respons();

    stop();

}

 

//从ii2c芯片中读出数据

uchar read_add(uchar address)

{

    uchar date;

    start();

    write_byte(0xa0);

    respons();

    write_byte(address);

    respons();

    start();

    write_byte(0xa1);

    respons();

    date=read_byte();

    stop();

    return date;

}

 

 

/***************************下面为按键扫描函数**************************/

void key_scan()

{  

       uchar m0,m1;

       uchar temp;   

      

       P1=0xf0;//这样设置是为了能使低四位将高四位拉低,释放时自动拉高高四位 

       temp=P1;      

       if(temp!=0xf0)

       {             

              delay1ms(10);         //延时,去除抖动

              if(temp!=0xf0)

              {    

                     m0=temp;       //获得按键的列号(对应的就是高4位)            

                     P1=0x0f;

                     temp=P1;

                     if(temp!=0x0f)

                     {    

                          m1=temp;       //获得按键的行号(对应的就是低4位)     

                         temp=m0|m1;   //组合成最终的按键好

                     }    

                  KeyCnt++;

                  if(KeyCnt==7)

                     KeyCnt=0;

                  ok_right++;

                  if(ok_right==8)

                     ok_right=0;

                     switch(temp)

                     {

 

                          case 0xee:key=0;break;  //按键对应的码表

                            case 0xde:key=1;break;

                            case 0xbe:key=2;break;

                            case 0x7e:key=3;break;                                

                            case 0xed:key=4;break;

                            case 0xdd:key=5;break;

                            case 0xbd:key=6;break;

                            case 0x7d:key=7;break;                                 

                            case 0xeb:key=8;break;

                            case 0xdb:key=9;break;

                            case 0xbb:

                         key=10;

                         P1=0x0f;                       

                         delay1ms(700);

                         temp=P1;

                         if(temp == 0x0f) //短按

                            flag=1;

                         else

                            flag=2;       //长按                         

                         break;

                            case 0x7b:key=11;break;                          

                         default:key=16;break; 

                     }

                    do{

                             temp=P1;      //消除按起抖动

                            temp&=0X0f;

                     }while(temp!=0x0f);

              }

       }

}

 

 

以上内容就可以满足要求。。。。

关键字:密码锁  课程设计 引用地址:密码锁课程设计

上一篇:单片机延时精确计算
下一篇:KEILC51编译问题ERROR L104

推荐阅读最新更新时间:2024-03-16 15:10

课程设计题二:7人多数表决器
要求: 1、7人多数表决逻辑:多数通过。 2、在主持人控制下,10秒内表决有效。 3、采用数码管显示表决10秒倒计时。 4、表决结束后用发光二极管及数码管显示表决结果,数码管显示结果:通过、不通过,同意人数。 5、设主持人控制键、复位键。 控制键:启动表决 复位键:系统复位 6、表决开始、结束采用声音提示。 一、Protues仿真图: 二、程序源码: 因为注释非常的全,这里就不再进行讲解了。 /******************************************************************************* ======
[单片机]
<font color='red'>课程设计</font>题二:7人多数表决器
基于AT89C51RC的红外遥控密码锁的设计与实现
  1 引言   根据用户的要求和需要,主要为了解决当前市场上无遥控密码锁的问题,以提高门禁系统的可靠性和安全性,适应市场需要而设计的该红外红外遥控密码锁系统。该系统具有普通电子密码锁功能的同时,还增加了遥控功能。该锁采用6位数作为密码,总密码组有106组,完全满足用户对密码安全性高的要求。该系统具有较强的实际应用价值,所涉及的技术包括:红外载波数据传输技术、单片机控制技术、红外遥控系统编码及译码技术、电路设计与演示板制作技术等。   2 系统硬件设计与实现(单元电路设计)   2.1 硬件结构图:   系统以单片机AT89C51RC为核心。系统结构框图如图1所示。本系统的功能设计目标应该包括以下几个方面:红外发射功能模块,
[单片机]
基于AT89C51RC的红外遥控<font color='red'>密码锁</font>的设计与实现
C51单片机学习——密码锁的实现
说在前面:因为我的板子是液晶屏和数码管不能同时用,所以下面我使用的是液晶屏,下面的代码通俗易懂也有注释,如果有的控件不知到如何使用的可以查看我之前的几篇C51文章,这个密码锁就是基于之前的笔记所写的内容 #include reg52.h //#include intrins.h #define uint unsigned int #define uchar unsigned char #define data1602 P0 #define LED P2 /*******引脚定义*******/ //按键的控制引脚 sbit S1 = P3^7; sbit S2 = P3^6; sbit S3 = P3^5; sbit S4
[单片机]
采用GAL器件的电子密码锁电路图
采用GAL器件的电子密码锁电路图 采用通用可擦除型GAL器件的电子密码锁,密码数据一旦写入,至少可以保存20年,同时密码可以随意设置和更改。
[模拟电子]
采用GAL器件的电子<font color='red'>密码锁</font>电路图
基于单片机的电子密码锁设计
当前虽然许多智能锁(如指纹辨别、IC卡识别)已相继问世,但这类产品是针对特定指纹或有效卡,只能适用于保密要求高且仅供个别人使用的箱、柜、房间等。另外,卡片式的IC卡易丢失和损坏,加上其成本较高,在一定程度上限制了这类产品的普及和推广。 电子密码锁具有安全性能高、成本低、功耗低、操作简单等优点使其作为防盗卫士的角色越来越重要。现有国内市场上的电子密码锁有的是通过购买一些产品模块再开发,不具备自主知识产权;有的是自主研发的,但其功耗与成本都比较高,不具备广泛的应用价值。为了克服这些缺点,从经济实用角度出发,采用单片机AT89S5l与低功耗CMOS型E2PROM AT24C02作为主控器件与数据存储器单元,设计一款可更改密码,具
[工业控制]
基于单片机的电子<font color='red'>密码锁</font>设计
课程设计题十二:电子密码锁
要求: 1、在锁开的状态下输入密码,设置的密码共6位,用数据开关K1∼K10分别代表数字1、2、…、9、0,输入的密码用1602显示,可删除输入的数字,删除的是最后输入的数字,每删除一位。 2、可以修改密码,断电不掉数据。 3、三次密码输入错误,开始警报,需要按下复位才能重新输入。 一、Protues仿真图: 二、程序源码: 因为注释非常的全,这里就不再进行讲解了。 /******************************************************************************* =======================================
[单片机]
<font color='red'>课程设计</font>题十二:电子<font color='red'>密码锁</font>
ISP技术在《数字电路》课程设计中的应用
1 ISP技术 在系统编程(In-System-Programming,ISP)技术是美国Lattice半导体公司首先提出来的一种能在产品设计、制造过程中的每个环节具有对其器件、电路或整个数字系统的逻辑和功能随时进行组态或重组能力的最新技术。在可编程逻辑器件(Programming Logic Device,PLD)及其技术中,ISP是一种新的概念、新的标准。传统的编程技术是将PLD器件插在编程器上编程的,ISP技术则可不用编程器,直接在用户自己设计的目标系统中或线路板上对PLD器件编程。常规PLD在使用中通常是先编程后装备,而采用ISP技术的PLD则是先装备后编程,成为产品后还可反复编程。ISP硬件灵活且易于软件修改,便于设计
[应用]
基于AT89C52单片机的多用户密码锁设计
  安全防盗已成为社会问题。而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。   文中设计的电子密码锁和市面销售的AB锁有类似之处,但主要区别在于设计的这个密码锁由主人决定客人进入的密码,不需要通过换锁来防止用过该锁的人再次进入,而且只有主人才有对密码的修改权。    1 方案设计思想   文中的多用户密码锁设有一个管理员用户,管理员对密码有修改权。另设有两个来宾用户,可以根据管理员提供的密码开锁,自己则不可以任意修改密码。更换住户时,只需要管理员更换密码即可,这样就避免了换锁带来的麻烦,节约了成本。   密码锁的设计采用通用板制作,所以涉及到元器件的排
[单片机]
基于AT89C52单片机的多用户<font color='red'>密码锁</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved