51单片机实现矩阵键盘密码锁,数码管显示

这篇具有很好参考价值的文章主要介绍了51单片机实现矩阵键盘密码锁,数码管显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

板子是普中的,按键按下10为0,按键11为确认,按键12为取消。

输入密码正确时LED D8闪烁(正确密码为5555)

#include <REGX52.H>//头文件定义
unsigned char nixie[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示的段码

unsigned int Code = 0;//用于保存密码的变量
void Tim_int(void);//定时器初始化函数声明
void delay(unsigned int t);//延时函数声明
void wei(unsigned char pizz);//用于显示第几个数码管的函数声明
unsigned char Key(void);//检测按键的函数声明
void Password();//判断密码

int main()
{
    unsigned char Num;//接收按键值
    unsigned char k;//限制按下次数
    Tim_int();//定时器初始化
    while(1)
    {
        Num=Key();
        if(Num!=0)
        {
            if(Num<=10)
            {
                if(k<4)
                {
                    Code*=10;            
                    Code+=Num%10;
                    k++;
                }    
            }
            else if(Num==12)
            {
                k=0;
                Code=0;
            }
            else if(Num==11)
            {
                k=0;
                Password();//判断密码
                Code=0;
            }
        }
    }
}


/*****************************************************************************************
*参数:无
*功能:定时器0的中断,用于刷新数码管
*返回:无
*******************************************************************************************/
void tim0_interrupt(void) interrupt 1
{
    static unsigned char i = 0;//刷新数码管
    TF0=0;
    TH0 = 0xfc;    //重装载值
    TL0 =0x66;//
    switch(i)
    {
        case 0:P0=0x00;i++;break;
        case 1:wei(4);P0=~nixie[Code%10];i++;break;
        case 2:P0=0x00;i++;break;
        case 3:wei(3);P0=~nixie[Code/10%10];i++;break;
        case 4:P0=0x00;i++;break;
        case 5:wei(2);P0=~nixie[Code/100%10];i++;break;
        case 6:P0=0x00;i++;break;
        case 7:wei(1);P0=~nixie[Code/1000%10];i++;break;
        case 8:P0=0x00;i=0;break;
    }
}


/*****************************************************************************************
*参数:无
*功能:初始化定时器0,并且设置时间
*返回:无
*******************************************************************************************/
void Tim_int(void)
{
    TMOD=0x01;
    TH0 = 0xfc;    //设置时间
    TL0 = 0x66;//
    TR0=1;
    EA=1;//打开中断
    ET0=1;
}

/*****************************************************************************************
*参数:所要延时的时间
*功能:延时
*返回:无
*******************************************************************************************/
void delay(unsigned int t)
{
    while(t--);
}


/*****************************************************************************************
*参数:所要点亮的数码管
*功能:点亮数码管
*返回:无
*******************************************************************************************/
void wei(unsigned char pizz)
{
    switch(pizz)
    {
        case 1:P2_2=1;P2_3=1;P2_4=1;break;
        case 2:P2_2=0;P2_3=1;P2_4=1;break;
        case 3:P2_2=1;P2_3=0;P2_4=1;break;
        case 4:P2_2=0;P2_3=0;P2_4=1;break;
        case 5:P2_2=1;P2_3=1;P2_4=0;break;
        case 6:P2_2=0;P2_3=1;P2_4=0;break;
        case 7:P2_2=1;P2_3=0;P2_4=0;break;
        case 8:P2_2=0;P2_3=0;P2_4=0;break;
    }
}

/*****************************************************************************************
*参数:无
*功能:扫描按键,判断是哪一个按键被按下
*返回:无
*******************************************************************************************/
unsigned char Key(void)
{
    unsigned char keynum = 0;
    P1=0xff;
    P1_3=0;
    if(P1_7==0){delay(300);while(P1_7==0){delay(200);keynum=1;}}
    if(P1_6==0){delay(300);while(P1_6==0){delay(200);keynum=5;}}
    if(P1_5==0){delay(300);while(P1_5==0){delay(200);keynum=9;}}
    if(P1_4==0){delay(300);while(P1_4==0){delay(200);keynum=13;}}
    P1=0xff;
    P1_2=0;
    if(P1_7==0){delay(300);while(P1_7==0){delay(200);keynum=2;}}
    if(P1_6==0){delay(300);while(P1_6==0){delay(200);keynum=6;}}
    if(P1_5==0){delay(300);while(P1_5==0){delay(200);keynum=10;}}
    if(P1_4==0){delay(300);while(P1_4==0){delay(200);keynum=14;}}
    P1=0xff;
    P1_1=0;
    if(P1_7==0){delay(300);while(P1_7==0){delay(200);keynum=3;}}
    if(P1_6==0){delay(300);while(P1_6==0){delay(200);keynum=7;}}
    if(P1_5==0){delay(300);while(P1_5==0){delay(200);keynum=11;}}
    if(P1_4==0){delay(300);while(P1_4==0){delay(200);keynum=15;}}
    P1=0xff;
    P1_0=0;
    if(P1_7==0){delay(300);while(P1_7==0){delay(200);keynum=4;}}
    if(P1_6==0){delay(300);while(P1_6==0){delay(200);keynum=8;}}
    if(P1_5==0){delay(300);while(P1_5==0){delay(200);keynum=12;}}
    if(P1_4==0){delay(300);while(P1_4==0){delay(200);keynum=16;}}
    return keynum;
}

/*****************************************************************************************
*参数:无
*功能:判断密码
*返回:无
*******************************************************************************************/
void Password()
{
    if(Code==5555)
    {
        P2_7=1;
        delay(5000);
        P2_7=0;
        delay(5000);
        P2_7=1;
        delay(5000);
        P2_7=0;
        delay(5000);
        P2_7=1;
    }
}文章来源地址https://www.toymoban.com/news/detail-432848.html

到了这里,关于51单片机实现矩阵键盘密码锁,数码管显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用51单片机的矩阵键盘和LCD1602做一个密码锁

    文章目录 前言 一、工具准备 工具一:51单片机 工具二:LCD1602液晶显示屏 工具三:Keil软件 二、开始操作 1.LCD1602的程序调试 2.矩阵键盘的程序调试 3.密码锁程序设计 总结 51单片机是一种8位的可编程控制元件,广泛应用于各种工业生产、家电中。51单片机的厂家有很多,如

    2023年04月09日
    浏览(43)
  • 基于51单片机的简易6位密码锁(数码管 led 矩阵)

      本文章是基于51单片机的简易密码锁,无掉电保护,所以没有用到I^C总线协议,仅用到数码管显示,矩阵键盘扫描,led显示。   本例程主要实现功能为:定义一个六位数的初始密码,用矩阵输入,输入正确后led被点亮,错误不点亮;摁下任意一个按键蜂鸣器发出声音,松下

    2024年02月11日
    浏览(38)
  • 51单片机-电子密码锁

    实物演示效果: https://www.bilibili.com/video/BV1xh4y1K7uV/?vd_source=6ff7cd03af95cd504b60511ef9373a1d 电子密码锁的主要功能 1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open! 2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。

    2024年01月17日
    浏览(44)
  • 51单片机简易电子密码锁

    由于作业需求,在昨天天晚上写了一个通过lcd1602,i2c,eeprom,按键,实现的可以设置密码的简易电子锁,    首先点击k15(回车键)进入  进入后可以点击0-9按键输入6位密码,错误则显示error,5s后重新显示密码输入页面,密码正确则进入。    进入后可以点击Esc键设置密码,进入设

    2024年02月02日
    浏览(45)
  • 51单片机“密码锁”代码详解

    注:此代码一经过验证,读者不必怀疑其正确性,如果烧录进去没有反应,请自行检查引脚端口配置,以及仔细分析代码实现原理。倘若能静下心来分析代码,一定能受益匪浅。 废话不多说,,直接上代码。如有问题,请下方评论并私信我,收到后一定及时回复!     功能

    2024年02月08日
    浏览(51)
  • 51单片机制作简易密码锁

    51单片机期末考试设计题目 设计要求: 设计具有16个按键和1个数码管显示的密码锁,具体要求: 输入一位密码(为0~9,A~F之间的数字),密码输入正确显示“F”并将锁打开;否则显示“E”,继续保持锁定状态。 基本要求: 密码锁的基本功能如下:16个按键,分别代表数

    2024年02月11日
    浏览(45)
  • 基于51单片机的密码锁设计

    电子密码锁设计,以AT89C51为主控,晶振电路和复位电路共同组成最小系统,使得单片机可以正常运行。矩阵按键作为输入模块,输入密码,LCD1602作为显示设备,显示输入的密码和提示语句,AT24C02作为EEPROM存储器,使用LED模拟“锁”,表示锁的开启和关闭状态。系统掉电后,

    2024年02月11日
    浏览(57)
  • 基于51单片机的电子密码锁

    主要功能: 1、6位密码开锁 可以修改用户密码和管理员密码 断电记忆 3次错误报警锁住键盘

    2024年02月11日
    浏览(45)
  • C51单片机密码锁课程设计

    提示:文章写完后,目录可以自动加粗样式生成,如何生成可参考右边的帮助文档 微机原理及单片机应用技术的课程设计,C51设计一个密码锁; 要求:键盘上有0-9个数字按键,功能键:确认和取消等,可设置复合键。密码的位数及密码可以任意设定,,当输入数字和设置的密

    2023年04月10日
    浏览(50)
  • 基于51单片机的电子密码锁设计

    一.硬件方案         本系统由STC89C52单片机、4*4矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,4*4键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包