51单片机C语言,电子密码的验证输入程序,矩阵键盘用作输入,密码正确时,向串口送1,否则送0

如题所述

#include<reg51.h>
#define uchar unsigned char
uchar keyval,keynum=0;
void t1isr() interrupt 3
{
uchar sccode,recode;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P3=0x0f;  //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f)keynum++;  //有键按下
else keynum=0;
if(keynum>5) //按键保持在5次中断以上
{
keynum=0;
sccode = 0xef;    //逐行扫描初值
while((sccode&0x01)!=0)
{
    P3=sccode;
if((P3&0x0f)!=0x0f)
{
    recode=(P3&0x0f)|0xf0;
getkey((~sccode)+(~recode));
 }
        else
sccode=(sccode<<1)|0x01;
}
}
getkey(0);
}

void getkey(uchar key)
{
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
main()
{
    uchar mima[]="12345678";
    uchar mmins[8];
    uchar i,num,sc;
TMOD=0x21;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
EA=1;
num=0;
while(1)
{
if(keyval!=0xff){mmins[num]=keyval;num++;}
if(num>=8)
    {
    num=0;
    sc=1;
    for(i=0;i<8;i++)
        {
        if(mmins[i]!=mima[i]){sc=0;break;}
    SBUF=sc;
    while(TI==0);
    TI=0;
        }
    }
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-13
可以用proteus仿真,
懂事电子设计 Vgz

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网