版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主要功能:当输入密码时,只显示“*”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色LED发光二极管亮一秒钟做为提示,;若密码不正确,禁止按键输入3秒,同时绿色发光二极管亮;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define KEY P3 /键盘输入端口#define No_key 20
2、60; /无按键时的返回值#define lcddata P2 /1602的数据输入端口sbit lcden= P12;sbit lcdrs= P10;sbit lcdrw= P11;sbit light= P13;sbit light1= P14;uchar j ; /用来统计输入 个数的全局变量uchar aa; /用来在定时器中计数的 全局变量 uchar code table= " Hello!"uchar code tab
3、le1=" OK! " ;uchar code table2="Enter please:" ;uchar code key_table16 = 1,2,3,10, 4,5,6,11, 7,8,9,12, 0,13,14
4、,15 ;uchar password=2,0,1,0,9,3 ; /设定初始密码uchar save6; /保存输入的数据uchar conflag ; /确认标志uchar lockflag;
5、0; /锁键盘标志uchar startflag; /开始标志 void delay(uint z); /延时子函数void wright_com(uchar com)
6、; /写指令函数void wright_data(uchar date) ; /写数据函数void init();
7、60; /初始化void display_OK(); / 显示OKvoid delete(); /删除输入的最后一个数uchar keyscan() ; /带返回值的键盘扫描程序void enter_code(uchar t); /输入密码函数,把输入的数据存入数
8、组中并在屏幕上显示相应的东西,void confirm(); /确认密码对不对,把输入的数据与密码逐一对比,完全一样刚正确,void succeed_an(); /输入密码成功时的 响应,void fail_an(); /输入密码 失败时 响应 void lockkey(); /锁键盘三秒void
9、 alarm(); /发出警报声void reset(); /复位函数void display_enter(); /显示输入void main(void) uchar temp; init(); while(1)
10、 if(lockflag) temp=keyscan(); / 锁键期间也要进行键盘扫描 if(temp!=No_key) /重新记时三秒 &
11、#160; aa=0; /重新在定时器中计数 else temp=keyscan(); /反复扫描输入,等待随时输入
12、0; if(temp!=No_key) /有按键按下才进行下面的操作 if(temp=10)
13、0; reset(); startflag=1; /开始标志置位 if(startflag)
14、; enter_code(temp); /每扫描一次键盘就要进行一次处理,保存输入的数值 if(temp=13) /按下确认键盘就要进行密码确认
15、; confirm(); /进行确认判断 if(conflag) /密码确认为正确
16、 succeed_an(); /密码正确,作出相应的反应 else
17、 fail_an(); /密码错误,作相应反应
18、0; if(temp=14) delete(); /作删除操作
19、60; /* 显示enter*/void
20、 display_enter() uchar num; wright_com(0x80);for(num=0;num<13;num+) wright_data(table2num); /* 显示OK*/void display_OK() uchar num;wright_com(0x80);for(num=0;num<13;num+)
21、60; wright_data(table1num); /* 删除最后一个*/void delete() wright_com(0x80+0x40+j); /确定删除对象wright_data(' '); /显示空格即为删除save-j=0; /删除后数据清零wright_com(0x80+0x40+j); /为下次输入数据时写好位
22、置,必须是在最后一个后面/* 对各种变量进行复位*/void reset()uchar num;display_enter();wright_com(0x80+0x40); /擦除屏幕上的显示for(num=0;num<6;num+) savenum=0; /对输入的数值进行清零 wright_data(' '); /显示的是空格 wright_com(0x80+0x40); /
23、下次再输入时可以又从起始位置输入lockflag=0; /各种变量要清零回起始状态conflag=0;j=0;/* 输入密码正确进行响应*/void succeed_an() light=0; /灯亮 display_OK(); /显示成功delay(1000);light=1; /灯灭 /* 输入密码错误进行响应*/void fail_an() alarm();
24、60; lockkey();/* 发出警报声*/void alarm() /这个以后再扩展它 /*锁键盘三秒*/void lockkey() lockflag=1;/*输入密码并在屏幕上显示星号*/void enter_code(uchar t)if(t>=0&&t<10)
25、60; if(j=0) wright_com(0x80+0x40) ; /第一输入时要先写入地址指令,否则无法显示 wright_data('*') ; else
26、0; wright_data('*') ;/不是第一个输入则不用再写地址 savej+=t; /保存输入的数据 /*校对密码以确定是不是正确的*/void
27、; confirm()uchar k;for(k=0;k<6;k+) if(passwordk!=savek) /对数组中的内容进行逐一比较,一旦有数据不对马上退出循环 break; if(k=6) /要是条件退出的话说明六个数全对密码 &
28、#160; conflag=1; / 进行标志密码正确 /*中断服务程序*/void timer0() interrupt 1 TH0=(65536-50000)/256;TL0=(65536-50000)%256; /重装初值if(lockflag)
29、60; aa+; light1=0; if(aa>=60) /三秒到了 aa=0; /清零可以方便下次再使用 light1=1; /关闭警报 lockflag=0; /标志清零解除键锁,方便下次使用 /*初
30、始化*/void init() uchar num; /*定时器初始化*/ TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1; /开启总中断TR0=1;/把定时器关闭/*1602初始化*/lcdrw=0; /这个必须要置 零,否则无法正常显示 lcden=0;wright_com(0x38) ; /初始化 wright_com(0x0c) ; /打开光标&
31、#160; 0x0c不显示光标 0x0e光标不闪,0x0f光标闪wright_com(0x01) ; /清显示wright_com(0x80) ;for(num=0;num<9;num+) wright_data(tablenum); delay(1); /*1602写入指令*/void wright_com(uchar com) lcdrs=0;lcddata=com;delay(1);lcden=1;delay(1)
32、;lcden=0;/*1602写入数据*/void wright_data(uchar date) lcdrs=1;lcddata=date;delay(1);lcden=1;delay(1);lcden=0;/*延时函数*/void delay(uint z) uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-) ;/*4x4矩阵键盘扫描函数*/uchar keyscan()
33、60; uchar temp,num=No_key; /num的初值要为无键盘按下时的返回值/*扫描第一行*/ KEY=0xfe; temp=KEY; temp=temp&0xf0; /读出高四位 while(temp!=0xf0)
34、; delay(5); /延时消抖 temp=KEY; temp=temp&0xf0; while(temp!=0xf0) /确认确实有按键按下
35、; temp=KEY; switch(temp) /根据这八个电平可以确定是哪个按键按下 case 0xee:num=1; break;
36、60; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=10;
37、60; break; while(temp!=0xf0) /等待松手 temp=KEY; temp=temp&0xf0;
38、 /*扫描第二行*/ KEY=0xfd; temp=KEY; temp=temp&0xf0; while(temp!=0xf0)
39、 delay(5); temp=KEY; temp=temp&0xf0; while(temp!=0xf0) temp=KEY;
40、160; switch(temp) case 0xed:num=4; break; case 0xdd:num=5; break;
41、 case 0xbd:num=6; break; case 0x7d:num=11; break; whi
42、le(temp!=0xf0) temp=KEY; temp=temp&0xf0;
43、; /*扫描第三行*/ KEY=0xfb; temp=KEY; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=KEY; temp=temp&a
44、mp;0xf0; while(temp!=0xf0) temp=KEY; switch(temp) case 0xeb:num=7;
45、0; break; case 0xdb:num=8 ; break; case 0xbb:num=9; break; case 0x7b:num=12; break; while(temp!=0xf0) temp=KEY; t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业安全生产常用管理制度、操作规程、台帐汇编(仅供参考)
- 社区医院“三重一大”决策制度实施办法
- 大学概率论习题及答案
- 2026年执业药师考试《药学专业知识一》真题及答案
- 湖北黄冈市高职单招语文试题含答案
- 黑龙江省齐齐哈尔市2026年某中学高一入学数学分班考试真题含答案
- 2026年甘肃定西社区工作者考试试题解析及答案
- 2025年山东(专升本)历史考试真题及答案
- 2026年度执业药师继续教育公需培训考试题库及答案
- 2025年超大型特厚板轧机合作协议书
- 2025年乡村规划师职业水平测试大纲试题及答案
- 2026年东营职业学院单招综合素质笔试参考题库含详细答案解析
- 2026年护理质控工作计划
- 皇家加勒比游轮介绍
- 煤矿春节后复工安全培训课件
- 如懿传十级测试题及答案
- IPC7711C7721C-2017(CN)电子组件的返工修改和维修(完整版)
- 智能图书馆与人工智能技术融合-洞察阐释
- 2025年安阳职业技术学院单招职业倾向性测试题库学生专用
- 2025中考复习必背初中英语单词1600打印版(上)
- 2025年国家药监局医疗器械技术审评检查大湾区分中心事业编制人员招聘5人历年高频重点模拟试卷提升(共500题附带答案详解)
评论
0/150
提交评论