简易电子密码锁设计
来源:互联网 发布:照片合成用什么软件 编辑:程序博客网 时间:2024/04/27 13:30
简易电子密码锁的设置,用矩阵键盘数字0~9设置六位数的密码,另外设置一个OK键,当六位密码数按键正确后再按下确认键后则数码管出现字符提示,并且亮起发光二极管。利用定时器T0中断函数处理按键程序。利用TR0=0,TR0=1启停定时器。P3^0至P3^3做为矩阵键盘的行,P3^4至P3^7做为矩阵键盘的行。初始密码设为012345。
/********************************************************************************
********************************简易电子锁设计**************************************
*********************************************************************时间2月16日*/
#include<reg52.h>
#define uchar unsigned char
sbit wei=P2^7;
sbit duan=P2^6;
uchar code table1[]={0x3e,0x3d,0x3b,0x37,0x2f,0x1f};//位选表
uchar code gf[]={0x65,0x3e,0x3f,0x71,0x79,0x54,0x65,0x40,0x80};//段码表最后一位是小数点倒数第二个位显示-
uchar mima[7]={0,1,2,3,4,5,10};//设定密码
uchar keynum;//键值
sbit led=P1^0;
sbit ln1=P3^4;//列
sbit ln2=P3^5;
sbit ln3=P3^6;
sbit ln4=P3^7;
/*******延时函数***************/
void delay(uchar xms)
{
char x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/**********初始化函数***************/
void init()
{
wei=0;
P0=0xff;
duan=0;
P0=0x00;// 初始化关显示
EA=1;//开总中断
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;//开定时器0中断
TR0=1;//启动计数
}
/*********** 定时器0中断函数************/
void t0_timer() interrupt 1
{
TR0=0;//停止计数
P3=0xf0;
if((P3&0xf0)!=0xf0)
delay(10);
if((P3&0xf0)!=0xf0)
{
P3=0xfe;
if(ln1==0)
keynum=0;
if(ln2==0)
keynum=1;
if(ln3==0)
keynum=2;
if(ln4==0)
keynum=3;
P3=0xfd;
if(ln1==0)
keynum=4;
if(ln2==0)
keynum=5;
if(ln3==0)
keynum=6;
if(ln4==0)
keynum=7;
P3=0xfb;
if(ln1==0)
keynum=8;
if(ln2==0)
keynum=9;
if(ln3==0)
keynum=10;
}
TH1=(65536-500)/256;
TH0=(65536-500)%256;
TR0=1;
}
/************显示函数***********/
void display()
{
P0=0xff; //消隐
wei=1;
P0=table1[0];//第1个数码管选中
wei=0;
duan=1;
P0=gf[0];
duan=0;
delay(1);
P0=0xff; //消隐
wei=1;
P0=table1[1];//第2个数码管选中
wei=0;
duan=1;
P0=gf[1];
duan=0;
delay(1);
P0=0xff; //消隐
wei=1;
P0=table1[2];//第3个数码管选中
wei=0;
duan=1;
P0=gf[2];//显示
duan=0;
delay(1);
P0=0xff; //消隐
wei=1;
P0=table1[3];//第4个数码管选中
wei=0;
duan=1;
P0=gf[3];//显示
duan=0;
delay(1);
P0=0xff; //消隐
wei=1;
P0=table1[4];//第5个数码管选中
wei=0;
duan=1;
P0=gf[4];//显示
duan=0;
delay(1);
P0=0xff;//消隐
wei=1;
P0=table1[5];//第6个数码管选中
wei=0;
duan=1;
P0=gf[5];//显示
duan=0;
delay(1);
}
void main()
{
init();
while(mima[0]!=keynum);//等待按键键值与密码是否相等
while(mima[1]!=keynum);
while(mima[2]!=keynum);
while(mima[3]!=keynum);
while(mima[4]!=keynum);
while(mima[5]!=keynum);
while(mima[6]!=keynum);//是否按下OK键 设置键值10为OK键
while(1)
{
led=~led;
delay(1000);
display();
}
}
- 简易电子密码锁设计
- MS51 电子密码锁设计
- 电子密码锁设计
- 四位密码锁*电子密码锁的设计
- 电子密码锁
- 电子密码锁
- 单片机电子密码锁源代码
- 红外线电子密码锁的制作
- 基于C语言STC89C52单片机电子密码锁的设计与仿真
- 基于8051的电子密码锁程序
- 单片机之旅——电子密码锁
- 基于单片机的电子密码锁的实现
- 可以改密码的单片机电子密码锁
- 8.最简易密码锁 不显示
- 简易电子签名插件
- [VS2010]简易电子钢琴
- 密码锁
- 密码锁
- 教你用c语言实现dos攻击
- 另类技巧:使用DOS收发MAIL
- 突破防抓取限制httpclient配合htmlparser抓取网站
- Chapter 7 Linking ---Static Linking
- Microsoft IIS self decoding behavior leads to WAF Bypass/information disclosure
- 简易电子密码锁设计
- hdu acm1049
- Chapter 7 Linking --- Object files and ELF format
- Java 希尔排序(缩小增量排序)
- 大家好。嗯。
- 临漳
- ORACLE学习总结—ROWID(转)
- 如何学习软件测试?How to study software testing?
- linux下oracle11g详细安装步骤(本人亲自安装后所写)