版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . . . #include <reg52.h>#define uint unsigned int#define uchar unsigned char#define KEY P3 /键盘输入端口#define No_key 20 /无按键时的返回值#define lcddata P2 /1602的数据输入端口sbit lcden= P12;sbit lcdrs= P10;sbit lcdr
2、w= P11;sbit light= P13;sbit light1= P14;uchar j ; /用来统计输入 个数的全局变量uchar aa; /用来在定时器中计数的 全局变量 uchar code table= " Hello!"uchar code table1=" OK! " ;uchar code table2="Enter please:" ;uchar code key_ta
3、ble16 = 1,2,3,10, 4,5,6,11, 7,8,9,12, 0,13,14,15 ;uchar password=2,0,1,0,9,3 ; /设定初始密码uchar save6;
4、160; /保存输入的数据uchar conflag ; /确认标志uchar lockflag; /锁键盘标志uchar startflag; /开始标志 void delay(uint z);
5、0; /延时子函数void wright_(uchar ); /写指令函数void wright_data(uchar date) ;
6、; /写数据函数void init(); /初始化void display_OK(); / 显示OKvoid delete();
7、160; /删除输入的最后一个数uchar keyscan() ; /带返回值的键盘扫描程序void enter_code(uchar t); /输入密码函数,把输入的数据存入数组中并在屏幕上显示相应的东西,void confirm(); /确认密码对不对,把输入的数据与密码逐一对比,完全一样刚正确,void succeed_an();
8、; /输入密码成功时的 响应,void fail_an(); /输入密码 失败时 响应 void lockkey(); /锁键盘三秒void alarm(); /发出警报声void reset(); /复位函数void display_enter()
9、; /显示输入void main(void) uchar temp; init(); while(1) if(lockflag) temp=keyscan(); / 锁键期间也要进行键盘扫描
10、0; if(temp!=No_key) /重新记时三秒 aa=0; /重新在定时器中计数
11、 else temp=keyscan(); /反复扫描输入,等待随时输入 if(temp!=No_key) /有按键按下才进行下面的操作 &
12、#160; if(temp=10) reset(); startflag=1; /开始标志置位
13、0; if(startflag) enter_code(temp); /每扫描一次键盘就要进行一次处理,保存输入的数值
14、; if(temp=13) /按下确认键盘就要进行密码确认 confirm(); /进行确认判断
15、0; if(conflag) /密码确认为正确 succeed_an(); /密码正确,作出相应的反应
16、160; else fail_an(); /密码错误,作相应反应 &
17、#160; if(temp=14)
18、; delete(); /作删除操作 &
19、#160; /* 显示enter*/void display_enter() uchar num; wright_(0x80);for(num=0;num<13;num+) wright_data(tabl
20、e2num); /* 显示OK*/void display_OK() uchar num;wright_(0x80);for(num=0;num<13;num+) wright_data(table1num); /* 删除最后一个*/void delete() wright_(0x80+0x40+j); /确定删除对象wrig
21、ht_data(' '); /显示空格即为删除save-j=0; /删除后数据清零wright_(0x80+0x40+j); /为下次输入数据时写好位置,必须是在最后一个后面/* 对各种变量进行复位*/void reset()uchar num;display_enter();wright_(0x80+0x40); /擦除屏幕上的显示for(num=0;num<6;num+)
22、0; savenum=0; /对输入的数值进行清零 wright_data(' '); /显示的是空格 wright_(0x80+0x40); /下次再输入时可以又从起始位置输入lockflag=0; /各种变量要清零回起始状态conflag=0;j=0;/* 输入密码正确进行响应*/void succeed_an() light=0; /灯亮 di
23、splay_OK(); /显示成功delay(1000);light=1; /灯灭 /* 输入密码错误进行响应*/void fail_an() alarm(); lockkey();/* 发出警报声*/void alarm() /这个以后再扩展它 /*锁键盘三秒*/void lockkey()
24、60; lockflag=1;/*输入密码并在屏幕上显示星号*/void enter_code(uchar t)if(t>=0&&t<10) if(j=0) wright_(0x80+0x40) ; /第一输入时要先写入地址指令,否则无法显示
25、; wright_data('*') ; else wright_data('*') ;/不是第一个输入则不用再写地址
26、; savej+=t; /保存输入的数据 /*校对密码以确定是不是正确的*/void confirm()uchar k;for(k=0;k<6;k+) if(passwordk!=savek) /对数组中的容进行逐一比较,一旦有数据不对马上退出循环
27、 break; if(k=6) /要是条件退出的话说明六个数全对密码 conflag=1; / 进行标志密码正确 /*中断服务程序*/void timer0() interrupt 1
28、 TH0=(65536-50000)/256;TL0=(65536-50000)%256; /重装初值if(lockflag) aa+; light1=0; if(aa>=60) /三秒到了 aa=0; /
29、清零可以方便下次再使用 light1=1; /关闭警报 lockflag=0; /标志清零解除键锁,方便下次使用 /*初始化*/void init() uchar num; /*定时器初始化*/ TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1; /开启总中断TR0=1;
30、/把定时器关闭/*1602初始化*/lcdrw=0; /这个必须要置 零,否则无常显示 lcden=0;wright_(0x38) ; /初始化 wright_(0x0c) ; /打开光标 0x0c不显示光标 0x0e光标不闪,0x0f光标闪wright_(0x01) ; /清显示wright_(0x80) ;for(num=0;num<9;num+) wright_data(tablenum);
31、 delay(1); /*1602写入指令*/void wright_(uchar ) lcdrs=0;lcddata=;delay(1);lcden=1;delay(1);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=
32、z;x>0;x-) for(y=110;y>0;y-) ;/*4x4矩阵键盘扫描函数*/uchar keyscan() uchar temp,num=No_key; /num的初值要为无键盘按下时的返回值/*扫描第一行*/ KEY=0xfe; temp=KEY; temp=temp&0xf0
33、; /读出高四位 while(temp!=0xf0) delay(5); /延时消抖 temp=KEY; temp=temp&0xf0;
34、0; while(temp!=0xf0) /确认确实有按键按下 temp=KEY; switch(temp) /根据这八个电平可以确定是哪个按键按下 &
35、#160; case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3;
36、160; break; case 0x7e:num=10; break; while(temp!=0xf0) /等待松手
37、0; temp=KEY; temp=temp&0xf0; /*扫描第二行*/ KEY=0xfd; temp
38、=KEY; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=KEY; temp=temp&0xf0; while(temp!=0xf0)
39、 temp=KEY; switch(temp) case 0xed:num=4; brea
40、k; case 0xdd:num=5; break; case 0xbd:num=6; break; case 0x7d:num=11;
41、0; break; while(temp!=0xf0) temp=KEY; temp=temp&0xf0; &
42、#160; /*扫描第三行*/ KEY=0xfb; temp=KEY; temp=temp&0xf0; while(temp!=0xf0)
43、 delay(5); temp=KEY; temp=temp&0xf0; while(temp!=0xf0) temp=KEY; switch(temp)
44、160; case 0xeb:num=7; break; case 0xdb:num=8 ; break;
45、 case 0xbb:num=9; break; case 0x7b:num=12; break; while(temp!=0xf0) temp=KEY; temp=temp&0xf0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度注册核安全工程师考试综合练习【各地真题】附答案详解
- 2024-2025学年临床执业医师复习提分资料及答案详解(有一套)
- 2024-2025学年度贵州建设职业技术学院单招数学常考点试卷(综合卷)附答案详解
- 2024-2025学年度执法资格考前冲刺试卷附答案详解(A卷)
- 2024-2025学年医师定期考核真题【历年真题】附答案详解
- 市场推广活动及预算确认函7篇范文
- 2024-2025学年医学检验(士)试题预测试卷附答案详解(巩固)
- 2024-2025学年度护士资格证通关题库附参考答案详解【基础题】
- 2024-2025学年农村信用社招聘考试检测卷附参考答案详解【A卷】
- 汽车维修店汽车发动机保养流程标准手册
- GJB9001C-2017国军标标准培训讲义
- 人教版数学一年级下册第一单元《十几减9》真题同步测试3(含解析)
- 校园网网络工程分析需求报告
- 《杀死一只知更鸟》读书分享PPT
- 级自制书119本13黑今天穿什么
- Premiere 认证题库(整理版)
- 01厨房组织人员管理篇
- 考研考博-英语-华东理工大学考试押题卷含答案详解1
- 胆囊切除术 胆总管切开取石术
- 灭火器消防栓检查维护记录表
- 儿童炎症性肠病
评论
0/150
提交评论