• 大小: 20KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-07-17
  • 语言: 其他
  • 标签: 密码  单片  STC89C52R  

资源简介

基于STC89C52制作的密码锁 1.选取STC89C52单片机,单片机内部自带EEPROM,支持掉电保存密码功能,不需要外置AT24C01保存密码。 2.为简化机械装置,采取5V继电器模拟开锁过程。输入的正确时,继电器吸合2-3秒,开锁指示灯亮2-3秒,模拟开锁。 3.自动报警部分选用蜂鸣器,当三次输入密码不同时就会发生报警信息。 4.显示屏采用LCD1602。 5.6位密码,密码可重置,重置密码时,先输入原始密码,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。开锁时,密码通过键盘输入,若密码正确,则将锁打开,若密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报 警并且锁定键盘,10分钟。 6.4X4矩阵键盘输入,键盘扫描程序判定按键是否按下。 7.利用keil编程控制高低电平输出来控制各种功能的实现。

资源截图

代码片段和文件信息

#include
#define uint unsigned int
#define uchar unsigned char
void key_scan();
uchar count0count1count3numn=0tempajcount4;
uchar mima[8];                                                        //初始密码存储区
uchar tab_key[50];                                                //输入密码存储区
uchar code table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71};
bit enterflag;                                                        //确认键按下与否的标志
bit mimaflag;                                                        //密码正确与否的标志
bit xiugaiflag;                                                        //修改密码标志        
bit enter1flag;                                                //修改密码确认键标志        
sbit red=P3^7;
sbit bell=P3^6;
sbit rs=P2^0;
sbit rw=P2^1;
sbit lcden=P2^2;
sbit scl=P3^4;
sbit sda=P3^5;
uchar code table1[]=“Input the passcode“;
uchar code table2[]=“Code:------“;
uchar code table3[]=“*“;
uchar code table4[]=“Right(^_^)“;
uchar code table5[]=“First error!!!“;
uchar code table6[]=“Second error!!!“;
uchar code table7[]=“Third error!!!“;
uchar code table8[]=“Use tomorrow(^_^)“;
uchar code table9[]=“Cofirm passcode“;
uchar code table10[]=“Code:------“;
uchar code table11[]=“Code is new“;
//******************************键盘消抖函数*******************************
void delay1()
{ ;; }
void delay2(uchar x)
{
        uchar ab;
        for(a=x;a>0;a--)
         for(b=100;b>0;b--);
}
        
void delay(uint z)
{
        uint xy;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

//****************************e^2room的初始化*******************************
void start()  //开始信号
{        
        sda=1;
        delay1();
        scl=1;
        delay1();
        sda=0;
        delay1();
}

void stop()   //停止
{
        sda=0;
        delay1();
        scl=1;
        delay1();
        sda=1;
        delay1();
}
//****************************应答信号*************************************
void respond()  
{
        uchar i;
        scl=1;
        delay1();
        while((sda==1)&&(i<250))i++;
        scl=0;
        delay1();
}
//*****************************写字节操作函数**********************************
void write_byte(uchar date)
{
        uchar itemp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;                        //保持最高位,左移到进位CY
                scl=0;
            delay1();
                sda=CY;
                delay1();
                scl=1;
                delay1();
        }
        scl=0;
        delay1();
        sda=1;//总线释放
        delay1();
}
//*******************************读字节操作函数*****************************
uchar read_byte()
{
        uchar ik;
        scl=0;
        delay1();
        sda=1;
        delay1();
        for(i=0;i<8;i++)
        {
                scl=1;
                delay1();        
                k=(k<<1)|sda;    //或运算,放到最低位
         

评论

共有 条评论