12864密码锁

发布者:BlissfulMoon最新更新时间:2017-01-09 来源: eefocus关键字:密码锁 手机看文章 扫描二维码
随时随地手机看文章

这个程序真的花了我好长的时间调试,终于写好了,大家可以看看我的密码锁,有点花哨呕!!


下面是密码锁简约版本:


main.c


#include

#include"12864.h"

#include"keyscan.h"

#include"baojin.h"


uchar mima[5]={1,2,3,4,5};



main()

{

    uchar length,i,flag,inputtimes,flagkaimeng;//tempÊÇÃÜÂëµÄÁÙʱ±äÁ¿

    uchar itouch,flaggaimima;//ÓÃÀ´¼Ç¼ÕæÕýÊäÈëµÄÃÜÂëµÄ¸öÊý

    uchar mimatemp[5];

    init_12864();

    lcd_pos(0,2);

    write_string("welcom!!");

    delay1ms(2);

    lcd_pos(1,0);

    write_string("PSW:");

    write_cmd(0x0f);//´ò¿ª¹â±ê

    

    

    f3:

    while(1)

    {

            i=0;

            if(inputtimes>=1)//ÊäÈë´íÎóºóµÄ΢µ÷ÎÊÌâ

            {

                    lcd_pos(1,2);

                    write_string("          ");

                    lcd_pos(1,2);

                    

            }

            while(1)

            {

                f:    

                num=keyscan();

                    if(num!=0xff)

                    {

                            if(num==15)//¶¨ÒåΪȷÈÏ

                                break;

                            

                            if(num==16)//Õâ¸öËã·¨¿ÉÒÔʵÏֶಽÍ˸ñ

                            {

                                i--;//±íʾǰÃæÊäÈëµÄÊý¾ÝÎÞЧ

                            

                                lcd_pos(1,2);

                                write_string("                      ");

                                lcd_pos(1,2);

                                if(i==-1)//±ÜÃâ¶à´Î°´ÏÂÔì³Ébug

                                        i=0;

                                

                                for(itouch=0;itouch

                                        write_string("*");

                                

                                goto f;

                            }

                            

                            if(num==14)//±íʾҪÐÞ¸ÄÃÜÂë

                            {

                                    flaggaimima = 1;

                                    break;

                            }

                            

                            if(num!=16)//16¶¨ÒåΪ»Ø³µ£¬Ïû³ýÇ°ÃæÒ»¸öÊý¾Ý

                            {

                                mimatemp[i]=num;

                                i++;

                                length = i;

                                write_string("*");

                                //write_date(num+0x30);

                            }

                    }

                

            }

            

            

            if(flaggaimima==1)

                {

                flaggaimima = 0;

                while(1)

                {

                f1:    

                num=keyscan();

                    if(num!=0xff)

                    {

                            if(num==15)//¶¨ÒåΪȷÈϱíʾÐÞ¸ÄÃÜÂë½áÊø

                            {

                                    lcd_pos(1,2);

                                    write_string("             ");

                                    lcd_pos(1,2);

                                    break;

                            }

                            if(num==16)//Õâ¸öËã·¨¿ÉÒÔʵÏֶಽÍ˸ñ

                            {

                                i--;//±íʾǰÃæÊäÈëµÄÊý¾ÝÎÞЧ

                            

                                lcd_pos(1,2);

                                write_string("                      ");

                                lcd_pos(1,2);

                                if(i==-1)//±ÜÃâ¶à´Î°´ÏÂÔì³Ébug

                                        i=0;

                                

                                for(itouch=0;itouch

                                        write_string("*");

                                

                                goto f1;

                            }

                            if(num!=16)//16¶¨ÒåΪ»Ø³µ£¬Ïû³ýÇ°ÃæÒ»¸öÊý¾Ý

                            {

                            mima[i]=num;

                            i++;

                            length = i;

                            write_string("*");

                            //write_date(num+0x30);

                            }

                            

                    }

                

                }

                goto f3 ;//±íʾÖØпªÊ¼

                    

            }

            

            

            

            flag = 1;

            if(length == sizeof(mima))//±È½ÏÊäÈëµÄÃÜÂëÊÇ·ñÒ»Ñù

            {

            for(i=0;i

                {

                    flag=flag&&(mimatemp[i]==mima[i]);

                        //write_date(mimatemp[i]+0x30);

                }

            }

            else

            {

                        flag=0;

            }

            

            if(flag ==1)//Èç¹û±ê־λµÈÓÚ1£¬±íʾ¿ªËø³É¹¦

            {

                    flagkaimeng = 1;//±íʾ´ò¿ª²½½øµç»úµÄ±íʾλÆô¶¯

                    lcd_pos(2,1);

                    write_string("             ");

                    lcd_pos(2,2);

                    write_string("open!");

                    write_cmd(0x0c);

                    break;//ͬʱÌø³öÑ­»·

            }

            

            

            else //·ñÔòµÄ»°£¬±íʾ¿ªËøʧ°Ü

            {

                    lcd_pos(2,1);

                    write_string("error,again!");

                    

                

                    inputtimes++;

                    

                    

                    if(inputtimes==3)

                    {

                            lcd_pos(2,1);

                            write_string("error 3 times!");

                            write_cmd(0x0c);

                            feng();

                            

                    }

            }

    }

    


    if(flagkaimeng==1)//¿ªÃųɹ¦µÄ²Ù×÷

    {

                write_cmd(0x01);

                lcd_pos(1,2);

                write_string("³öÈëƽ°²£¡");

                lcd_pos(2,2);

                write_string("»¶Ó­»Ø¼Ò£¡");

             JDQ();

        

    }

    

    while(1);

    

                    

}

 


12864.c


#include"12864.h"

#include


sbit lcdrs = P2^4;//Êý¾Ý»¹ÊÇÖ¸ÁîÑ¡Ôñ¶Ë¿Ú

sbit lcdwr = P2^5;//¶ÁдѡÔñ¶Ë¿Ú

sbit lcden = P2^6;//ʹÄܶ˿Ú

sbit PSB = P2^1;//´®²¢¿ÚÑ¡Ôñ¶Ë¿Ú


/*uchar code table1[]={"Welcome!!"};

uchar code table2[]={"Psw:"};

uchar code table3[] ={"Open"};

uchar code table4[] ={"Error try again!"};

uchar code table5[] ={"Error 3 times!!"};*/

unsigned char code pic1[] = { 0x01,

};


void delay1ms(uint x)//ÑÓʱº¯Êý

{

    uint i,j;

    for(i= x;i>0;i--)

        for(j=110;j>0;j--);

}


void write_cmd(uchar cmd)//дָÁÊý

{

    lcdrs = 0;

    lcdwr = 0;

    P0 = cmd;

    lcden = 1;

    delay1ms(5);//

    lcden = 0;

}


void write_date(uchar date)//дÊý¾Ýº¯Êý

{

    lcdrs = 1;

    lcdwr = 0;

    P0 = date;

    lcden = 1;

    delay1ms(5);//

    lcden = 0;

}


void write_string(uchar *str)//дÈë×Ö·û´®º¯Êý

{

    

    

    for(;*str!='\0';str++)

    {

            write_date(*str);

            delay1ms(2);

    }

    

}


void init_12864()

{

    PSB = 1;//²¢¿Ú·½Ê½´«ËÍÊý¾Ý

    write_cmd(0x30);//»ù±¾Ö¸Áî²Ù×÷

    write_cmd(0x0c);//¿ªÏÔʾ£¬¹Ø¹â±ê

    write_cmd(0x01);//Çå³ýlcdµÄÏÔʾÄÚÈÝ

}


void lcd_putpic(unsigned char code *img)//»­Í¼º¯Êý

{

    uint i,j;

    //»­Í¼Éϰ벿·Ö

    for(i = 0;i<32;i++)

    {

        write_cmd(0x80+i);//

        write_cmd(0x80);//

        for(j=0;j<16;j++)

        {

            write_date(*img);

            img++;

        }

    }

    //»­Ï²¿·ÖµÄÆÁÄ»   

    for(i = 0;i<32;i++)

    {

        write_cmd(0x80+i);//É趨ÁÐ

        write_cmd(0x88);//´ÓµÚÈýÐпªÊ¼»­Í¼

        for(j=0;j<16;j++)

        {

            write_date(*img);

            img++;

        }

    }

}


void setpic()//É趨»­Í¼¹¦Äܵĺ¯Êý

{

    write_cmd(0x36);//É趨»­Í¼Æ仭ͼ¹¦ÄÜ

    delay1ms(5);

}


void lcd_pos(uchar x,uchar y)//É趨ÏÔʾλÖõĺ¯Êý

{

    uchar pos;

    if(x==0)

        x=0x80;

    else 

        if(x==1)

            x=0x90;

        else 

            if(x==2)

                x=0x88;

            else 

                if(x==3)

                    x=0x98;

                pos=x+y;

                write_cmd(pos);

}



keyscan.c


#include

#include "12864.h"


uchar num,num1,temp;

uchar keyscan()

{

    P3 = 0xfe;//1111 1110

        temp = P3;

        temp = temp&0xf0;//11110000

        while(temp!=0xf0)//??????

        {

            delay1ms(5);//????P3?

            temp = P3;

            temp = temp&0xf0;

            while(temp!=0xf0)

            {

                temp = P3;  

                switch(temp)

                {

                    case 0x7e:num = 1;

                        break;

                    case 0xbe:num = 2;//10

                        break;

                    case 0xde:num = 3;//11

                        break;

                    case 0xee:num = 4;//110

                        break;

                     

                }

                while(temp!=0xf0)//????

                {

                    temp = P3;

                    temp = temp&0xf0;

                }

                                return num;

            }

        }

 

         

        P3 = 0xfd;//1111 1101

        temp = P3;

        temp = temp&0xf0;//11110000

        while(temp!=0xf0)//??????

        {

            delay1ms(5);//????P3?

            temp = P3;

            temp = temp&0xf0;

            while(temp!=0xf0)

            {

                temp = P3;  

                switch(temp)

                {

                    case 0x7d:num = 5;//101

                        break;

                    case 0xbd:num = 6;//110

                        break;

                    case 0xdd:num = 7;//111

                        break;

                    case 0xed:num = 8;//1000

                        break;

                     

                }

                while(temp!=0xf0)//????

                {

                    temp = P3;

                    temp = temp&0xf0;

                }

                                return num;

            }

        }

 

 

 

        P3 = 0xfb;//1111 1011

        temp = P3;

        temp = temp&0xf0;//11110000

        while(temp!=0xf0)//??????

        {

            delay1ms(5);//????P3?

            temp = P3;

            temp = temp&0xf0;

            while(temp!=0xf0)

            {

                temp = P3;  

                switch(temp)

                {

                    case 0x7b:num = 9;//1001

                        break;

                    case 0xbb:num = 10;//10

                        break;

                    case 0xdb:num = 11;//11

                        break;

                    case 0xeb:num = 12;//12

                        break;

                                    

                     

                }

                while(temp!=0xf0)//????

                {

                    temp = P3;

                    temp = temp&0xf0;

                }

                                return num;

            }

        }

 

        P3 = 0xf7;//1111 0111

        temp = P3;

        temp = temp&0xf0;//11110000

        while(temp!=0xf0)//??????

        {

            delay1ms(5);//????P3?

            temp = P3;

            temp = temp&0xf0;

            while(temp!=0xf0)

            {

                temp = P3;  

                switch(temp)

                {

                    case 0x77:num = 13;//13

                        break;

                    case 0xb7:num = 14;//14

                        break;

                    case 0xd7:num = 15;//15

                        break;

                    case 0xe7:num = 16;//16

                        break;

                                    

                }

                while(temp!=0xf0)//????

                {

                    temp = P3;

                    temp = temp&0xf0;

                }

                                return num;

     

            }

        }

         

        return 0xff;

 

}



baojin.c


#include

#include"baojin.h"

#include"12864.h"

sbit jdq = P1^0;

sbit led = P1^1;


sbit fen = P1^2;


void feng()

{

    while(1)

    {

        delay1ms(10); 

        fen = ~fen;

    }

}




void JDQ()

{

        led = 0;

        jdq = 1;//´ò¿ª¼ÌµçÆ÷

}


void step()

{

        unsigned int i;

        while(1)

        {

            P1 = 0x01;

            for(i=0;i<510;i++);

            P1 = 0x02;

            for(i=0;i<510;i++);

            P1 = 0x04;

            for(i=0;i<510;i++);

            P1 = 0x08;

            for(i=0;i<510;i++);

        }

}



12864.h


#ifndef __12864_H__

#define _12864_H__


#include

#define uint unsigned int

#define uchar unsigned char




/*extern uchar code table1[] ;

extern uchar code table2[] ;

extern uchar code table3[] ;

extern uchar code table4[] ;

extern uchar code table5[] ;*/



extern unsigned char code pic1[];

void delay1ms(uint x);//ÑÓʱº¯Êý

void write_cmd(uchar cmd);//дָÁÊý

void write_date(uchar date);//дÊý¾Ýº¯Êý


void init_12864();

void lcd_putpic(unsigned char code *img);//»­Í¼º¯Êý

void setpic();//É趨»­Í¼¹¦Äܵĺ¯Êý

void lcd_pos(uchar x,uchar y);//É趨ÏÔʾλÖõĺ¯Êý

void write_string(uchar *str);

#endif



baojin.h


#ifndef __BAOJIN_H__

#define __BAOJIN_H__


void feng();

void step();

void JDQ();//¼ÌµçÆ÷¿ªÆô¿ª¹Ø


#endif


至于复杂的版本呢,大家可以在12864.c上进行添加

注意这里还有4个警告,是因为有几个画图的函数我没有调用,为的是让大家能够在本程序的基础上进行添加


关键字:密码锁 引用地址:12864密码锁

上一篇:rfid 门卡系统和人体红外感应开发
下一篇:单片机的动手实践篇--51单片机玩转12864

推荐阅读最新更新时间:2024-03-16 15:29

基于AT89C51的激光密码锁的设计
当今社会光电技术的应用已经非常广泛,尤其是在光纤通信技术、远程遥控技术、雷达探 测技术、自动控制技术以及光电检测技术等方面,对于光电技术的依赖越来越大。光电技术 是具有广阔前景的一门新型技术,因为光的传播速度快,同时又不容易受干扰,还具有极大 的信息承载量,如果选择用光作为信息的载体,可以想象得出我们的世界将会变得如何的方 便快捷。 电脑密码控制器是以微处理器和数字存储器为代表,采用了当今高新科技、最新优化软件设 计而成,所追求的高保密性、高可靠性和广泛的适用性,特别是在区域管理和集中控制防盗 中显示出诸多优势,是一种现在比较流行的系统。 本密码控制器属于光电遥控式,集合了以上两种先进技术。以有光照或无光照作为基本码编
[应用]
你从未见过的单片机密码锁设计(基本版)
设计亮点: 1.使用OLED12864屏幕显示,具有用户菜单和管理员菜单,直观明了的设置使用流程(菜单未使用结构体或链表) 2.用户密码存储加密,使用BKDR哈希值计算并存储,防止从24C02中窃取密码 3.放弃传统的矩阵键盘,使用ADC键盘,连接上更加方便 4.如3项所示,密码为16进制,最大输入16位 5.对于添加了管理员密码的版本,使用内部EEPROM存储管理员密码(在本版本中,管理员密码明文存储) 简易操作说明: 上电进入用户模式锁定状态,在锁定状态下输入密码后,使用KEY1键确认,KEY2键取消,若密码正确,在按下确认键的时候会显示正确提示信息,松开按键进入用户菜单 如果用户模式下密码连续输入错误5次则自动锁死,此时可以
[单片机]
你从未见过的单片机<font color='red'>密码锁</font>设计(基本版)
LCD12864--头文件
LCD12864.h #define LCD12864_RS PORTA.0 #define LCD12864_RW PORTA.1 #define LCD12864_EN PORTA.2 #define LCD12864_PortOut DDRA|=0x07 //P3口的低三位设置为输出 #define LCD12864_Data DDRB #define LCD12864_Read PINB #define LCD12864_Write PORTB void lcd12864_init(void); void lcd12864_cleardd(void); void lcd12864_cursoron(voi
[单片机]
C8051F LCD12864程序
摘要: /********************************************************************************************************** File : LCD12864.c* Hardware Environment: DVK501 F320 EX* Build Environment : Silicon LABs 3 ... /******************************************************************************************************** * * F
[单片机]
51单片机LCD12864显示屏图片中文英文显示
显示结果: 图片及字体取模 单片机源程序如下: #include reg51.h #include intrins.h #include stdlib.h #define uchar unsigned char #define uint unsigned int //定义端口 sbit A0=P2^0; //定义端口是传输命令还是数据, sbit RW=P2^1;//定义端口是读取还是写入, sbit LCDEN=P2^2;//芯片使能启动 sbit RST=P2^3;//复位键 uchar code dis1 ={/*-- 文字: 我 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x
[单片机]
51单片机LCD<font color='red'>12864</font>显示屏图片中文英文显示
无字库12864单片机驱动程序 UC1701X或兼容的IC,比如ST7565R
51单片机驱动lcd12864,无字库串口屏 单片机源程序如下: /* 液晶演示程序 液晶模块型号:JLX12864G-086-PN(或12864G-0088),串行接口! 驱动IC是:UC1701X或兼容的IC,比如ST7565R 编写:叶先生,11月5日,13年 版权所有:晶联讯 */ #include reg52.H #include intrins.h #include string.h //====================================================== sbit sclk=P2^3; //接口定义:lcd_sclk就是L
[单片机]
无字库<font color='red'>12864</font>单片机驱动程序 UC1701X或兼容的IC,比如ST7565R
PIC16F74的12864点阵液晶驱动(不带字库)
驱动程序如下: 此程序用于12864不带字库点阵液晶屏使用 */ #include pic.h #define DATA PORTB //RB端口为8位数据端口 #define Busy RB7 //RB7为忙标志位,数据的高位 #define RS RC1 //控制引脚说明 #define RW RC2 #define E RC3 #define CS1 RD2 #define CS2 RD3 //---------------数据定义---------------- //12867为纵向8点下高位 //每一页的排列是纵向8位下高位,从左到右依次为64列 //下面是16*1
[单片机]
LCD12864测试程序
LCD12864的控制器为ST7920,带中文字库与图形库,并口驱动。 #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char #define P0 P0 uchar co de table1 ={ Wallacer }; uchar co de table2 ={ 我喜欢单片机! }; uchar co de table3 ={ I Like MCU! }; uchar co de table4 ={ 河北科技师范学院 }; sbit lcd_rs=P1^0; sbit lcd_rw=P1^1; s
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved