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

单片机密码锁程序+仿真+详细注释

发布时间:2020-08-26 发布时间:
|

程序名:密码锁
编写人:    
编写时间:  
硬件支持:STC89C52RC 外部12MHZ晶振 
说明备注:
1、输入密码时在LCD屏幕上显示暗码(*),设置管理员密码时显示明码。
2、用户密码3组位5位密码及管理员密码1组。
3、断电保护密码不消失。
4、可手动复位管理员密码及用户密码。
5、输入管理员密码才能修改用户密码,密码不能为6个0,管理员密码需要按复位键进行设置。
6、可指定秀给任意1组的密码。
7、LCD操作步骤提示。
8、密码输入错误3次蜂鸣器报警,输入错误5次键盘锁定(需要复位解锁)。
9、输入管理员密码才能修改用户密码,密码不能为6个0,管理员密码需要按复位键进行设置。
10、按键提示音,开锁音,错误音,报警音。
11、第一次上电强制要求设置管理员密码     

1.jpg (176.44 KB, 下载次数: 4)

下载附件  保存到相册

2019-4-12 23:11 上传


此图片仅供参考

后来用STC12C5A60S2做的 用的是内部集成的eeprom 添加了刷卡开锁+更换为12864屏
因为很多功能不能仿真 没有发上来  

单片机主程序:

/********************************************************************************************/

#include "config.h"

#include "lcd1602.h"

#include "eeprom.h"

#include "LOCK.h"

#include "delay.h"

#include "KEY.h"


void Timer0Init(void);        //50毫秒@12.000MHz

void Timer1Init(void);        //1毫秒@12.000MHz

/********************************************************************************************/

//                        主程序                        //

/********************************************************************************************/

void main(void){


        LOCK=0;                                        //初始化锁关闭状态

        ALAM=1;

        EA=1;                                        //开启总中断

        Timer0Init();                        //50毫秒@12.000MHz

        Timer1Init();                        //1毫秒@12.000MHz

        Delay1ms(400);                 //启动等待,等LCD讲入工作状态

        Init_LCD1602();         //LCD初始化        

        InitLock();                                 //密码锁上电初始化

        while(1){               //进入主循环

                keyjiance();                //读取按键状态、确定要执行动作

        }

}

void Timer0Init(void){                //50毫秒@12.000MHz

        TMOD &= 0xF0;                        //设置定时器模式

        TMOD |= 0x01;                        //设置定时器模式

        TL0 = 0xB0;                                //设置定时初值

        TH0 = 0x3C;                                //设置定时初值

        TF0 = 0;                                //清除TF0标志

        TR0 = 0;                                //定时器1停止计时

        ET0 = 1;                                //使能T0中断

}

void InterruptTimer0() interrupt 1{

        unsigned char countt0;

        TL0=0xB0;

        TH0=0x3C;                   //定时器重新赋初值

        countt0++;              //计时变量加,加1次时50ms

        if(countt0==20){        //加到20次就是1s

                countt0=0;          //变量清零

                second++;           //秒加

                if(key_disable==1){ //键盘锁状态时

                        if(second==3){  //秒加到1s时

                                TR0=0;      //关定时器

                                TL0=0xB0;        //再次赋初值

                                TH0=0x3C;   //再次赋初值

                                Cancel0();        //返回--取消所有操作

                                second=0;   //秒清零

                        }

                }

                else{                    //不在键盘锁状态时

                        if(second==6){  //秒加到5时                

                                TR0=0;      //关闭定时器

                                second=0;   //秒清零

                                Cancel0();        //返回--取消所有操作

                                TL0=0xB0;        //重新赋初值

                                TH0=0x3C;   //重新赋初值

                        }

                        else

                                TR0=1;      //打开定时器

                }                       

    }        

}

void Timer1Init(void){                //1毫秒@12.000MHz

        TMOD &= 0x0F;                        //设置定时器模式

        TMOD |= 0x10;                        //设置定时器模式

        TL1 = 0x18;                                //设置定时初值

        TH1 = 0xFC;                                //设置定时初值

        TF1 = 0;                                //清除TF1标志

        TR1 = 1;                                //定时器1开始计时

        ET1 = 1;                             //使能T1中断

}

//*********************************中断服务函数**************************************

void  time1_int(void) interrupt 3{//定时器T1

        TL1 = 0x18;                                //重置定时初值

        TH1 = 0xFC;                                //重置定时初值

KeyScan();


关键字:单片机  密码锁程序  仿真 

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

热门文章 更多
浅谈AVR中定时器几种工作模式