4×4键盘及8位数码管显示构成的电子密码锁33要点
4×4 键盘在 8×8LED点阵上的应用课程设计 更新

目录第1章设计任务及功能要求................. 错误!未定义书签。
1.1设计课程任务................................. 错误!未定义书签。
1.2 功能要求说明................................ 错误!未定义书签。
第2章实验方案及原理..................... 错误!未定义书签。
2.1 实验目的..................................... 错误!未定义书签。
2.2 实验设备..................................... 错误!未定义书签。
2.3 实验要求..................................... 错误!未定义书签。
2.4 实验原理..................................... 错误!未定义书签。
2.5 硬件连接图................................... 错误!未定义书签。
第3章程序流程图 ........................ 错误!未定义书签。
3.1 主程序流程图................................. 错误!未定义书签。
3.2 键值的程序流程图............................. 错误!未定义书签。
第4章实验心得与体会..................... 错误!未定义书签。
参考文献................................. 错误!未定义书签。
附录..................................... 错误!未定义书签。
第1章设计任务及功能要求1.1设计课程任务4×4 键盘在 8×8LED点阵上的应用1.2 功能要求说明给4×4键盘的每个键定义一个功能,其中把定义为0~9的键盘称为数字键,把定义成DEL的键称为删除键,把定义成ENT的键成为确认键,其他键称为保留键。
电子密码锁设计要求

电子密码锁设计要求
单片机课程设计项目系列:
基于单片机控制的电子密码锁
一.设计要求
(一)基本功能
1.状态显示功能:
锁定状态时系统用3位数码管显示OFF,用3位数码管显示成功开锁次数;成功开锁时用3位数码管显示888,用3位数码管显示成功开锁次数。
2.密码设定功能:
通过一个4×4的矩阵式键盘可以任意设置用户密码(1-16位长度),同时系统掉电后能自动记忆和存储密码在系统中。
3.报警和加锁功能:
密码的输入时间超过12秒或者连续3次输入失败,声音报警同时锁定系统,不让再次输入密码。
此时只有使用管理员密码方能对系统解锁。
(二)扩展功能
可增加遥控控制功能
二.计划完成时间三周
1.第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。
2.第二周完成软件的具体设计和硬件的制作。
3.第三周完成软件和硬件的联合调试。
单片机原理与应用课程设计题目

单片机原理与应用课程设计题目符号说明:★越多表示题目难度越大*表示扩展要求任务@表示创新设计加分任务★--------------一般难度★★-----------中等难度★★★--------较高难度一、题目汇总:1.彩灯控制器的设计★2.电子时钟的设计★3.现代交通灯的设计★★4.多路抢答器的设计★★5.波形发生器的设计★★6.点阵广告牌的设计★★★7.篮球记分器的设计★★8.数字式温度计的设计★★9.步进电机的控制★★10.电子音乐盒的设计★★11.电风扇模拟控制系统设计★12.洗衣机人机界面的设计★★13.秒表系统的设计★14.多机串行通信的设计★★★15.电子密码锁的设计★★★16.4位数加法计算器的设计★★★17.定时闹钟的设计★★18.人行道电子指示屏的设计★★二、选题说明:3名同学组成一个设计小组,每个小组选择1个题目,同一班级内选同一题目的不能超过3个设计小组,选相同题目的小组在设计内容、方法上要有所区别,严禁抄袭。
小组内部队员进行分工合作,共同致力于设计任务的完成,任务后括号内的数字表示分值,要求每名同学在设计完成后都能明白硬件原理及程序的含义。
三、设计要求:题目中没有特别提示的,要求自行焊接单片机最小系统板和外围接口电路,不能使用现成的开发板和模块。
题目一:彩灯控制器的设计★设计任务:1. 用16盏以上的LED小灯,实现至少4种彩灯灯光效果(不含全部点亮,全部熄灭;(30)2. 可以用输入按钮在几种灯光效果间切换;(20)3. 可以通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前的效果。
(10)4* 增加自动在几种效果间切换的功能,并设置一个按钮可以在自动模式和手动模式间切换。
(10)5* 使用定时中断延时(10)6@ 实现其他除1~5中提到的功能(创新部分)(20)设计提示:1.LED可以采用共阳极或共阴极接法直接接在并行口,也可以用8255扩展更多的小灯。
2.多种效果可以放在不同的子程序空间中,主程序通过散转来访问不同的子程序段。
电子密码锁设计

{
case 0x0010: KeyVal=13; break;
case 0x0020: KeyVal=9; break;
case 0x0040: KeyVal=5; break;
case 0x0080: KeyVal=1; break;
}
GPIO_Write(GPIOA,(GPIOA->ODR&0xfff0|0x8)); switch(GPIOA->IDR&0x00f0)
图1.2 stm32控制方案
通过比较以上两种方案stm32有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
初步设计思路如下:
基于以上思路,本次设计使用stm32设计,其主要具有如下功能:
密码通过键盘输入,若密码正确,则将锁打开。
{
case 0x0010: KeyVal=12; break;
case 0x0020: KeyVal=8; break;
case 0x0040: KeyVal=4; break;
case 0x0080: KeyVal=0; break;
}
return KeyVal;
}
void Delay(__IO uint32_t nCount)//简单的延时函数
密码的设定,假设预设的密码为"123456"共6位密码。
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。
4×4键盘及8位数码管显示构成的电子密码锁

1.用4×4组成0-9数字键及确认键。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”声;若密码不正确,禁止按键输入3秒,同时发出“嘀、嘀”报警声;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
(此句在下面程序中需要再按下ENTER键方有效)2.电路原理图图4.33.13.系统板上硬件连线(1).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。
(2).把“单片机系统“区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。
(3).把“单片机系统”区域中的P3.0-P3.7用8芯排线连接到“4×4行列式键盘”区域中的R1R2R3R4C1C2C3C4端子上。
(4).把“单片机系统”区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L2端子上。
(5).把“单片机系统”区域中的P1.7用导线连接到“音频放大模块”区域中的SPK IN 端子上。
(6).把“音频放大模块”区域中的SPK OUT接到喇叭上。
4.程序设计内容(1).4×4行列式键盘识别技术:有关这方面内容前面已经讨论过,这里不再重复。
(2).8位数码显示,初始化时,显示“P ”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。
在输入密码过程中,显示器只显示“8.”。
当数字输入超过6个时,给出报警信息。
在密码输入过程中,若输入错误,可以利用“DEL”键删除刚才输入的错误的数字。
(3).4×4行列式键盘的按键功能分布图如图4.33.2所示:图4.33.25.C语言源程序#include <AT89X52.H>unsigned char ps[]={1,2,3,4,5}; //设定的密码unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x73,0xff}; unsigned char dispbuf[8]={18,16,16,16,16,16,16,16}; unsigned char dispcount;unsigned char flashcount;unsigned char temp;unsigned char key;unsigned char keycount;unsigned char pslen=5;unsigned char getps[6];bit keyoverflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa,bb;unsigned int cc;bit okflag;bit alarmflag;bit hibitflag;unsigned char oka,okb;void main(void){unsigned char i,j;TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;ET0=1;EA=1;while(1){P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=10;i>0;i--)for(j=248;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;key=9;break;case 0x07:key=10;break;}temp=P3;P1_1=~P1_1;//后面也有,貌似无用if((key>=0) && (key<10)){if(keycount<6){getps[keycount]=key;dispbuf[keycount+2]=19; //前两位已经用于显示“P ”}keycount++;if(keycount==6){keycount=6;}else if(keycount>6){keycount=6;keyoverflag=1; //key overflow 输入密码长度超过}}else if(key==12) //delete key{if(keycount>0){keycount--;getps[keycount]=0; //最近1次数入的数值清0dispbuf[keycount+2]=16;}else{keyoverflag=1; //未输入密码,按到功能键,报错!嘀一声。
基于单片机的电子密码锁毕业论文设计

本科毕业设计(论文)题目基于单片机的电子密码锁设计院(系部)河北大学专业名称电子信息工程年级班级学生姓名指导教师2011年月日摘要本课题设计了一种基于单片机的数字电子密码锁,这种数字电子密码锁以单片机作为数据处理主控芯片。
电子密码锁的设计主要由四部分组成:4×4矩阵键盘接口电路、以AT89S52芯片为核心的密码锁的数据处理及控制电路、掉电情况下依然能保存密码的EEPROM存储器芯片,输出七段显示电路。
另外系统还有LED提示灯,报警蜂鸣器,单片机复位电路等。
电子密码锁设计的关键问题是实现密码的输入、清除、开锁、更改等功能。
同时该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅,办公室等场所的用锁要求,具有推广价值。
关键词单片机密码锁 4*4矩阵键盘 EEPROM存储芯片实用经济AbstractThis project designed a digital electronic lock which used a MCU as data process and control chip. The main functions digital electronic lock are as follows:The design of the electronic password lock is mainly made up of four parts: 4×4 matrix keyboard interface circuit, data processing and control circuit, eeprom memory chip that is used to keep password when the lock loses power and display circuit. In addition the system also consists of LED lights, alarm buzzers, single-chip reset circuit and so on..The key question of the electronic lock designing is the realization of functions, such as the input password, clear password, unlock, change password and other functions.And the designed cipher lock is characterized by its reasonable designing methods, simple operation, low cost and property of safety and practicality.Besides,it works well as a residence lock and has great potential for commercial development.Key words: SCM Cipher lock 4*4matrix keyboard EEPROM Practical economy目录1 绪论 (1)1.1国内外研究综述 (1)1.2选题的目的和意义 (2)1.3本论文的任务 (3)2电子密码锁总体设计 (4)2.1系统总体设计 (4)2.2单片机 (5)2.3密码存储芯片选择 (10)2.4键盘输入方案比较 (12)2.5显示方案比较 (13)3电子密码锁的硬件设计 (1)3.1系统结构框图 (1)3.2主控部分 (2)3.3显示部分 (3)3.4键盘输入部分 (4)3.5密码存储部分 (5)3.6电源部分 (5)3.7其它功能部分 (8)3.8 电子密码锁的电路原理图 (10)4电子密码锁的软件组成 (12)4.1系统软件设计流程 (12)4.2 Keil uVision2软件介绍 (13)4.3各主要部分的功能实现程序设计 (14)4.3.1初始化程序设计 (14)4.3.2按键处理程序设计 (17)4.3.3密码更改程序设计 (21)5系统仿真 (24)5.1系统仿真过程 (24)5.2仿真调试中遇到的问题及解决办法 (25)总结 (1)致谢 (2)参考文献 (3)附录 (4)1 绪论1.1国内外研究综述在电子锁出现以前人们广泛的使用机械锁,但是随着时间的推移机械锁已不能满足人们的要求,于是电子锁应用而生。
任务一密码锁按键值显示全解

行线输出 列线输入 0111 1111
1 1
1 1
1 1
0 1 1 1
1011 1101 1110
1110 1111 1111
②行列式键盘的基本驱动函数
/**************按键扫描子函数***********/ /*说明 该程序要求每2ms左右执行一遍 */ /**可在定时中断中调用,也可在主程序中循环调用**/ #define uchar unsigned char #define KEYIO P1//定义按键的IO口 void key() { static uchar kv=0xff ,ts=0; KEYIO=0xf0;//键盘IO口高4位置1,低4位置0 if(KEYIO!=0xf0) //输入不是全"1",说明有键按下 { if(ts<11)ts++;//ts累加,防止ts加过256 if(ts==10) // ts等于10即20ms时取一次键值(延时去抖)
• 使用YL-236单片机实训考核装置实现 密码锁按键值显示功能,具体要求如下 : • 1.使用指令模块中行列式4×4键盘 作为密码锁的输入。 • 2.使用显示模块的4位数码管单元显 示密码锁按键键值。 • 3.上电后,数码管无显示,按下行 列式4×4键盘的任意键,左边两个数码 管显示按键的键值(键值参考左表)。
硬件电路的设计与搭建
1、硬件电路设计 2、绘制模块接线图
3
C
3
C
0
0
3
2
P
P
10μF
C
1
11.0592MHz
1
R
0
1
k
+5V
4×4矩阵键盘的工作原理与编程

4×4矩阵键盘的工作原理与编程ME300B单片机学习开发系统应用之三---4×4矩阵键盘的工作原理与编程作者:山西太原贵国庆本文介绍如何在ME300B型51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。
一、硬件工作原理的简单介绍该实验使用ME300B上的8位数码管显示电路和4×4矩阵键盘电路。
现将这二部分的电路工作原理进行简单的介绍:1、4×4矩阵键盘的工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
图1为ME300B矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。
地显示。
图3 数码管电路数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。
在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。
见图3二、演示程序的编程方法1、4×4矩阵键盘的编程方法:1.1、先读取键盘的状态,得到按键的特征编码。
先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。
再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。
将两次读取结果组合起来就可以得到当前按键的特征编码。
使用上述方法我们得到16个键的特征编码。
举例说明如何得到按键的特征编码:假设“1”键被按下,找其按键的特征编码。
单片机程序设计—电子密码锁

目录目录 (1)中文摘要 (2)第一章概述 (5)第二章系统总体方案设计 (6)第三章硬件电路设计 (10)3.1键盘电路设计 (10)3.2 LED显示电路 (12)3.3 开锁警电路 (15)第四章软件设计 (17)4.1 软件设计思路 (17)4.2各子程序设计 (17)第五章系统调试 (22)第六章心得体会 (23)第七章参考文献 (24)附录 (25)源程序清单 (25)中文摘要摘要:在日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣,随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁得使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐替代传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的只能密码锁,它除了具有电子密码锁的功能外,还引进了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是,这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
基于以上思路,本次设计使用ATMEL公司的AT89C51实现—基于单片机的电子密码锁的设计,其主要具有如下功能:密码通过键盘输入,若密码正确,则将锁打开。
电子技术课程设计报告 电子密码锁_图文【完整版】

电子技术课程设计报告电子密码锁_图文【完整版】(文档可以直接使用,也可根据实际需要修订后使用,可编辑放心下载)电子技术课程设计报告设计课题:电子密码锁电子密码锁一、引言随着人们生活水平的提高,人们对自己的生活有了越来越高的要求,贵重物品也越来越多,而传统的机械平安锁由于其构造的简单,被撬被盗事件在我们身边经常发生,使我们的财产以及人身平安存在很大的平安隐患,这致使我们寻求更好的平安措施。
电子锁由于其保密性高,使用灵活性好,平安系数高,受到了广阔用户的喜爱。
而且密码锁的形式多样,有声控密码锁,电子密码锁等,社会上大多使用电子按键密码锁。
本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够平安工作,具有较高的平安系数。
要求电子器件设计制作密码锁的控制电路,使之在规定的时间内输入正确的密码时,输出信号以开启密码锁,否那么报警电路报警。
本设计用红、绿LED指示关锁、开锁状态和报警状态。
二、设计任务1、密码锁控制器中存储一个4位代码,当锁按钮开关设置8位〔其中只有4位有效〕的输入代码等于存储代码时启动开锁控制电路,并且用绿灯亮表示开锁状态。
2、从第一个按钮触动后的15秒内假设未能将锁翻开,那么报警电路发报警信号,同时用绿灯灭表示关锁状态。
3、要求性能可靠、操作简便。
4、密码锁控制器中存储的4位密码可以修改。
5、分析部件见工作原理,绘制电路图,进行仿真制作实物并撰写设计报告。
三、设计方案方案一:用开关控制可控硅整端口的电压变化即导通,按依次按下四个开关,其功能相当于给可控硅一个高电平触发,四个可控硅整流器依次导通,整条回路导通,发光二极管亮,而发光二极管亮即表示输入的密码为正确密码,电路到达密码锁开锁功能。
设计8位按键只有4位是正确的,如果按下4位伪码的其中一位即按下的其中一个或几个,控制报警电路可控硅导通。
此时开锁局部悬空,报警报警方案二;采用STC89C52单片机为芯片主体,采用AT24C08为掉电存储器的芯片,用单片机的P1口作为接4 ×4 键盘按键的检测按键,P0口实现数码管的按键显示,以及错误信息,单片可以进行位操作,P2口组成报警电路,密码修改电路和AT24C08的掉电保护等其他相关功能。
51单片机设计电子锁密码锁含代码

电子锁设计报告一,实验目的1. 学习8051定时器时间计时处理,键盘扫描及LED数码管显示的设计方法。
2. 设计任务及要求利用实验平台上8个LED数码管,设计带有报警功能的可掉电保存的电子密码锁。
3.通过本次实验,加强对所学知识的理解,增强编程能力及实践能力。
二,实验要求A.基本要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。
2:可以自行设定或删除8位密码,能够掉电保存。
3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
4:自由发挥其他功能.5:要求有单片机硬件系统框图,电路原理图,软件流程图B.拓展部分:无三,实验基本原理单片机密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。
本系统考虑到单片机密码锁成本及体积因素,在设计单片机密码锁部分时,以AT89S52单片机为核心,24C04、LED等构成外围电路。
本系统单片机密码锁硬件部分结构简单、成本低,软件部分使用电子加密提高锁的安全性,具有比较好的市场前景。
同时,由于本电子密码锁可以实现掉电保存,而且可以自行设计或者删除8位密码,所以具有较高的实用价值。
本密码锁采用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led 发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led 发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
此项功能方便用户使用。
四乘四键盘控制LED数码管显示电路.doc要点

四乘四键盘控制LED数码管显示电路目录一、设计内容及要求 (2)二、系统硬件设计方案 (2)三、系统软件设计 (8)四、效果演示 (12)摘要矩阵式键盘系统以N个端口链接控制N*N个按键,使数字显示在LED数码管上。
单片机控制的是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备的硬件、软件等各个部分进行实现。
对于4*4矩阵式键盘,我想采用STC89C52RC单片机为核心,主要由矩阵式键盘电路、译码器、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
一、设计内容及要求用protues仿真设计一个单片机小系统,该小系统外接一个4*4键盘及一个LED数码管,要求按下一个键,数码管上显示该键的对应号码。
键盘的布局如下图所示:主要内容如下:1.根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计。
2.LED实时显示信息。
3.采用软件编程方法实现按键信息的提取和显示。
二、系统硬件设计方案1.芯片的选择STC89C52RC单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带8K字节可编程FLASH存储器,拥有2K+字节的EEPROM作为程序存储器的拓展。
由于STC89C52RC具有下图中的配置,因此具有结构简单、造价低廉、效率高的特点,省去了外部的RAM、ROM和接口器件,减少了硬件的开销,节省了成本,提高了系统的性价比。
STC89C52RC的主机系统图:STC89C52RC的实物图:2.系统原理图2.1时钟电路时钟电路用来提供单片机片内各种位操作的时间基准。
51单片机芯片内部有一个高增益反相放大器,用于构成时钟振荡电路,XTAL1为该放大器的输入端、XTAL2为该放大器的输出端。
借助内部时钟方式或外部时钟方式形成时钟。
实验报告四位数电子密码锁

四位数电子密码锁一,实验目的1.学习查找相关资料,并对小型项目开发有一定的认识;2.掌握能进行模块化设计的能力;3.学会对各部分电路,进行讨论、说明与仿真验证,最后在整合起来。
二,硬件要求1、拨位开关。
2、FPGA主芯片:EP1K30QC208。
3、LED显示模块。
4、4*4键盘。
5、七段数码管三,实验原理通过对4×4键盘进行扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。
键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配。
两功能键:在开锁状态时,一个用于清除数字,一个用于激活电锁。
在上锁状态,一个用于清除,一个用于解除电锁。
四、实验内容及步骤1、编写4*4数字密码锁的VHDL代码。
2、用MaxPlusII对其进行编译仿真。
3、在仿真确定无误后,选择芯片ACEX1K EP1K30QC208。
4、给芯片进行管脚绑定,在此进行编译。
5、根据自己绑定的管脚,在实验箱上对键盘接口、显示接口和FPGA之间进行正确连线。
6、给目标板下载代码,在4×4键盘输入键值,观看实验结果。
五、程序代码及说明LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL ;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;LIBRARY altera; ----这是利用库编译成的去拌电路。
电子密码锁课程设计100703

来自传感器接口的报警信息也发送给智能监控器,作为智能化分析的依据。
2)系统硬件组成如图(一)所示,系统采用单片机ATC89C51作为控制的核心,完成系统的控制操作。
单片机核心接受来自键盘扫面电路的道德键值,判断是数字键还是操作键,并送相应的处理程序。
单片机提供动态扫描电路的显示码和位选信号,使动态显示电路正常工作。
键盘扫面电路采用4*4键盘,编号0~9做为数字键“0~9”,编号14做为关锁操作功能键,编号15做为确定功能键。
编号13为修改密码键,编号12作为电子锁报警后的解锁键,编号11为清除显示屏键。
动态扫描电路采用4块LED数码管,利用人眼的延迟效应通过合理的软件设计使显示电路显示数字。
供电采用5V直流电压电源3)矩阵键盘扫描工作原理矩阵式键盘又成为行列式键盘,是将I/O线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,如图(四)所示。
这种设计减少键盘与单片机I/O接线的数目。
只需要N个行线和M个列线就可以实现N*M个键的操作。
行扫描法识别键值的原理:A.将第0 行变为低电平,其余行为高电平,输出编码为1110.然后读取列的电平,判别第0行是否有键按下。
在第0行上若有键按下,则相应的列被拉低为低电平,则表示第0行和此列相交的位置上有键按下,进而判别哪一列有键按下。
若没有任一条列线为低电平,则说明0行上无键按下。
B.用此方法扫描第1行,第2行,第3行,判断是哪个键按下。
由此指出,按键的位置码比不等于按键的实际定义键值,因此还需要进行转换。
4) LED数码管动态显示原理将所有的位选线并联在一起,由一个8位I/O口控制,实现各位的分时选通。
如图(五)所示。
5)电子密码锁系统硬件设计1、键盘部分如图(四)所示,采用行列式键盘,P1口作为与行列式键盘的接口。
低四位做为行选线,高四位作为列选线。
采用逐行扫描的方法完成。
2、LED动态显示部分采用7SEG-MPX4-CC 八段数码管,总共有四个八段数码管,共阴极的方法,未选信号为低电平有效。
51单片机C语言实验及实践教程1

51单片机C语言实验及实践教程第一章:硬件资源模块第二章:keil c 软件使用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅1.闪烁灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅2.模拟开关灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅3.多路开关状态指示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅4.广告灯的左移右移at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅5.广告灯(利用取表方式)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅6.报警产生器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅7.I/O并行口直接驱动LED显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅8.按键识别方法之一at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅9.一键多功能按键识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅10.00-99计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅11.00-59秒计时器(利用软件延时)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅12.可预置可逆4位计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅13.动态数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅14.4×4矩阵式键盘识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅15.定时计数器T0作定时应用技术(一)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅16.定时计数器T0作定时应用技术(二)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅17.99秒马表设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅18.“嘀、嘀、……”报警声at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅19.“叮咚”门铃at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅20.数字钟(★)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅21.拉幕式数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅22.电子琴at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅23.模拟计算器数字输入及显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅24.8×8LED点阵显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅25.点阵LED“0-9”数字显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅26.点阵式LED简单图形显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅27.ADC0809 A/D转换器基本应用技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅28.数字电压表at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅29.两点间温度控制at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅30.四位数数字温度计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅31.6位数显频率计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅32.电子密码锁设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅33.4×4键盘及8位数码管显示构成的电子密码锁at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅34.带有存储器功能的数字温度计-DS1624技术应用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅35DS18B20数字温度计使用第一章AT89S51单片机实验及实践系统板简介AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。
电子设计竞赛设计报告之电子密码锁,单片机(含详细原理,proteus图和c程序)

创新教育设计题目报告电子密码锁摘要:电子密码锁系统使用led灯、数码管、矩阵键盘和24C04芯片,模拟电子密码锁的功能,可以实现密码输入,密码设置,错误报警和密码掉电存储等功能。
关键字:键盘,数码管,24C04设计题目及要求:(1)用4×4矩阵键盘组成0-9数字键及确认键和删除键。
(2)可以自行设定或删除5位密码,能够掉电保存。
(3)用5位数码管组成显示电路提示信息,当输入密码时,只显示"8.",当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
(4)自由发挥其他功能.(5)要求有单片机硬件系统框图,电路原理图,软件流程图。
一、系统方案:1、方案:1)显示部分:采用8位共阴数码管的动态扫描方式,可以输入和设置六位密码。
2)控制部分:键盘使用逐行扫描的方式输入密码,并在数码管上显示相应的数字,或者正确或错误的提示。
掉电存储由24C04芯片实现,遵循IIC协议。
2、总体方案:1)2)二、单元电路:1、单片机电路2、led电路:3、24C04电路:4、矩阵键盘电路:三、算法原理:1、键盘扫描:先检测P3口是否等于0xf0,检测是否有按键按下,并加入消抖功能,接着依次对P3口赋0xfe,0xfd,0xfb,0xf7,逐行扫描,并且检测是否有值变化,检测有变化的一行,返回相对应的值,实现对4×4键盘按键的检测。
2、24C04与I2C总线协议串行E2PROM 是基于I2C-BUS 的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。
I2C 总线定义I2C(Inter-Integrated Circuit)总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。
用图文并茂形式记录小发明

用图文并茂形式记录小发明题目:基于51单片机的电子密码锁设计名称:电子密码锁一、目的概述(收集相关资料、选设计方案、电路设计):本设计是以STC89C52单片机为控制核心的电子密码锁,属于单片机的应用。
做本设计有助于对单片机矩阵键盘,数码管以及串行通信原理的深入了解。
电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。
系统设计方案为:(1)系统设置6 位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可由用户自己设定,在开锁状态下,用户可自行修改密码。
(3)具有自动报警功能,密码输入错误时,报警由扬声器发出“滴滴”报警声。
而密码输入正确则是“叮咚”声。
系统设计结构图:本设计由主控芯片51单片机,单片机时钟电路,键盘,数码管组成。
单片负责控制整个系统的控制执行过程。
开锁成功由数码管显示OPEN,以及蜂鸣器“叮咚”表示,开锁失败由数码管显示Err,以及蜂鸣器“滴滴”表示。
二、实验原理图电路设计:程序设计:(只展示核心部分)主程序1.//4×4 键盘及8 位数码管显示构成的电子密码锁2.void main() //主程序3.{4. uchar key;5. Timer0_Init();6.while(1)7. {8. key = KeyScan();9. password(key);10. }11.}核心程序:数码管的动态扫描显示12.void Display()13.{14. uchar i;15. Segment_sel=0x00;//消隐16.switch(i) //位选,选择点亮的数码管,17. {18.case(0):19. LSA=0;LSB=0;LSC=0; break;20.case(1):21. LSA=1;LSB=0;LSC=0; break;22.case(2):23. LSA=0;LSB=1;LSC=0; break;24.case(3):25. LSA=1;LSB=1;LSC=0; break;26.case(4):27. LSA=0;LSB=0;LSC=1; break;28.case(5):29. LSA=1;LSB=0;LSC=1; break;30. }31.}核心程序:矩阵键盘的扫描输入32.uchar KeyScan()33.{34.for(i=0;i<8;i++)35. {36. P1 = P1Pin[i];37. Button = P1;38.if(Button != P1Pin[i])39. {40. Delayms(5);41. Button = P1;42.if(Button != P1Pin[i])43. {44. KeyState=1;45. key8 = Button;46. }47.while(Button != P1Pin[i])48. { Button = P1; }49. }50. }51.switch(key8)52. {53.case 0x77:{key = 1;break;}54.case 0x7b:{key = 2;break;}55.case 0x7d:{key = 3;break;}56.case 0xb7:{key = 4;break;}57.case 0xbb:{key = 5;break;}58.case 0xbd:{key = 6;break;}59.case 0xd7:{key = 7;break;}60.case 0xdb:{key = 8;break;}61.case 0xdd:{key = 9;break;}62.case 0xeb:{key = 0;break;} //063.case 0x7e:{key = 10;break;} //÷64.case 0xbe:{key = 11;break;} //×65.case 0xde:{key = 12;break;} //+66.case 0xee:{key = 13;break;} //-67.case 0xed:{key = 14;break;} //=68.case 0xe7:{key = 15;break;} //ENTER69.default:{key = 0xff;break;}70. }71.return key;72.}核心程序:输入密码以及校对和处理73.void password(uchar key)//0~9 数字键,10 输入密码,11 设置密码,12 删除上一个数,13 重新输入 15 确定74.{75. uchar i=0;76.if(KeyState==1)77. {78.switch(state)79. {80.case 0:81. {82.if(key == 10)83. {84. state = 1;85. LSA=1;LSB=1;LSC=1;86. Segment_sel=0xff; //显示887. }88.else if(key == 11)89. {90. state = 2;91. LSA=1;LSB=1;LSC=1;92. Segment_sel=0xfd; //显示P93. }94.break;95. }96.case 1:97. {98.if(key>=0 && key <= 9) //输入99. {100. InPassword[5]=InPassword[4];101. InPassword[4]=InPassword[3];102. InPassword[3]=InPassword[2];103. InPassword[2]=InPassword[1];104. InPassword[1]=InPassword[0];105. InPassword[0]=smgduan[key];106. KeyState=0;107. }108.else if(key == 15) //确定109. {110.if(Compare(InPassword))111. {112.for(i=17;i<23;i++)113. InPassword[i]=smgduan[i]; 114. Delayms(1000);115. }//open116.else117. {118.for(i=23;i<27;i++)119. InPassword[i]=smgduan[i]; 120. Delayms(1000);121. }//err122. state = 0;123. }124.else if(key == 13) //重新输入125. {126.for(i=0;i<6;i++)127. InPassword[i] = 0xff; // 全亮128. Delayms(1000);129. state = 0;130. }131.break;132. }133.else//如果没有按键按下134. {135.if(state == 0)136. {137. Segment_sel= 0x00;// 不显示138. }139. }140.}四、设计成果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
33.4×4键盘及8位数码管显示构成的电子密码锁1.实验任务用4×4组成0-9数字键及确认键。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”声;若密码不正确,禁止按键输入3秒,同时发出“嘀、嘀”报警声;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
2.电路原理图图4.33.13. 系统板上硬件连线(1).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH 端子上。
(2).把“单片机系统“区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。
(3).把“单片机系统”区域中的P3.0-P3.7用8芯排线连接到“4×4行列式键盘”区域中的R1R2R3R4C1C2C3C4端子上。
(4).把“单片机系统”区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L2端子上。
(5).把“单片机系统”区域中的P1.7用导线连接到“音频放大模块”区域中的SPK IN 端子上。
(6).把“音频放大模块”区域中的SPK OUT 接到喇叭上。
4. 程序设计内容 (1).4×4行列式键盘识别技术:有关这方面内容前面已经讨论过,这里不再重复。
(2). 8位数码显示,初始化时,显示“P ”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。
在输入密码过程中,显示器只显示“8.”。
当数字输入超过6个时,给出报警信息。
在密码输入过程中,若输入错误,可以利用“DEL ”键删除刚才输入的错误的数字。
(3). 4×4行列式键盘的按键功能分布图如图4.33.2所示:图4.33.25. C 语言源程序#include <A T89X52.H>unsigned char ps[]={1,2,3,4,5};unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x73,0xff}; unsigned char dispbuf[8]={18,16,16,16,16,16,16,16};unsigned char dispcount;unsigned char flashcount;unsigned char temp;unsigned char key;unsigned char keycount;unsigned char pslen=5;unsigned char getps[6];bit keyoverflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa,bb;unsigned int cc;bit okflag;bit alarmflag;bit hibitflag;unsigned char oka,okb;void main(void){unsigned char i,j;TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;ET0=1;EA=1;while(1){P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=10;i>0;i--)for(j=248;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;}temp=P3;P1_1=~P1_1;if((key>=0) && (key<10)){if(keycount<6){getps[keycount]=key;dispbuf[keycount+2]=19;}keycount++;if(keycount==6){keycount=6;}else if(keycount>6){keycount=6;keyoverflag=1;//key overflow}}else if(key==12)//delete key{if(keycount>0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}else if(key==15)//enter key{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i<keycount;i++){if(getps[i]!=ps[i]){i=keycount;errorflag=1;rightflag=0;second3=0;goto a;}}errorflag=0;rightflag=1;i=keycount;}}temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}keyoverflag=0;//?????????}}P3=0xff;P3_5=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=10;i>0;i--)for(j=248;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;}temp=P3;P1_1=~P1_1;if((key>=0) && (key<10)){if(keycount<6){getps[keycount]=key;dispbuf[keycount+2]=19;}keycount++;if(keycount==6){keycount=6;}else if(keycount>6){keycount=6;keyoverflag=1;//key overflow}}else if(key==12)//delete key{if(keycount>0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}else if(key==15)//enter key{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i<keycount;i++){if(getps[i]!=ps[i]){i=keycount;errorflag=1;rightflag=0;second3=0;goto a4;}}errorflag=0;rightflag=1;a4: i=keycount;}}temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}keyoverflag=0;//?????????}}P3=0xff;P3_6=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=10;i>0;i--)for(j=248;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;}temp=P3;P1_1=~P1_1;if((key>=0) && (key<10)){if(keycount<6){getps[keycount]=key;dispbuf[keycount+2]=19;}keycount++;if(keycount==6){keycount=6;}else if(keycount>6){keycount=6;keyoverflag=1;//key overflow}}else if(key==12)//delete key{if(keycount>0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}else if(key==15)//enter key{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i<keycount;i++){if(getps[i]!=ps[i]){i=keycount;errorflag=1;rightflag=0;second3=0;goto a3;}}errorflag=0;rightflag=1;a3: i=keycount;}}temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}keyoverflag=0;//?????????}}P3=0xff;P3_7=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=10;i>0;i--)for(j=248;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;}temp=P3;P1_1=~P1_1;if((key>=0) && (key<10)){if(keycount<6){getps[keycount]=key;dispbuf[keycount+2]=19;}keycount++;if(keycount==6){keycount=6;}else if(keycount>6){keycount=6;keyoverflag=1;//key overflow}}else if(key==12)//delete key{if(keycount>0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}else if(key==15)//enter key{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i<keycount;i++){if(getps[i]!=ps[i]){i=keycount;errorflag=1;rightflag=0;second3=0;goto a2;}}errorflag=0;rightflag=1;a2: i=keycount;}}temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}keyoverflag=0;//?????????}}}}void t0(void) interrupt 1 using 0{TH0=(65536-500)/256;TL0=(65536-500)%256;flashcount++;if(flashcount==8){flashcount=0;P0=dispcode[dispbuf[dispcount]];P2=dispbit[dispcount];dispcount++;if(dispcount==8){dispcount=0;}}if((errorflag==1) && (rightflag==0)){bb++;if(bb==800){bb=0;alarmflag=~alarmflag;}if(alarmflag==1)//sound alarm signal{P1_7=~P1_7;}aa++;if(aa==800)//light alarm signal{aa=0;P1_0=~P1_0;}second3++;if(second3==6400){second3=0;errorflag=0;rightflag=0;alarmflag=0;bb=0;aa=0;}}else if((errorflag==0) && (rightflag==1)){P1_0=0;cc++;if(cc<1000){okflag=1;}else if(cc<2000){okflag=0;}else{errorflag=0;rightflag=0;P1_7=1;cc=0;oka=0;okb=0;okflag=0;P1_0=1;}if(okflag==1){oka++;if(oka==2){oka=0;P1_7=~P1_7;}}else{okb++;if(okb==3){okb=0;P1_7=~P1_7;}}}if(keyoverflag==1){P1_7=~P1_7;}}。