×
单片机 > 单片机程序设计 > 详情

基于AT89c51密码锁设计

发布时间:2020-06-17 发布时间:
|

密码锁的整体电路图:
 

程序流程图:
 
  

 

源程序:


/*

课程名称:电子密码锁设计

设计任务:根据设定好的密码,采用按键实现6为的输入功能,

                                        当用户输入的密码正确并且是在规定的时间(普

                                        通用户要求在12s内输入正确的密码)时,锁就

                                        打开,如果输入的三次密码不正确,就发出警报

                                        声。如果用户的时间超过40秒,电路将报警80

                                        秒,若电路连续报警三次,电路将锁定键盘5分

                                        钟,防止他人的非法操作

*/

#include"reg51.h"        

#include"intrins.h"


#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long


sbit bj = P3^0;                        //定义报警

sbit led_y = P3^5;         //定义黄色灯

sbit led_r = P3^6;        //定义红色灯

sbit led_g = P3^7;        //定义绿色灯


ulong pwd = 234567;         //定义电子锁密码

uint gy = 0;                      //定义管理员/用户(管理员为1)标识

uint ss = 0;                                  //定义上锁标识(0时表示已上锁)

uint flag = 0;                   //定义中断函数中所用到的标识

uchar sd = 1;                                 //定义键盘锁定(1为未锁)标识

uint pcw = 0;               //定义密码错误次数

uint bjc = 0;                                  //定义报警次数

uint jp = 0;                                  //定义键盘扫描值

uint cnt = 0;                   //定义中断次数

uint mcnt = 0;

uint cs = 0;                     //定义超时标识

uchar key;

//uchar j;



//定义共阳数码管段选数组

uchar code table[11] ={0x3F,0x06,0x5B,0x4F,0x66,

                                                                                         0x6D,0x7D,0x07,0x7F,0x6F,0x08};

//定义按键

uchar code table1[16] = {0xee,0xde,0xbe,0x7e,

                                                                                                0xed,0xdd,0xbd,0x7d,

                                                                                                0xeb,0xdb,0xbb,0x7b,

                                                                                                0xe7,0xd7,0xb7,0x77};


//定义储存按键值

uchar table2[6];


//定义短延迟函数

void delay(uint n)        

{

   while(n--);

}


//定义延迟n s函数

void delayns(uint n)   

{

    unsigned char a,b,c,e;

                for(e=n;e>0;e--)

                        for(c=167;c>0;c--)

                                        for(b=171;b>0;b--)

                                                        for(a=16;a>0;a--);

    _nop_();  //if Keil,require use intrins.h

}        



//定义初始化函数

void init()

{

        uchar i,k;

        led_y = 0;

        led_r = 1;

        led_g = 1;

        bj = 1;

        EA = 1;                                                                                       //打开总中断

        EX1 = 1; IT1 = 1;               //打开外部中断1,并设置触发方式为下降触发方式

        TMOD = 0X01;                                                                                 //设置定时器0工作方式1

        TH0 = (65536 - 50000)/256;            

        TL0 = (65536 - 50000)%256;                   //给定时器0赋值为50ms

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

        {

                 table2[i] = 10;

        }

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

        {

                P0=0x08;

                P2 = k;        

        }

                

}


//定义上锁中断函数

void INT_0() interrupt 0

{

        uchar h;

        ss = 0;                                                                                                //密码锁上锁

        led_g = 1;

        for(h = 0;h < 6; h++)                     //初始化table2[]为10

        {

                 table2[h] = 10;

        }

}


//定义管理员/用户切换中断函数

void INT_1() interrupt 2

{

        uchar h;

        if(flag == 0)

        {        

                gy = 1;                                                                                        //关闭管理员指示灯

                led_y = 1;                                                                        //关闭密码错误指示灯

                flag = 1;                

          for(h = 0;h < 6; h++)     //初始化table2[]为10

                {

                         table2[h] = 10;

                }

        }

        else

        {

gy = 0; //关闭管理员指示灯



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址