51单片机4*4矩阵键盘用C语言如何设置成密码开锁键?

如题所述

#include<stdio.h>
#include<reg51.h>
#define uchar unsigned char

uchar key;
int i=0;
char b[4]={'0','0','0','0'};//输入的密码放这里和初始的比较来判断是否密码正确
void keyscan() //扫描按键是否按下
{
uchar temp;
P3=0xfe; //扫描第一行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //判断按键是否按下
{
delayms(10);//去抖动
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//确认按键按下
{
temp=P3;
switch(temp)
{
case 0xee:key='0';break;
case 0xde:key='1';break;
case 0xbe:key='2';break;
case 0x7e:key='3';break;
}
while(temp!=0xf0) //判断按键是否松开
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xfd; //扫描第二行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key='4';break;
case 0xdd:key='5';break;
case 0xbd:key='6';break;
case 0x7d:key='7';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xfb; //扫描第三行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key='8' ;break;
case 0xdb:key='9' ;break;
case 0xbb:key='A';break;
case 0x7b:key='B';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xf7; //扫描第四行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key='C';break;
case 0xd7:key='D';break;
case 0xb7:key='E';break;
case 0x77:key='F';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
}

main()
{
char a[4]={'3','5','A','C'}; //这个做初始密码
while(1)//无限循环,保证了b 0-3 四个数有值
{
keyscan();
if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3])
{
//这里写密码正确程序要怎么处理
}
}
}
代码应该可以。。 我没板子,只是想着写。你main里面加上你要的功能试试,顺便把结果告诉我下。。。 我只是给每个按键做标记,然后根据按键按下的顺序,和预定的标记相同则判断密码正确。 按键是低电平选通。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-27
密码只要0--9,还有6个按键可以设置为功能键的啊,想用哪个就用哪个,和数字键用法一样的。

求基于51单片机的电子密码锁的C语言程序。急!!!
keyval=3; \/\/可判断是S3键被按下 if(P17==0) \/\/如果检测到接P1.7引脚的列线为低电平“0”keyval=4; \/\/可判断是S4键被按下 P1=0xfd; \/\/第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) \/\/如果检测到接P1.4引脚的列线为低电平“0”keyval=5; \/...

51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能?
if(key_l!=0xf0){ delay_nms(5);key_l=P1;……在第4行加 while( key_l!=0xf0 );等待按键释放,按键不放开就一直在此处等待,知道按键释放,此语句执行完。再往下执行

89c51单片机4*4矩阵键盘编程。
ANL A,#0FH XRL A,#0FH JZ SW1 LCALL DELAY10MS JZ SW1\/\/确认有键按下,但不知道哪个,此时可以之间让蜂鸣器叫 MOV P3.0,#1\/\/蜂鸣器发声(赋1还是赋0取决你用的蜂鸣器)MOV A,P1 ANL A,#0FH CJNE A,#0EH,K1 MOV COUNT,#0 LJMP DK K1: CJNE A,#0DH,K2 MOV COUNT,#4 LJMP DK...

单片机中的4×4矩阵键盘的键值怎么求?
然后 \/\/再令单片机输出00001111读一次把两次的值相加,最后 \/\/获取一个高位和低位分别有0的值即可判断键值, \/\/如11101110 \/\/*** #include<reg52.h> #define uchar unsigned char #define uint unsigned int unsigned char code smg_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x...

关于52单片机利用4*4矩阵键盘连续输入的问题?怎么用c语言实现
参考:http:\/\/hi.baidu.com\/do_sermon\/item\/65af71290819959eb6326365

求 关于 用单片机和4*4矩阵键盘输入数字并在LCD1602上显示出来的C语言...
include<reg51.h> include<intrins.h> define uint unsigned int define uchar unsigned char uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};\/\/这三个引脚参考资料 sbit E=P2^7;\/\/1602使能引脚 sbit RW=P2^6;\/\/1602读写引脚 sbit RS...

用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的
MAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值 MOV R0,#30H ;显示首地址 MOV R2,#0CH ;计算数据存放单元个数 CLR AQING: MOV @R0,A ;将数据存放单元清零 INC R0 DJNZ R2,QING MOV P0,#8FH ;关闭显示 MOV R1,#30H ;将显示首地址存放R1里;===;五位无符号显示子程序DIS1: MOV R0,#30...

基于51单片机的密码锁程序是什么?
无输入时显示日历,温度,可进行调时设定,密码输入功能 51单片机系统版、ds1302时钟模块、4*4矩阵键盘、ds18b20温度传感器、12864液晶显示屏。这个设计构想其实老早就有了,由于快接近期末考试所以一直在构想中,等到考试完准备利用暑假的时候实现它。考试结束就去某宝购买器件,为了锻炼自己的焊接水平买了...

急求一个由89C51单片机的代码!要求用4*4矩阵键盘控制LED矩阵输出0~9的...
分别按下4×4键盘的按键,显示0~16键值 \/ include<reg51.h> sbit speaker=P3^7;\/\/\/键盘 sbit v1=P2^0;sbit v2=P2^1;sbit v3=P2^2;sbit v4=P2^3;sbit h1=P2^4;sbit h2=P2^5;sbit h3=P2^6;sbit h4=P2^7;\/\/\/显示 sbit shu1=P1^3;\/*第1位数码管共阴端*\/ sbit shu2=P1...

急求4*4矩阵键盘控制数码管显示! 51单片机
=16;xianshi[bb]=16;} } } void delay(uint x){ uint a,b;for(a=x;a>0;a--)for(b=124;b>0;b--); \/\/这里b的大小有晶振频率决定 反比 } bit Test_Key(){ uint i;for(i=0;i<4;i++){ P1=Key_init[i];key_char=P1;key_char=key_char&0xf0;if(key_char!=0xf0)...

相似回答