求单片机密码锁源程序,C语言的

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-10
求单片机的电子密码锁c语言源程序设计

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1736663&bbs_page_no=1&search_mode=3&search_text=443799600&bbs_id=9999

这个是我以前做的一个小东西,跟你要求一样。还有屏幕显示。你自己看看

#include
#define uint unsigned int
#define uchar unsigned char
#define BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0))
//下面的code表示数组存放在ROM中,因为这个数组的值不需要改写
uchar code KeyCode[16]={15,14,12,8,30,28,24,16,60,56,48,32,120,112,96,64};//值为m*(n+1)的乘积,用于Key()
uchar dis[6];
msdelay(uint x)//延时子函数
{uchar j;
while(x--)
{for(j=0;j<125;j++){;}
}
}
//键盘子程序一,键盘值与数组值对比得到
uchar Key(void)
{uchar temp,m,n,i,j,matrix,k;
P1=0xF0; /*行线电平为高,列线为低*/
temp=P1&0xf0;
if (temp==0xf0) return(16); /*行仍为高,无按健,退出*/
else msdelay(10);
for(i=1;i<16;i=i*2)
{m=i;
for(j=1;j<16;j=j*2)
{n=(~j)&0x0f;
P1=(m<<4)|n; /*m为P1的行值由i循环得到,n为列值,由j循环并取反得到*/
temp=P1&0xf0;
if (!temp)
{do{temp=P1&0xf0;}while(!temp);
matrix=m*(n+1);/*为避免乘积重复,n+1*/
for(k=0;k<16;k++){if (matrix==KeyCode[k]) return(k);} //KeyCode:见前
return(16);
} //if loop
}//j loop
}//i loop
}//Key end
//用Switch...case语句得到键盘值*/
uchar Key1(void)
{uchar temp,m,n,i,j,matrix;
P1=0xF0; /*行线电平为高,列线为低*/
temp=P1&0xf0;
if (temp==0xf0) return(16); /*行仍为高,无按健,退出*/
else msdelay(10);
for(i=1;i<16;i=i*2)
{m=i;
for(j=1;j<16;j=j*2)
{n=(~j)&0x0f;
P1=(m<<4)|n;/*m为P1的行值由i循环得到,n为列值,由j循环并取反得到*/
temp=P1&0xf0;
if (!temp)
{do{temp=P1&0xf0;}while(!temp);
matrix=m*(n+1);
switch(matrix) //此方法的基本思路:
{case 15:return(1); break; //由循环得到的m,n值赋于P1端口实现逐个键扫描
case 14:return(2); break; //同时由m,n+1的值相乘得到对应键点de的积
case 12:return(3); break; //m*(n+1)值扫描键点对应而得出键值
case 8:return(4); break; //
case 30:return(5); break; //
case 28:return(6); break; //
case 24:return(7); break; //
case 16:return(8); break;
case 60:return(9); break;
case 56:return(0); break;
case 48:return(10); break;
case 32:return(11); break;
case 120:return(12); break;
case 112:return(13); break;
case 96:return(14); break;
case 64:return(15); break;
default:return(16);
} //switch end
} //if loop
}//j loop
}//i loop
}//Key end
//依次扫描16个按键
uchar Key2(void)
{uchar temp;
P1=0xF0; /*使P1=1111 0000,行线电平为高,列线为低*/
temp=P1&0xf0;
if (temp==0xf0) return(16); /*读P1=1111 xxxx,表示行仍为高,无按健,退出(x表示不关心)?/
else msdelay(10);
P1=0x1e; /*P1=0001 1110,行一为高,列一为低,扫描第一个按键*/
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(1);}
P1=0x1d; /*P1=0001 1101,行一为高,列二为低,扫描第二个按键,下面扫描其余按键*/
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(2);}
P1=0x1b;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(3);}
P1=0x17;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(4);}
P1=0x2e;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(5);}
P1=0x2d;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(6);}
P1=0x2b;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(7);}
P1=0x27;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(8);}
P1=0x4e;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(9);}
P1=0x4d;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(0);}
P1=0x4b;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(10);}
P1=0x47;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(11);}
P1=0x8e;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(12);}
P1=0x8d;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(13);}
P1=0x8b;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(14);}
P1=0x87;
temp=P1&0xf0;
if (!temp) {do{temp=P1&0xf0;}while(!temp);
return(15);}

return(16); //扫描all按键都未按下,则输出16
}//Key2 end.
////////时钟中断显示子程序
void T0_int() interrupt 1
{static uchar i;
if (i==6){i=0;}
P0=5-i;
P0=P0|(dis[i]<<4);
i++;
TL0=0;
TH0=252;}

void distri(uint disnum)
{uint temp;
dis[0]=0;
dis[1]=disnum/10000;
temp=disnum%10000;
dis[2]=temp/1000;
temp=temp%1000;
dis[3]=temp/100;
temp=temp%100;
dis[4]=temp/10;
dis[5]=temp%10;
}
Main()
{uchar KeyVal,i=0;
TMOD=0x01;
IE=0x82;
TH0=252;
TL0=0;
TR0=1;
distri(0);
do{
KeyVal=Key();
if (KeyVal!=16) dis[1]=KeyVal; //注意:当有按键时才赋于显示位dis[1],否则出错,请分析!
}while(1);
}

#include <reg52.h>
#include"键盘矩阵.h"
#include "delay_ms.h"
#include "矩阵键盘.h"
#include "i2c.h"
#include "1602.h"
#include "delay_ms.h"
#include "mima.h"
#define uchar unsigned char
#define uint unsigned int
#define A 0x0a //输入密码
#define B 0x0b //修改密码
#define D 0x0d //关锁
#define enter 0x0c //确认
#define backspace 0x0f //退格键
sbit baojing = P3^7; //蜂鸣器接口
sbit lock = P3^3;//锁信号
sbit set = P3^2;
uchar idata mima_5[6] = {1,2,3,4,5,6}; //初始密码
uchar flag_change;
uchar aa;//存放密码错误的次数,够三次报警
uchar bb;
uchar flag_t0;*/
void baoj1 ()//报警函数
{
int i;
for(i = 0;i < 5; i++)
{
baojing = 1;
delay_ms(5);
baojing = 0;
delay_ms(5);
}

}
void baoj()
{
uchar i;
for(i = 0; i < 10; i++)

}
void delay_ms(uint x)
{ int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void main()
{
uchar i=0;
uchar IIC_Password[10];
uchar IS_Valid_User=0;
P0=P1=P2=0XFF;
TMOD=0X02;
TH0=175;
TL0=175;
delay_ms(10);

}

  • 51单片机关于密码锁的毕业设计,论文
    答:进入密码的判断比较处理状态并给出相应的处理过程。(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。C语言源程序 include unsigned char code ps[]={1,2,3,4,5};unsigned char code...
  • 求C语言或C++的电子密码锁程序
    答:=='4'&&code[4]=='5'&&code[5]=='6'&&code[6]=='\0'){ printf("\n密码正确\n");break;} //system("cls");} return 0;} 不好意思,楼主,最近没怎么上百度,这个程序应该符合你的条件的,有什么不懂的可以找我呢,单片机我不知道呢,不过这个程序是符合你的条件的,HI我吧 ...
  • 请问,用四个独立按键来制作简易密码锁C语言程序该怎么编写
    答:这个可以模拟那种拨码形式的密码锁方式来设计,比如OFO共享单车的拨码方式。include<reg51.h> define uchar unsigned char uchar mima[4]={1,2,3,4};uchar keymm[4]={0,0,0,0};sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit led=P1^4;bit flag=0;void ...
  • 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!=0x...
  • 跪求单片机电子密码锁电路图和源程序
    答:sbit relay_open=P3^0; //电磁锁开锁驱动 sbit pw_error=P3^1; //密码错误信号 sbit alarm_out=P3^2; //报警输出 sbit open_lock=P3^3; //已开锁指示信号 sbit audio_out=P3^4; //有源蜂鸣器 unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,...
  • 51单片机C语言,电子密码的验证输入程序,矩阵键盘用作输入,密码正确时...
    答:include<reg51.h>#define uchar unsigned charuchar 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)...
  • 谁有《单片机C语言程序设计实训100例——基于8051+Proteus仿真》的“2...
    答:谁有《单片机C语言程序设计实训100例——基于8051+Proteus仿真》的“24C04与1602LCD设计电子密码锁”程序 请发给我谢谢!414360371@qq.com需要编写好的keil工程文件!... 请发给我谢谢!414360371@qq.com需要编写好的keil工程文件! 展开  我来答 2个回答 #热议# 生活中有哪些成瘾食物?叶的123 ...
  • 基于单片机电子密码锁设计~
    答:以前我在网上找到过密码锁的源代码,你可以找找。给你一个思路吧,先用7个端口做成3*4矩阵键盘,0~9 * #共12个键,另外用4个端口做红灯输出、绿灯输出、报警输出、开锁输出。*键为取消键,#键为确认键,密码可存入单片机的ROM中(不能改密码)或存入24CXX串行E2PROM(可改密码)。键盘处理方法...
  • 求助:电子密码锁设计与制作
    答:一种能防止多次试探密码的基于单片机的密码锁设计方案,根据用户的10条总体要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而...
  • 用8051编一密码锁程序!200分~!汇编或C都行~
    答:我不可能专门帮你去写 只能够给个被人的程序给你参考!!!单片机控制的智能密码锁 本密码锁控制器由AT89C2051单片机组成, 工作稳定可靠, 保密性高, 实用性强, 并具有报警控制功能。一、电路组成和原理图 工作原理图如附图一所示, 该电路由AT89C2051做控制元件, P1口为键盘口, 其中P1.4~P1.7为键...