


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/防止PWLock.h被重复引用#ifndef _PWLOCK_H #defi ne _PWLOCK_H#in elude <reg52.h>#in clude <absacc.h>#i nclude <stdio.h>#in clude <math.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int uchar px;uint a;uint b;uint c;uint i;uchar digbit;uchar dy;uchar wordbuf2;uchar count;uch
2、ar pwbuf2;bit en terflag;bit lh;bit pwflag;bit showflag;sbit P20=P2A0;sbit P2仁卩2人1;void display(void);#en dif/为 OXFF/字位/字型码缓冲区/位计数/输入数字存储区/确认键按下与否标志/密码正确与否标志/数码管显示与否标志/显示函数/#i nclude "PWLock.h"/*键消抖延时函数 */void delay(void)uint i;for (i=4000;i>0;i-);/*键扫描函数*/uchar keysca n( void)uchar sca
3、 ncode,tmpcode;/发全0行扫描码/若有键按下/延时去抖动/延时后再判断一次,去除抖动影响P1 = 0xf0;if (P1 &0 xf0)!=0xf0)delay();if (P1 &0 xf0)!=0xf0)sca ncode = 0xfe;逐行扫描/while(sca ncode&0x10)!=0)/输出行扫描码本行有键按下P1 = scancode;if (P1 &0 xf0)!=0xf0) tmpcode = (P1 &0 xf0)|0x0f;/*返回特征字节码,为1的位即对应于行和列*/retur n( sca ncode)+(tm
4、pcode);/行扫描码左移一位else sea ncode = (sea ncode<<1)|0x01;/无键按下,返回值为 0return(0);/*定时器0中断服务子程序,2ms定时动态扫描显示 */ void time0n t(void) in terrupt 1/*重置2ms定时*/TH0 = -2000/256;TL0 = -2000%256;px+;片选if (showflag=1)display();/调用显示函数/*根据共阴极字型编码表获取09,AB字型代码*/uchar getcode(uchar i)uchar p;switch (i)case 0:p=0x3
5、f; break;/* 0 */case 1:p=0x06; break;/* 1 */case 2:p=0x5B;break;/* 2 */case 3:p=0x4F; break;/* 3 */case 4:p=0x66; break;/* 4 */case 5:p=0x6D;break;/* 5 */case 6:p=0x7D;break;/* 6 */case 7:p=0x07; break;/* 7 */case 8:p=0x7F; break;/* 8 */case 9:p=0x67; break;/* 9 */default:break; return(p);void Displ
6、ay(void) /LED 数值显示switch (px%2)case 0:P20 = 1;P21 =0; P0 =getcode(wordbuf0);break;case 1:P21 = 1;P20 =0; P0 =getcode(wordbuf1);break;default:return;/*显示函数 */*void display(void)uchar i;switch (digbit)case 1:i=0; break;case 2:i=1; break;default: break;P2 = 0x0;/关闭显示/P20=0;/P21=0;P0 = getcode(wordbufi)
7、;/ 送字型码P2=digbit;/送字位码digbit=1;if(digbit=1)digbit=2;P20 = 1;P21 = 0;digbit=2;P21 = 1;P20 = 0;if (digbit<0x02)共 2 位digbit = digbit*2;/ 左移一位elsedigbit = 0x01;*/ /*主程序*/void mai n()uchar j,key;uint temp;P20 = 1;P21 = 1;TMOD = 0x11;/* 2ms定时设置*/TH0 = -2000/256;TL0 = 2000%256;/*启动计数器0,关闭计数器TR0 = 1;ET0
8、= 1;TR1 = 0;ET1 = 1;EA = 1;count = 0;en terflag = 0;lh = 0;pwflag = 0;digbit = 0x01;/*刚加电时,bu显示*/for (j=0;j<2;j+)wordbufj = 17;showflag = 1;while(1)key = keysca n();switch(key)1 */case 0x11:/关闭数码管显示/ T0, T1工作方式1/初始计数器设为0/没有按下确认键/标志先置为0/从第一位数码管开始动态扫描/打开数码管显/调用键盘扫描函数/ 1行1列,数字1if (cou nt<2)wordbu
9、fco unt = 1; pwbufco unt = 1; if(co un t=0) a=1;if(co un t=1)b=1;coun t+;/对应位上显示 “ 1break;case 0x21:if (cou nt<2)wordbufco unt = 2; pwbufco unt = 2;if(co un t=0)a=2;if(co un t=1)b=2;coun t+; break;case 0x41:if (cou nt<2)wordbufco unt = 3; pwbufco unt = 3;if(co un t=0)a=3;if(co un t=1)b=3;coun
10、t+; break;case 0x12:if (cou nt<2)wordbufco unt = 4; pwbufco unt = 4;if(co un t=0)a=4;if(co un t=1)b=4;coun t+; break;case 0x22:if (cou nt<2)I11行2列,数字3/对应位上显示“ 2"II 1行3列,数字3II对应位上显示“ 3"II 2行1列,数字4II对应位上显示“ 4"II 2行2列,数字5wordbufco unt = 5; pwbufco unt = 5; if(co un t=0)a=5;if(co un
11、 t=1)b=5;coun t+; break;case 0x42:if (cou nt<2)wordbufco unt = 6; pwbufco unt = 6; if(co un t=0)a=6;if(co un t=1)b=6;coun t+; break;case 0x14:if (cou nt<2)wordbufco unt = 7; pwbufco unt = 7; if(co un t=0)a=7;if(co un t=1)b=7;coun t+; break;case 0x24:if (cou nt<2)wordbufco unt = 8;/对应位上显示“ 5
12、"II2行3列,数字6/对应位上显示 “6"II 3行1列,数字7II对应位上显示“ 7"II 3行2列,数字8II对应位上显示“ 8"pwbufco unt = 8; if(co un t=0) a=8;if(co un t=1) b=8; coun t+; break;case 0x44:if (cou nt<2)wordbufco unt = 9; pwbufco unt = 9; if(co un t=0)a=9;if(co un t=1) b=9; coun t+; break;case 0x18:count = 0;P3=0;px=0;
13、for (j=0;j<2;j+)wordbufj = 17; pwbufj = 0;break;case 0x28:if (cou nt<2)wordbufco unt = 0; pwbufco unt = 0; if(co un t=0)II 3行3列,数字9/对应位上显示“9"II 4行1列,数字*II显示清零II数码管不显示II用FFFFFF清除已经输入的密码II 4行2列,数字0II对应位上显示“ 0"a=0;if(coun t=1)b=0;coun t+;/ 4行3列,数字#/确认键按下/只有输入2个数后按确认键才有效输break;case 0x48:en terflag = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度高级管理人员竞业禁止合同
- 农业生产资金投入与财务管理手册
- 开幕式致辞与未来发展展望报告
- 员工年终工作总结报告模板集萃
- 互联网广告投放及推广合作协议
- 农业生产投入品减量增效技术指导手册
- 农业产业扶贫政策及项目申报指导手册
- 智能家居技术研发推广合作协议
- 健身房客户服务手册
- 健身房健身器材租赁合同
- 环保监测设备运维服务
- 医德医风考评内容及量化考评标准
- 小学信息技术-第8册全册-6年级下-电子工业出版社
- 《网络攻击与防御》课件第四章 基于系统的攻击与防御
- 供电一把手讲安全课
- JTG∕T F30-2014 公路水泥混凝土路面施工技术细则
- 建设工程施工专业分包合同(GF-2003-0213)
- 司法心理学课件
- 耳鼻喉科各项规章制度
- 湖南科技职业学院单招职业技能测试参考试题库(含答案)
- 玻璃分化板制作工艺
评论
0/150
提交评论