单片机电子密码锁密码锁程序问题,看不懂有哪位大神解释一下

您现在的位置:&&>>&&>>&&>>&正文
单片机控制安全密码锁的设计(附程序,pcb,原理图)
来源:2BYSJ.cn
资料编号:2SJ568600 资料等级:★★★★★
%D7%CA%C1%CF%B1%E0%BA%C5%A3%BA2SJ568600
以下是大纲或介绍,如需要完整的资料请购买下载.
本资料已审核过,内容保密,格式标准,质量保证. 密&惠
1.无需注册登录,购买下载后即可获取该完整的资料.
2.购买后本站提供下载链接或联系客服发送资料.
控制安全密码锁的设计(附程序,pcb,原理图)(含开题报告,中期检查表,13900字)
摘 要:普通机械密码锁的密码容易被破译,因此其安全性已受到严重的威胁。而电子密码锁因为较安全可靠而具有广泛的应用前景。本文介绍的密码锁由矩阵键盘、AT89C2051、发光二极管显示和报警系统组成。系统能完成密码开锁、错误警示、超次锁定、密码修改等密码锁的基本功能。除上述密码锁的基本功能外,还具有掉电保护、远程报警等功能,该密码锁具有安全、实用、成本低等特点,符合住宅用锁的要求,具有一定的实用价值。
关键词: 密码锁 ; 2051 ; 远程报警;
Abstract: General machinery combination lock password is easy to crack, therefore its security has been a serious threat. While the electronic combination lock because more safe and reliable and has wide application prospects. This paper introduces the electronic keyboard, AT89C2051 by matrix combination lock MCU, leds display and alarm systems. System can accomplish password lock, error warning, super times lock, such as password changing the basic function of combination lock. In addition to the combination lock the basic function of the outside, still have off electrical protection, remote alarm functions, this combination lock is safe, practical and low costs, accord with the request, with lock residence is of certain practical value.
Key words: el AT89C2051 ; remote warning
研究目的:实现家庭防盗
研究内容:(1)完成与本课题有关的近期报道的论文及相关技术资料的查询与整理;
&&&&&&&&&&&&&&&& (2)完成密码锁电路设计及控制的线路原理图设计;并利用Protel完成硬件电路板的PCB图设计;
&&&&&&&&&&&&&&&& (3)完成相应的控制软件设计;
&&&&&&&&&&&&&&&& (4)完成该系统的硬、软件调试;
&&&&&&&&&&&&&&&& (5)完成论文的撰写工作(包括论文与中英文摘要)。
密码锁设计所具有的功能
(1) 可设置5位密码,密码两次输入相同方可确认开门;
(2) 修改密码必须在门内按修改键(用开关代替)且输入正确原密码后方可执行;
(3) 密码三次输入错误,会报警(预设远程报警);
(4) 附加正确钥匙时,可使用救急密码,以防密码忘记时急用;
(5) 掉电密码不丢失;
摘& 要&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1
关键词&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1
1引 言&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2
2 密码锁总体设计方案&&&&&&&&&&&&&&&&&&&&&&&&3
&&& 2.1 密码锁设计所具有的功能&&&&&&&&&&&&&&&&&&&&&3
&&& 2.2 方案的选择&&&&&&&&&&&&&&&&&&&&&&&&&&&3
&&& 2.3 密码锁系统基本结构&&&&&&&&&&&&&&&&&&&&&&&3
&&& 2.4 各个模块功能分析&&&&&&&&&&&&&&&&&&&&&&&&4
3 密码锁的硬件组成及其说明&&&&&&&&&&&&&&&&&&&7
&&& 3.1 电路原理&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
&&& 3.2 AT89C2051芯片的介绍&&&&&&&&&&&&&&&&&&&&&&8
&&& 3.3 键盘简介&&&&&&&&&&&&&&&&&&&&&&&&&&&12
&&& 3.4 AT24C02简介&&&&&&&&&&&&&&&&&&&&&&&&&14
&&& 3.5 MAX1232芯片的介绍&&&&&&&&&&&&&&&&&&&&&&&18
&&& 3.6 PCB制版&&&&&&&&&&&&&&&&&&&&&&&&&&&&20
4 密码锁的软件设计及相关说明&&&&&&&&&&&&&&&&&22
&&& 4.1 软件编程概述&&&&&&&&&&&&&&&&&&&&&&&&&22
&&& 4.2 系统资源分配&&&&&&&&&&&&&&&&&&&&&&&&&23
&&& 4.3 几个主要模块的流程&&&&&&&&&&&&&&&&&&&&&&25
&&& 4.4 24C02 E2PROM的读写程序&&&&&&&&&&&&&&&&&&&&31
&&& 4.5 4*4矩阵键盘处理程序&&&&&&&&&&&&&&&&&&&&&&32
5 系统调试和分析&&&&&&&&&&&&&&&&&&&&&&&&&34
&&& 5.1 硬件检测&&&&&&&&&&&&&&&&&&&&&&&&&&&34
&&& 5.2 软件部分的调试&&&&&&&&&&&&&&&&&&&&&&&&34
5.3 系统的优化与改进方案&&&&&&&&&&&&&&&&&&&&&34
6结 论&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&35
参考文献&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&35
致 谢&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&36
附 录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&37
下一篇电子信息毕业设计:后使用快捷导航没有帐号?
请完成以下验证码
查看: 2141|回复: 7
51单片机密码锁显示问题,求各位大神高人指点,小弟不甚感激!!!
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
//主程序代码
/*--------------------------------------------------------------*/
#include &reg52.h&
#include &LCD5510_V3.H&
#include &matrixkeyscan.c&
& & & & & & & & & & & & & & & & & & & & //密码位计数
uchar pw[6];& & & & & & & & & & & & & & & & & & & & //初始密码存储区
uchar pwbuf[6];& & & & & & & & & & & & & & & & & & & & //输入密码存储区
uchar selfdefinebuf[6];& & & & & & & & & & & & //自定义密码存储区
uchar error_& & & & & & & & & & & & & & & & //错误次数计数器
& & & & & & & & & & & & & & & & & & & & //确认键按下与否标志
& & & & & & & & & & & & & & & & & & & & & & & & //密码正确与否标志
bit last_& & & & & & & & & & & & & & & & //前一次密码输入正确与否标志
unsigned char code pic[] = {
//40*40的图片
0xFF,0x7F,0x1F,0x07,0x03,0x01,0x00,0x03,0x03,0x0F,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,
0xFF,0xFF,0xF3,0xF7,0xC7,0xCF,0x8F,0x1F,0x3F,0x7F,0xFF,0xFF,0xF7,0xE7,0xCF,0x0F,
0x01,0x83,0x83,0x03,0xC3,0xCF,0xDF,0xFF,0xFF,0xC0,0xE8,0xE4,0xE4,0xE4,0xC4,0xC4,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x0F,0x8F,0x9F,
0xDF,0xDE,0xFE,0xDD,0xFF,0xFF,0x3F,0x3F,0x3F,0xFC,0xFF,0x1F,0x1F,0x0F,0x0F,0x07,
0xFF,0xC1,0x1F,0x7D,0xF8,0xFD,0xFF,0xFF,0xBF,0x07,0x04,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x3F,0xFF,0xF1,0xF1,0xFF,0x7F,0x0F,0xFF,0x0F,
0x04,0x00,0x03,0xE7,0xC4,0x0E,0xAF,0xFF,0xFF,0xFF,0xFE,0xF8,0xE0,0xC0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x80,0xC0,0x60,0xF9,0xF8,0xFC,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,
0xC2,0x82,0x80,0x80,0x80,0x80,0xC0,0x60,0x60,0x20,0x30,0x18,0x08,0x0E,0x06,0x03,
0x01,0x00,0x00,0xAA,0xFF,0xFF,0xFF,0xFF};& &
//延时us 函数定义
void delay1s(void)
& & unsigned char i,j,k;
& & for(i=167;i&0;i--)
& & for(j=171;j&0;j--)
& & for(k=16;k&0;k--);
//初始化设置函数
void init_main()
& & & & count=0;& & & & & & & & & & & & & & & & & & & & & & & & //初始没有输入密码,计数器设为0
& & & & error_cnt=0;& & & & & & & & & & & & & & & & & & & & //错误次数归0
& & & & enterflag=0;& & & & & & & & & & & & & & & & & & & & //没有按下确认键
& & & & pwflag=0;& & & & & & & & & & & & & & & & & & & & & & & & //密码标志先置为0
& & & & last_pwflag=0;
& & & & /* 假设内定密码为123456, 修改初始密码可在这里改*/
& & & & pw[0]=1;
& & & & pw[1]=1;
& & & & pw[2]=1;
& & & & pw[3]=1;
& & & & pw[4]=1;
& & & & pw[5]=1;
bit pwcmp(void)& && && && && & //密码比较函数
& &for(i=0;i&6;i++)
& && &if(pw==pwbuf)
& & & && && &flag=1;
& & & && &else
& & & && &{
& & & && && & flag=0;
& & & & & & & && &i=6;
& & & & & & & && &error_cnt++;& & & && && &&&//错误次数加1
& & & && &}
& &return (flag);
/*--------------------------------------------------------------*/
void main(void)
& & uchar j,key,
& & & & uchar s=2;& && && & //指示*号显示的位置
& & LCD5510_Init();& & & && &&&//液晶初始化
& & & & Init();& & & && && && && & //初始化函数
& & init_main();& & & & & & & & //密码初始化
& & & & LCD_prints(0, 1, &WELCOME^_^&);
& & & & delay1s();& &delay1s();
& & & & LCD_clr_scr();& & & & & & & & //清屏
& & & & while(1)
& & & & & & & &&&if(error_cnt&=3)& && && && && && && && &//密码错误次数最多为3次
& & & & & & & &&&{
& & & & & & & & & & & & LCD_showsh(0, 0, &请输入密码&);& & & & & & & &&&//提示请输入密码
& & & & & & & && &&&key=matrixkeyscan();& && && && && &&&//调用键盘扫描函数
& & & & & & & & & & & & if(key&0 && key &=10)& && && && && & //用户输入密码
& & & & & & & & & & & & {
& & & & & & & & & & & && & if(key==10)
& & & & & & & & & & & && && & key=0;
& & & & & & & & & & & && & if(count&6)
& & & & & & & & & & & && & {
& & & & & & & & & & & && && & pwbuf[count]=
& & & & & & & & & & & & & & & && &LCD_printc(s, 1, '*');& && && &//用*号加密密码
& & & & & & & & & & & & & & & && &count++;
& & & & & & & & & & & & & & & && &s++;
& & & & & & & & & & & && & }
& & & & & & & & & & & & }
& & & & & & & & & & & & else if(key==11)& && && && && && && &//确认键按下
& & & & & & & & & & & & {
& & & & & & & & & & & && &&&enterflag=1;& && && && && && && &//确认键按下标志
& & & & & & & & & & & & & & & & if(count==6)& && && && && && && &//只有输入6个密码后,按确认键才作密码比较
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & && & delayms(80);
& & & & & & & & & & & & & & & && & pwflag=pwcmp();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & else
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & && &&&pwflag=0;& && && && && && &&&//否则直接pwflag赋0
& & & & & & & & & & & & & & & & & & & & error_cnt++;& && && && && &&&//错误次数加1
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & last_pwflag=& && && && &&&//前一次密码输入正确与否标志
& & & & & & & & & & & & & & & & enterflag=0;& && && && && && && &//标志位置回0
& & & & & & & & & & & & & & & & count=0;& && && && && && && && & //密码为计数器清零
& & & & & & & & & & & & & & & & delayms(80);
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & if(pwflag==1)& & & & & & & && && && && &&&//密码正确时
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & && & LCD_clr_row(0);& & & && && && && &&&//清除第1行
& & & & & & & & & & & & & & & && & LCD_clr_row(1);
& & & & & & & & & & & & & & & && & LCD_clr_row(2);& & & & & & & & & & & && && &//清除第2行
& & & & & & & & & & & & & & & && & LCD_clr_row(3);
& & & & & & & & & & & & & & & && & LCD_pos_picture(0, 0, 40, 40, pic);&&//显示40*40的图片
& & & & & & & & & & & & & & & && & LCD_showsh(3, 0, &密码&);
& & & & & & & & & & & & & & & && & LCD_showsh(3, 1, &正确&);& & & & & & & & & & & && &
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & && &&&else& & & && && && && && && && && &&&//密码错误时
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & && & LCD_clr_row(0);& & & && && && && &&&//清除第1行
& & & & & & & & & & & & & & & && & LCD_clr_row(1);
& & & & & & & & & & & & & & & && & LCD_clr_row(2);& & & & & & & & & & & && && &//清除第2行
& & & & & & & & & & & & & & & && & LCD_clr_row(3);
& & & & & & & & & & & & & & & && & LCD_prints(1, 0, &*WARNING*&);
& & & & & & & & & & & & & & & && & LCD_showsh(1, 1, &密码错误&);
& & & & & & & & & & & & & & & && & while(1)
& & & & & & & & & & & & & & & && & {
& & & & & & & & & & & & & & & & & & & && &&&beep();
& & & & & & & & & & & & & & & && & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & else if(key==12)& & & && && && && && && &//取消键按下
& & & & & & & & & & & & {
& & & & & & & & & & & && &&&count=0;& && && && && && && && & //密码计数清零
& & & & & & & & & & & & }
& && && && &else if(key==13)& && & & & & & & & & & & & & & & && && &//重设密码键按下
& & & & & & & && &&&{& && && && && && &
& & & & & & & && && &&&LCD_clr_row(0);& & & & & & & & & & & & & & & && && &//清除第1行
& & & & & & & & & & & && & LCD_clr_row(1);
& & & & & & & & & & & && & LCD_clr_row(2);& & & & & & & & & & & & & & & && && &//清除第2行
& & & & & & & & & & & && & LCD_clr_row(3);
& & & & & & & & & & & && & LCD_prints(2, 0, &Modify&);& & & & & & & &&&//显示可以修改密码了
& & & & & & & & & & & && & if(last_pwflag==1)& & & & & & & & & & & && && &//判断上次用户输入密码正确与否
& & & & & & & & & & & && & {
& & & & & & & & & & & && && & while(last_pwflag)
& & & & & & & & & & & & & & & && &{
& & & & & & & & & & & & & & & & & & & && & tempkey=matrixkeyscan();
& & & & & & & & & & & & & & & & & & & && & if(tempkey&0&&tempkey&=10)& && && &&&//用户输入密码
& & & & & & & & & & & & & & & & & & & && & {
& & & & & & & & & & & & & & & & & & & & & & & && &if(tempkey==10)
& & & & & & & & & & & & & & & & & & & & & & & && && & & &&&tempkey=0;
& & & & & & & & & & & & & & & &&&& & & && && & if(count&6)
& & & & & & & & & & & & & & & & & & & & & & & && &{
& & & & & & & & & & & & & & & & & & & & & & & && && &selfdefinebuf[count]=& & & & //存用户自定义密码
& & & & & & & & & & & & & & & & & & & & & & & & & & & &&&LCD_printc(s, 1, '*');& & & & & & & & & & & & //用*号加密密码
& & & & & & & & & & & & & & & & & & & & & & & && && &count++;
& & & & & & & & & & & & & & & & & & & & & & & & & & & &&&s++;
& & & & & & & & & & & & & & & & & & & & & & & && &}
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & else if(tempkey==11)& & & & & & & & & & & & & & & && &&&//确认键按下
& & & & & & & & & & & & & & & & & & & & {& & & &
& & & & & & & & & & & & & & & & & & & & & & & & enterflag=1;
& & & & & & & & & & & & & & & & & & & & & & & & if(count==6)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & && & for(j=0;j&6;j++)
& & & & & & & & & & & & & & & & & & & & & & & & & & & && & pw[j]=selfdefinebuf[j];& & & & & & & & //修改密码存储数组
& & & & & & & & & & & & & & & & & & & & & & & && & last_pwflag=0;
& & & & & & & & & & & & & & & & & & & & & & & && & enterflag=0;
& & & & & & & & & & & & & & & & & & & & & & & && & count=0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & & & & & else& & & & & & & & & & & && && && && && && && &//如果输入数据不足六位或大于六位,输入作废,重新输入
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & LCD_clr_row(2);& & & & & & & & & & & & & & & && & //清除第2行
& & & & & & & & & & & & & & & & & & & & & & & && &&&LCD_clr_row(3);
& & & & & & & & & & & & & & & & & & & & & & & && &&&LCD_prints(0, 1, &Your password is too long!&);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & LCD_prints(2, 1, &ERROR!&);& & & & & & & & //设置密码错误
& & & & & & & & & & & & & & & & & & & & & & & & & & & & count = 0;& & & & & & & & & & & & & & & & & & & & & & & & //密码计数清零
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & && &}
& & & & & & & && & & & & && & }
& & & & & & & && &&&}
& & & && && &}
& & & & & & & &&&else
& & & & & & & &&&{
& & & & & & & &&&& & & & while(1)
& & & & & & & & & & & & {& & & & & & & & & & & & & & & && && && && && && && && &
& & & & & & & & & & & && && &beep();& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //错误次数超过三次,停止工作蜂鸣器一直叫
& & & & & & & && &&&}
& & & & & & & &&&}& & & & & & & &
& & & & & & & &&&
& & & & & & & &&&keyscan();& &&&//独立按键扫描& & & && && &
& & & && && &LCD_printc(1, 2, (shi/10+0x30));
& & & & & & & &&&LCD_printc(2, 2, (shi%10+0x30));
& & & & & & & &&&LCD_printc(3, 2, ':');
& & & & & & & &&&LCD_printc(4, 2, (fen/10+0x30));
& & & & & & & &&&LCD_printc(5, 2, (fen%10+0x30));
& & & & & & & &&&LCD_printc(6, 2, ':');
& & & & & & & &&&LCD_printc(7, 2, (miao/10+0x30));
& & & & & & & &&&LCD_printc(8, 2, (miao%10+0x30));
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
以下是密码锁的代码和仿真图..
16:14 上传
点击文件名下载附件
83.38 KB, 下载次数: 9
密码锁代码
16:14 上传
点击文件名下载附件
45.84 KB, 下载次数: 10
密码锁仿真
楼主的问题是?&
楼主的问题是?&
在线时间9833 小时
威望185649分
芯币17863枚
TA的帖子TA的资源
回复 沙发 秋之伤 的帖子
楼主的问题是?
2017,加油!继续为中国电子行业做出小小的贡献吧!
在线时间9833 小时
威望185649分
芯币17863枚
TA的帖子TA的资源
回复 沙发 秋之伤 的帖子
楼主的问题是?
进行密码比较时,返回的flag值总是0,所以无法导致无法正确显示,我也参考了一些有关密码锁密码比较的程序,都基本是一样的,但就是不知道为什么返回值总是零,求大神指教...&
2017,加油!继续为中国电子行业做出小小的贡献吧!
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
进行密码比较时,返回的flag值总是0,所以无法导致无法正确显示,我也参考了一些有关密码锁密码比较的程序,都基本是一样的,但就是不知道为什么返回值总是零,求大神指教...
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
回复 4楼 soso 的帖子
进行密码比较时,返回的flag值总是0,所以无法导致无法正确显示,我也参考了一些有关密码锁密码比较的程序,都基本是一样的,但就是不知道为什么返回值总是零,求大神指教...
在线时间1545 小时
威望6518分
芯币24163枚
E金币400枚
TA的帖子TA的资源
if(pw==pwbuf)这句是在做地址比较,自然永远不等
请问大神应该怎样修改呢?是写成这样么:if(pw==(pwbuf+48))?&
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
回复 7楼 huo_hu 的帖子
请问大神应该怎样修改呢?是写成这样么:if(pw[I]==(pwbuf[I]+48))?
EEWORLD 官方微信
Powered by求基于51单片机的电子密码锁的C语言程序。急!!!!_百度知道
求基于51单片机的电子密码锁的C语言程序。急!!!!
我有更好的答案
//实例80:矩阵式键盘实现的电子密码锁#include&reg51.h&
//包含51单片机寄存器定义的头文件sbit P14=P1^4;
//将P14位定义为P1.4引脚sbit P15=P1^5;
//将P15位定义为P1.5引脚sbit P16=P1^6;
//将P16位定义为P1.6引脚sbit P17=P1^7;
//将P17位定义为P1.7引脚sbit sound=P3^7;
//将sound位定义为P3.7
//储存按键值/**************************************************************函数功能:延时输出音频**************************************************************/ void delay(void)
{ for(i=0;i&200;i++)
}/**************************************************************函数功能:软件延时子程序**************************************************************/ void delay20ms(void)
unsigned char i,j; for(i=0;i&100;i++) for(j=0;j&60;j++) }/**************************************************************函数功能:主函数**************************************************************/
void main(void) {
unsigned char D[ ]={0,8,0,8,7,4,11};
//设定密码
//开总中断 ET0=1;
//定时器T0中断允许
TMOD=0x01;
//使用定时器T0的模式1 TH0=()/256;
//定时器T0的高8位赋初值 TL0=()%256;
//定时器T0的高8位赋初值 TR0=1;
//启动定时器T0 keyval=0
//按键值初始化
while(keyval!=D[0])
//第一位密码输入不正确,等待
while(keyval!=D[1])
//第二位密码输入不正确,等待
while(keyval!=D[2])
//第三位密码输入不正确,等待
while(keyval!=D[3])
//第四位密码输入不正确,等待
while(keyval!=D[4])
//第五位密码输入不正确,等待
while(keyval!=D[5])
//第六位密码输入不正确,等待
while(keyval!=D[6])
//没有输入“OK”,等待
//P3.0引脚输出低电平,点亮LED}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/
void time0_interserve(void) interrupt 1 using 1
//定时器T0的中断编号为1,使用第一组寄存器
//关闭定时器T0
//所有行线置为低电平“0”,所有列线置为高电平“1”
if((P1&0xf0)!=0xf0)
//列线中有一位为低电平“0”,说明有键按下
delay20ms();
//延时一段时间、软件消抖
if((P1&0xf0)!=0xf0)
//确实有键按下
//第一行置为低电平“0”(P1.0输出低电平“0”)
if(P14==0)
//如果检测到接P1.4引脚的列线为低电平“0”
//可判断是S1键被按下
if(P15==0)
//如果检测到接P1.5引脚的列线为低电平“0”
//可判断是S2键被按下
if(P16==0)
//如果检测到接P1.6引脚的列线为低电平“0”
//可判断是S3键被按下
if(P17==0)
//如果检测到接P1.7引脚的列线为低电平“0”
//可判断是S4键被按下
//第二行置为低电平“0”(P1.1输出低电平“0”)
if(P14==0)
//如果检测到接P1.4引脚的列线为低电平“0”
//可判断是S5键被按下
if(P15==0)
//如果检测到接P1.5引脚的列线为低电平“0”
//可判断是S6键被按下
if(P16==0)
//如果检测到接P1.6引脚的列线为低电平“0”
//可判断是S7键被按下
if(P17==0)
//如果检测到接P1.7引脚的列线为低电平“0”
//可判断是S8键被按下
//第三行置为低电平“0”(P1.2输出低电平“0”)
if(P14==0)
//如果检测到接P1.4引脚的列线为低电平“0”
//可判断是S9键被按下
if(P15==0)
//如果检测到接P1.5引脚的列线为低电平“0”
//可判断是S10键被按下
if(P16==0)
//如果检测到接P1.6引脚的列线为低电平“0”
keyval=11;
//可判断是S11键被按下
if(P17==0)
//如果检测到接P1.7引脚的列线为低电平“0”
keyval=12;
//可判断是S12键被按下
//第四行置为低电平“0”(P1.3输出低电平“0”)
if(P14==0)
//如果检测到接P1.4引脚的列线为低电平“0”
keyval=13;
//可判断是S13键被按下
if(P15==0)
//如果检测到接P1.5引脚的列线为低电平“0”
keyval=14;
//可判断是S14键被按下
if(P16==0)
//如果检测到接P1.6引脚的列线为低电平“0”
keyval=15;
//可判断是S15键被按下
if(P17==0)
//如果检测到接P1.7引脚的列线为低电平“0”
keyval=16;
//可判断是S16键被按下
for(i=0;i&200;i++)
//让P3.7引脚电平不断取反输出音频
//开启定时器T0
TH0=()/256;
//定时器T0的高8位赋初值
TL0=()%256;
//定时器T0的高8位赋初值
采纳率:50%
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机电子密码锁 的文章

 

随机推荐