当前位置:首页 > 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语言入门发布,如需转载请注明出处。

分享给朋友:

相关文章

51单片机用STC12即可够用,STC15针脚变了,没必要用STC15

51单片机用STC12即可够用,STC15针脚变了,没必要用STC15

以前用了几片STC12C5A60S2,挺好用的。与传统51单片机针脚兼容,程序也差不多,又可以直接串口下载程序,非常方便。最近以为STC15比较新型,于是买了STC15F2K60S2,结果焊板时才发现...

89c51单片机扩展IO口

89c51单片机扩展IO口

首先我们先讲讲为什么要扩展IO口。在我们使用51单片机的时候,有时候会出现IO口不够用的情况。比如键盘!这个时候IO口的资源就十分有限了。按键是我们常用的器件,做某些东西的时候又不能缺少按键。如果一个...

开发环境配置以及第一个单片机程序

开发环境配置以及第一个单片机程序

学习51单片机最小开发系统需要准备一下工具单片机(这不废话么)2.烧录软件(一般由单片机厂商提供)3.keilc(来源你懂的)4.驱动程序安装(单片机厂商提供)下面是重点1.建立新工程2.在Atmel...

基于51单片机的红外巡迹小车

基于51单片机的红外巡迹小车

在做巡迹小车的时候,需要用到一下几个方面的:       首先就是先让小车可以调速的跑起来,就是用L298N来驱动直流电机,再用pwm技术实现控速,完成第一步。...

一个已入门单片机的老鸟给一个菜鸟的建议

一个已入门单片机的老鸟给一个菜鸟的建议

       一个学能源的人却来开始学习单片机,可能是太闲了吧,于是就进了电子实验室,在实验室里面,有一堆大佬,而我完全是一个小白,然而我却很少问他们,以后应该...

keil之c语言模块化编程初探

keil之c语言模块化编程初探

       很久就想要把自己曾经写过的程序变成一个自己的真正的程序库,曾经用过一个比较笨的方式——将每一个模块独立,复制粘贴。但是这样并不能够做到高效率的编程...

发表评论

访客

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