新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī) 畢業(yè)設(shè)計(jì) 電子密碼鎖程序 含電路圖

        基于51單片機(jī) 畢業(yè)設(shè)計(jì) 電子密碼鎖程序 含電路圖

        作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏

        #include
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        uchar code table[]="Input Password: ";
        uchar code table1[]=" Input Error! ";
        uchar code table2[]="You are welcome!";
        uint ucSendBuffer[6]={0,0,0,0,0,0};
        uint mima[6];
        sbit lcdrs=P2^0;
        sbit lcdrw=P2^1;
        sbit lcden=P2^2;
        sbit led=P2^5;
        sbit fmq=P2^4;
        sbit jdq=P2^3;
        sbit key=P2^6;
        uint x;
        uint num,temp;
        uint keyscan();
        void delay_50us(uint t)
        {
        uint y;
        for(;t>0;t--)
        for(y=19;y>0;y--);
        }
        void delay_1ms(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        void delay(void)
        {
        uint i;
        for(i=100;i>0;i--)
        _nop_();
        }
        void delay1ms()
        {
        uchar i;
        for(i=124;i>0;i--); //延時(shí)124*8+10=1002us
        }
        void write_com(uchar com)
        {
        lcdrs=0;
        lcdrw=0;
        lcden=0;
        P0=com;
        delay_50us(10);
        lcden=1;
        delay_50us(20);
        lcden=0;
        }
        void write_data(uchar date)
        {
        lcden=0;
        lcdrs=1;
        lcdrw=0;
        P0=date;
        delay_50us(10);
        lcden=1;
        delay_50us(20);
        lcden=0;
        }
        void init()
        {
        write_com(0x38);
        delay_50us(100);
        write_com(0x01);
        delay_50us(100);
        write_com(0x06);
        delay_50us(100);
        write_com(0x0d);
        delay_50us(100);
        }
        void main()
        {
        uint a=0,q=0,d=0,jiesu;
        uint b=0;
        uint kai;
        delay_50us(300);
        init();
        fmq=1;
        write_com(0x80);
        for(x=0;x<16;x++)
        {
        write_data(table[x]);
        delay_50us(100);
        }
        write_com(0x80+0x44);
        while(1)
        {
        if(keyscan()!=0)
        {
        kai=keyscan();
        mima[a++]=kai;
        write_com(0x80+0x44+b);
        write_data(keyscan());
        num=0;
        b++;
        if(b>7&&kai!=0x7f)
        {
        write_com(0x80);
        for(x=0;x<16;x++)
        {
        write_data(table1[x]);
        delay_50us(100);
        }
        delay_1ms(700);
        break;
        }
        else if(kai==0x7f&&b<=7)
        {
        if(b<7)
        {
        write_com(0x80);
        for(x=0;x<16;x++)
        {
        write_data(table1[x]);
        delay_50us(100);
        }
        delay_1ms(700);
        break;
        }
        else
        {
        while(q<=5)
        {
        if(mima[q]==ucSendBuffer[q]+0x30)
        {
        d++;
        }
        q++;
        }
        if(d==6)
        {
        fmq=0;
        write_com(0x80);
        for(x=0;x<16;x++)
        {
        write_data(table2[x]);
        delay_50us(100);
        }
        jdq=0;
        delay_1ms(500);
        fmq=1;
        led=0;
        break;
        }
        else
        {
        write_com(0x80);
        for(x=0;x<16;x++)
        {
        write_data(table1[x]);
        delay_50us(100);
        }
        delay_1ms(700);
        break;
        }
        }
        }
        else if(kai==0x7e)
        {
        break;
        }
        }
        }
        }
        uint keyscan()
        {
        P1=0xef;
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f) //確認(rèn)是否按下
        {
        delay_1ms(5);
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        temp=P1;
        switch(temp)
        {
        case 0xee:num=0x31;
        break;
        case 0xed:num=0x34;
        break;
        case 0xeb:num=0x37;
        break;
        case 0xe7:num=0x7f;
        break;
        default:num=0;
        break;
        }
        while(temp!=0x0f) //松手檢測(cè)
        {
        temp=P1;
        temp=temp&0x0f;
        }
        }
        }
        P1=0xdf;
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        delay_1ms(5);
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        temp=P1;
        switch(temp)
        {
        case 0xde:num=0x32;
        break;
        case 0xdd:num=0x35;
        break;
        case 0xdb:num=0x38;
        break;
        case 0xd7:num=0x30;
        break;
        default:num=0;
        break;
        }
        while(temp!=0x0f)
        {
        temp=P1;
        temp=temp&0x0f;
        }
        }
        }
        P1=0xbf;
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        delay_1ms(5);
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        temp=P1;
        switch(temp)
        {
        case 0xbe:num=0x33;
        break;
        case 0xbd:num=0x36;
        break;
        case 0xbb:num=0x39;
        break;
        case 0xb7:num=0x7e;
        break;
        default:num=0;
        break;
        }
        while(temp!=0x0f)
        {
        temp=P1;
        temp=temp&0x0f;
        }
        }
        }
        P1=0x7f;
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        delay_1ms(5);
        temp=P1;
        temp=temp&0x0f;
        while(temp!=0x0f)
        {
        temp=P1;
        switch(temp)
        {
        case 0x7e:num=0x41;
        break;
        case 0x7d:num=0x42;
        break;
        case 0x7b:num=0x43;
        break;
        case 0x77:num=0x44;
        break;
        default:num=0;
        break;
        }
        while(temp!=0x0f)
        {
        temp=P1;
        temp=temp&0x0f;
        }
        }
        }
        return num;
        }


        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 宣武区| 揭阳市| 武宁县| 门头沟区| 饶河县| 昆山市| 兴仁县| 公主岭市| 本溪市| 杭锦旗| 茶陵县| 尉犁县| 文成县| 云和县| 盱眙县| 资阳市| 昆明市| 凌云县| 泸水县| 沙洋县| 三门峡市| 康定县| 含山县| 中卫市| 通海县| 安福县| 兴安盟| 永清县| 策勒县| 南川市| 夏津县| 阳城县| 田阳县| 恭城| 延津县| 长阳| 安徽省| 建宁县| 黎川县| 开封市| 上犹县|