找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1250|回复: 0
打印 上一主题 下一主题
收起左侧

stc89c52 lcd1602密码锁

[复制链接]
跳转到指定楼层
楼主
ID:812531 发表于 2021-1-12 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;

sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;

unsigned char KeyPro();
unsigned char num1;
unsigned char code mi[]={1,2,3,4};
bit Flag;
//?????,??????
void delayms(unsigned int xms)
{
   unsigned i,j;
        for(i=xms;i>0;i--)
           for(j=110;j>0;j--);
}

void Read_Busy()
{
        uchar busy;
        P0 = 0xff;
        RS = 0;
        RW = 1;
        do
        {
                EN = 1;
                busy = P0;
                EN = 0;
        }while(busy & 0x80);
}
//?LCD1602??????
void Write_Cmd(uchar cmd)
{
        Read_Busy();//???
        RS = 0;
        RW = 0;
        P0 = cmd;
        EN = 1;
        EN = 0;
}
//???????
void Write_Dat(uchar dat)
{
        Read_Busy();
        RS = 1;
        RW = 0;
        P0 = dat;
        EN = 1;
        EN = 0;
}
void charter(unsigned char x,unsigned char y,unsigned char dat)
{
if(y==0)
{
Write_Cmd(0x80+x);
}
else
{
Write_Cmd(0xc0+x);

}
Write_Dat( dat);  
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0)
        {     
Write_Cmd(0x80 + x);     
        }
else
        {     
Write_Cmd(0xC0 + x);     
        }        
while (*s)
        {     
Write_Dat( *s);     
s ++;     
        }
}
void lcdinit()
{
   Write_Cmd(0x38);  
   Write_Cmd(0x08);    /*????*/
   Write_Cmd(0x01);    /*????*/
   Write_Cmd(0x06);    /*????????*/
   Write_Cmd(0x0C);    /*????????*/
}
void main()
{
        unsigned char a[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        unsigned char i,num,j;
        unsigned char temp[4];
lcdinit();
Write_Cmd(0x80|0x00);               

        LCD_Write_String(0,0,"secret code:1234");       
        LCD_Write_String(0,1,"input password");       

while(1)
{
                num=KeyPro();

if(num!=0xff)
{       
       
LCD_Write_String(0,1,"                ");

if(i<4)
{       
temp[i]=num;
        charter(i,1,'0'+num);               
}
i++;
if(i==5)
{
i=0;
        Flag=1;
        for(j=0;j<4;j++)
        {
         Flag=Flag&&(temp[j]==mi[j]);
                if(Flag)
                {
LCD_Write_String(0,1,"right open");       
                }
                else
                {
                LCD_Write_String(0 ,1,"wrong");       
                }
        }
}
}

        }
}
unsigned char KeyScan(void)  //??????,?????????
{
unsigned char temp,num;//???????
P3=0x0f;            //??????0
temp=P3&0x0f;     //?????
if(temp!=0x0f)    //?????????
{
  delayms(10);        //??
  if((P3&0x0f)!=0x0f)
  {
   temp=P3&0x0f;  //?????
    P3=temp|0xf0;  //???????
    num=P3&0xf0;  //?????

    while((P3&0xf0)!=0xf0);//???????

    return(temp+num);//????????
   }
  }     //????
}
/*
unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 0x7e:num1=0;break;//0 ??????????????
  case 0x7d:num1=1;break;//1
  case 0x7b:num1=2;break;//2
  case 0x77:num1=3;break;//3
  case 0xbe:num1=4;break;//4
  case 0xbd:num1=5;break;//5
  case 0xbb:num1=6;break;//6
  case 0xb7:num1=7;break;//7
  case 0xde:num1=8;break;//8
  case 0xdd:num1=9;break;//9
  case 0xdb:num1=10;break;//a
  case 0xd7:num1=11;break;//b
  case 0xee:num1=12;break;//c
  case 0xed:num1=13;break;//d
  case 0xeb:num1=14;break;//e
  case 0xe7:num1=15;break;//f
  default:return 0xff;break;
}
}
*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 0x7e:return 0;break;//0 ??????????????
  case 0x7d:return 1;break;//1
  case 0x7b:return 2;break;//2
  case 0x77:return 3;break;//3
  case 0xbe:return 4;break;//4
  case 0xbd:return 5;break;//5
  case 0xbb:return 6;break;//6
  case 0xb7:return 7;break;//7
  case 0xde:return 8;break;//8
  case 0xdd:return 9;break;//9
  case 0xdb:return 10;break;//a
  case 0xd7:return 11;break;//b
  case 0xee:return 12;break;//c
  case 0xed:return 13;break;//d
  case 0xeb:return 14;break;//e
  case 0xe7:return 15;break;//f
  default:return 0xff;break;
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表