关于at89c51简单电子密码锁的问题,请教各位单片机高手
#inclued<reg51.h>#include<string.h>sbitled_yellow=P2^7;sbitled_red=P2^4;charpassword[...
#inclued<reg51.h>
#include<string.h>
sbit led_yellow=P2^7;
sbit led_red=P2^4;
char password[]={1,2,3,4,5,6};
char youPassword[6];
char k=0;
void delay(unsigned int time)
{
unsigned int i=0;
for(;time>0;time--)
for(i=0;i<125;i++);
}
void keymain()
{
char k1=0,k2=0;
P1=0xf0;
if(P1!=0xf0) //按键按下
{
k1=P1;
delay(10); //消除抖动
P1=0x0f;
delay(10);
k2=k1&P1;
switch(k2)
{
case 0X11:youPassword[k]=0;k++;break;
case 0X21:youPassword[k]=1;k++;break;
case 0X41:youPassword[k]=2;k++;break;
case 0X81:youPassword[k]=3;k++;break;
case 0X12:youPassword[k]=4;k++;break;
case 0X22:youPassword[k]=5;k++;break;
case 0X42:youPassword[k]=6;k++;break;
case 0X82:youPassword[k]=7;k++;break;
case 0X14:youPassword[k]=8;k++;break;
case 0X24:youPassword[k]=9;k++;break;
case 0X44:k=100;break;//确定密码已经输入完毕
// case 0X84:k='-';break;
// case 0X18:k='*';break;
// case 0X28:k='/';break;
// case 0X48:k='=';break;
// case 0X88:k='c';break;
}
}
}
void main()
{
int i;
bit Flag=1;
led=1;
led_red=0;
led_yellow=0;
while(1)
{
keymain();
if(k==100)
{
// if(strcmp(password,youPassword)==0)
for(i=0;i<6;i++)
Flag=Flag&&(youPassword[i]==password[i]);
if(Flag)
led_yellow=1;
else led_red=1;
}
}
}
怎么输入正确的密码,黄灯不亮,而红灯亮了,是什么问题呢?我这个程序有问题么?请指教,单片机菜鸟来的,最好帮忙改一下或者给一个程序参考一下,谢谢给位 ,邮箱:729314265@qq.com 展开
#include<string.h>
sbit led_yellow=P2^7;
sbit led_red=P2^4;
char password[]={1,2,3,4,5,6};
char youPassword[6];
char k=0;
void delay(unsigned int time)
{
unsigned int i=0;
for(;time>0;time--)
for(i=0;i<125;i++);
}
void keymain()
{
char k1=0,k2=0;
P1=0xf0;
if(P1!=0xf0) //按键按下
{
k1=P1;
delay(10); //消除抖动
P1=0x0f;
delay(10);
k2=k1&P1;
switch(k2)
{
case 0X11:youPassword[k]=0;k++;break;
case 0X21:youPassword[k]=1;k++;break;
case 0X41:youPassword[k]=2;k++;break;
case 0X81:youPassword[k]=3;k++;break;
case 0X12:youPassword[k]=4;k++;break;
case 0X22:youPassword[k]=5;k++;break;
case 0X42:youPassword[k]=6;k++;break;
case 0X82:youPassword[k]=7;k++;break;
case 0X14:youPassword[k]=8;k++;break;
case 0X24:youPassword[k]=9;k++;break;
case 0X44:k=100;break;//确定密码已经输入完毕
// case 0X84:k='-';break;
// case 0X18:k='*';break;
// case 0X28:k='/';break;
// case 0X48:k='=';break;
// case 0X88:k='c';break;
}
}
}
void main()
{
int i;
bit Flag=1;
led=1;
led_red=0;
led_yellow=0;
while(1)
{
keymain();
if(k==100)
{
// if(strcmp(password,youPassword)==0)
for(i=0;i<6;i++)
Flag=Flag&&(youPassword[i]==password[i]);
if(Flag)
led_yellow=1;
else led_red=1;
}
}
}
怎么输入正确的密码,黄灯不亮,而红灯亮了,是什么问题呢?我这个程序有问题么?请指教,单片机菜鸟来的,最好帮忙改一下或者给一个程序参考一下,谢谢给位 ,邮箱:729314265@qq.com 展开
3个回答
2011-11-14
展开全部
你这程序能通过编译吗?你试过没有?第一行的关键字都错了!自己对比下第2行看下。
led=1;这个 led哪来的?
Flag=Flag&&(youPassword[i]==password[i]);这行是什么意思?(youPassword[i]==password[i])?
把上面那行改成: if(youPassword[i] != password[i]){Flag=0;break;}
然后在最后一行“else led_red=1;”的下面加一行 Flag=1;
led=1;这个 led哪来的?
Flag=Flag&&(youPassword[i]==password[i]);这行是什么意思?(youPassword[i]==password[i])?
把上面那行改成: if(youPassword[i] != password[i]){Flag=0;break;}
然后在最后一行“else led_red=1;”的下面加一行 Flag=1;
更多追问追答
追问
之前编辑过的,这个led是没有删掉而已
然后按你这样做,还是不行~~还是同样的错误,输入正确的密码,黄灯不亮,而红灯亮了
麻烦你再帮我看看~~
追答
刚才后面再加一行 k=0;
另外,键盘扫描函数有问题(自己认真思考下),换掉,想不出来百度一个。
深圳市日翔科技有限公司
2020-12-03 广告
2020-12-03 广告
电子锁是相对于机械锁而言的,电子锁与机械锁相对,更加智能锁,固电子锁经常又称之为电子智能锁,没有传统的锁芯设计 ,无需钥匙,使用起来更方便和安全。 电子锁的出现,让越来越多的现代人感受到科技在真实生活中的广泛性。任何新技术、新产品的面世并不...
点击进入详情页
本回答由深圳市日翔科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询