当前位置:首页 > 51单片机 > 正文内容

3*4矩阵键盘简单lcd1602密码锁控制

不好意思啊兄弟只能先把你写到这里了  跟真实的密码锁功能上相差甚远

不过应该满足了你的要求

还有之前你要求的3*3键盘只有9个数字  但是0~9是十个数字所以键盘我改成了4*3的

 

 

上电后显示000

3*4矩阵键盘简单密码锁控制
确认按下小灯亮
3*4矩阵键盘简单密码锁控制

 

//2013/6/16  待完善
//3*4矩阵键盘简单密码锁控制 

//使用上电默认显示000
// uchar D[ ]={1,1,1};      //设定密码
//74HC573做驱动

#include <reg51.h>
#define   uchar  unsigned  char
#define   uint  unsigned  int
#define  date  P1
sbit  wei=P3^0;
sbit  duan=P3^1;
sbit  h1=P1^0;  
sbit  h2=P1^1;
sbit  h3=P1^2;
sbit  h4=P1^3;    //行信号
uchar  keynum;
uchar num;
uchar D[ ]={1,1,1};      //设定密码
uchar  code  table[]={0xc0,0xf9,0xa4,
       0x0b0,0x99,0x92,
       0x82,0xf8,0x80,0x90, //0~9段码
       0XFF,0XFF}; //确认键/取消键 关闭显示
void  delay()
{
   uchar  i,j;
   for(j=10;j>0;j--)
     for(i=33;i>0;i--);
}
void  delayms(uint x)
{
   uchar  i;
     for(i=x;i>0;i--)
  delay();
}

void  initshuma()
{
     wei=1;
  P0=0x07;
  wei=0;
     duan=1;
     P0=table[0];
  duan=0;
}

 

void  keyscan_time0() interrupt 1       //几十个ms扫描一次键盘
{
  
  TR0=0;
  date=0X0F;
  if((date&0x0F)!=0x0F)
  delayms(10);
  if((date&0x0F)!=0x0F)
  {
  
    date=0x3f; //1
    if(h1==0)
    {
    while(h1==0);
     keynum=0;
     num++;
    }
 
    if(h2==0)
    {
    while(h2==0);
    keynum=3;
    num++;
    }
    if(h3==0)
    {
    while(h3==0);
    keynum=6;
    num++;
    }
    if(h4==0)
    {
    while(h4==0);
    keynum=9;
    num++;
    }
 
    date=0x5f; //2
    if(h1==0)
    {
    while(h1==0);
    keynum=1;
    num++;
    }
    if(h2==0)
    {
    while(h2==0);
    keynum=4;
    num++;
    }
    if(h3==0)
    {
    while(h3==0);
    keynum=7;
    num++;
    }
    if(h4==0)
    {
    while(h4==0);
    keynum=10;
    num++;
    }
 
    date=0x6F; //3
    if(h1==0)
    {
     while(h1==0);
    
      keynum=2;
      num++;
    
    }
    if(h2==0)
     {
     while(h2==0);
     keynum=5;
     num++;
     }
    if(h3==0)
    {
    while(h3==0);
    keynum=8;
    num++;
    }

    if(h4==0)
    {
    while(h4==0);
    keynum=11;
    num++;
    }
    if(num>5)
    num=1;
 
     switch(num)
  {
   case 1: wei=1;
     P0=0x01;
     wei=0;
     break;
     
   case 2: wei=1;
     P0=0x02;
     wei=0;
     break;
  
   case 3: wei=1;
     P0=0x04;
     wei=0;
     break;
   default: break; 
   }
   duan=1;
   P0=table[keynum];
   duan=0;
 

 }
 TR0=1;
 TH0=(65536-100)/256;
 TL0=(65536-100)%6;


}
void  main()
{
  
     EA=1;                
  ET0=1;                       
  TMOD=0x01;           
  TH0=(65536-100)/256; 
  TL0=(65536-100)%6; 
  TR0=1;
  keynum=0xff;              //初始化键值
  initshuma();
  while(1)
                
   
 
    while(!((num==1)&(keynum==D[0])));     
     while(!((num==2)&(keynum==D[1])));       
         while(!((num==3)&(keynum==D[2])));  //与设定密码比较是否相同      
             while(!(keynum==10));    //确认键
       P2=0XFE;
       while(!(keynum==11));    //取消键
       P2=0XFF;
        
   }    
}

扫描二维码推送至手机访问。

版权声明:本文由智凡单片机c语言入门发布,如需转载请注明出处。

分享给朋友:

相关文章

两只LED交替运行

两只LED交替运行

问题:实现板载红色LED用3秒时间从熄灭到最亮,再用2秒逐渐熄灭;同时绿色LED用2秒从熄灭到最亮,再勇秒逐渐熄灭。由于单片机可以输出PWM波,从而模拟模拟输出,不是真正的模拟量输出,而是选取两若干个...

51单片机编程简单入门——点亮实验板上的LED灯

51单片机编程简单入门——点亮实验板上的LED灯

1、使用uVision4创建项目  2、选择MCU的型号:Atmel->AT89C52   3、是否创建C51启动文件,选否。启动文件以前汇编常...

通过IO口控制STC15F2K60S2系列单片机输出pwm

通过IO口控制STC15F2K60S2系列单片机输出pwm

       本文介绍如何通过IO口输入的电平来控制STC15F2K60S2系列单片机输出pwm,试验基于STC15L2K60S2型号单片机。  &n...

万年历(AT89C52+DS1302+LCD1602+4X4矩阵键盘)

万年历(AT89C52+DS1302+LCD1602+4X4矩阵键盘)

万年历,用AT89C52为主控芯片,ds1302做时钟芯片,Lcd1602做显示器,4x4矩阵键盘进行时间修改,当按下Enter键时进入时间修改功能,可通过输入0~9对时间进行修改,也可通过左右和加减...

KeilC51辅助工具V1.1

KeilC51辅助工具V1.1

初学8051单片机,大多是使用Keil作为代码开发工具。对于初学者,我相信,只要下功夫,Keil软件那些英文按钮及其功能,总会搞清楚,大不了死记硬背。然而,编程过程中,Keil的报错信息是所有学习者的...

stc12c5a通过串口查看ADC数据

stc12c5a通过串口查看ADC数据

STC12C5A ,默认使用p1口来进行ADC输入,以下是示例: 原文的串口初始化有问题,已修改//* --- STC MCU Limited ---...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。