红外遥控密码锁设计方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红外遥控密码锁
1.绪论
1.1本系统设计意义以及目的
随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到冶金、电力、建材、化工、机械、石油、食品等各个行业。
单片机控制无疑是人们追求的目标之一,它所给人们带来的方便也是不可否认的其中单片机控制就是一个典型的例子。
MCS-52系列单片机应用广泛,是学习单片机技术较好的系统平台,同时也是单片机微型计算机应用系统开发的一个重要系列。
目前,单片机原理与应用教材大都采用汇编语言讲解和设计程序实例,但汇编语言学习困难。
在实际应用系统开发调试中,特别是开发比较复杂的应用系统时,为了提高开发效率和使程序便于移植,现在多用C语言。
在信息产业飞速发展的今天,我们生活中必不可需的设备都向着小型化、便携化、智能化、自动化的方向发展。
所以电子密码锁随着快节奏的生活应运而生。
在我国六七十年代还是传统的一把钥匙配一把锁,不管是单位还是个人每天都要认真检查是否锁上了门,而且钥匙还不能随便乱放,一旦不小心忘记放在哪里很可能就打不开门了。
传统的锁也相当的不安全,会有一些不法分子想尽办法打开你的房锁去偷盗东西。
电子密码锁的产生使得这些问题都不再是问题,我们只需简单的记住六位密码即可。
人们从前使用的锁不但不方便,而且安全系数也比较低。
随着社会的进步和人们生活水平的提高,老式的锁已经跟不上人们的要求,况且人们对防盗的要求越来越高,特别是对使用的便捷性也有了更高的需求。
因此近几年一种新型的电子密码锁应运而生,受到了人们的青睐。
有报警功能的密码锁这时正为人们解决了不少问题。
但是市场上的密码锁大部分都是用于一些大公司财政机构、价格高昂,一般人们难以接受。
如果再设计和生产一种价格低廉、性能灵敏可靠的密码锁,必将在防盗和保证财政安全方面发挥更加有效的作用。
密码锁是现代生活中经常用到的工具之一,广泛应用于保险柜、房门、宾馆、车库等。
电子密码锁克服了机械式密码锁量少、安全性能差的缺点,特别是使用单片机控制的智能电子密码锁,不但功能全,而且具有更高的安全性和可靠性。
并且电子密码锁只需记住一组密码,无需携带钥匙,免除了人们携带钥匙的烦恼,被越来越多的人所喜欢。
随着我国第三产业的飞速发展,电子密码锁会在不久的将来得到广泛的应用,方便社会和个人。
1.2红外密码锁的发展趋势
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,同时可靠性提高,成本也相对提高,所以只适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对密码锁的研究一直没有明显进展。
到了90年代,美国、意大利、德国、日本、加拿大、韩国以及我国的台湾、香港等地的微电子技术的进步和通信技术的发展为密码锁提供了技术上的支持,从而推动密码锁走向实际应用的阶段。
目前,在西方国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,使之更加安全更加可靠实现大门的管理。
我国于90年代初期开始对密码锁进行初步的探索。
到目前为止,随着电子技术和信息技术的发展,电子密码锁的技术领域已发展的十分成熟。
从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。
在其他技术领域还有遥控式电子密码锁以及卡片式密码锁等。
2.设计方案简述
2.1 本系统基本结构
本系统采用以单片机为核心元件的控制方案。
由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以获得最佳的性价比。
一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些方面外,还有一些最基本的条件,比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。
在开发过程中还要考虑开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等因素。
基于以上因素本设计选用单片机AT89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接LCD1602显示器用于显示作用。
其原理如下图1所示。
图1单片机控制方案
2.2本系统方案和器件选型方案论证
2.2.1本系统方案论证
目前大部分的锁采用的都是机械式的,其最大的缺点是利用简单工具就能很容易地把锁打开。
针对这种情况,我们设计了一种红外遥控密码锁,而一般设备都采用专用的遥控编码及解码集成电路,其制作简单、容易,但由于特定功能的限制,只适用于专用的电器产品,其应用范围受到限制。
而设计的红外遥控密码锁系统能提高门禁系统的可靠性和安全性,适应市场需要。
该系统具有普通电子密码锁功能的同时,还增加了遥控功能。
该系统具有较强的实际应用价值,所涉及的技术包括:红外载波数据传输技术、单片机控制技术、红外遥控系统编码及译码技术、电路设计与演示板制作技术等。
2.2.2本系统器件选型方案论证
主要的设计实施过程:首先,选用ATMEL公司的单片机AT89C52,以及选购其他电子元器件。
第二步,使用PROTEL99完成原理图,并设计PCB图完成人工布线(后因PCB板损坏决定采用万能板焊接的方法)。
第三步,使用Keil uVision3软件编写单片机的C语言程序、仿真、软件调试。
第四部,使用PROTEUS软件进行模拟软、硬件调试。
最后,联合软、硬件调试电路板,完成本次设计。
3.详细设计
3.1本系统硬件电路概述
本系统硬件电路设计包括单片机最小系统的设计,以及红外遥控的设计,液晶显示部分的设计,还有电源部分的设计,以下是系统的整体框图:
3.2 系统硬件各模块设计简介
3.2.1主控芯片AT89S51
在本设计中选用 ATMEL 公司的 AT89C52单片机作为主控芯片。
它是一款低功耗,AT89C52就是一款广泛应用的,高性能CMOS 8位单片机,由于系统控制方案简单,数据量也不大,考虑到电路的简单和成本等因素,因此在本设计中选用 ATMEL 公司的 AT89S51单片机作为主控芯片。
主控模块采用单片机最小系统是由于 AT89C52芯片内含有8 B的 E2PROM ,无需外扩存储器,电路简单可靠,其时钟频率为 0~24 MHz,并且价格低廉,批量价在 10元以内。
AT89C52是一款功能强大的微型计算机,它可为许多嵌入式控制应用系统提供高性价比。
单片机的最小系统是由复位电路、时钟电路和电源组成。
复位操作有上电自动复位、按键复位和外部脉冲复位3种方法。
本文采用的是上电复位它是通过系统外部的复位电路来实现的。
根据电路原理可知电容两极板间的电压不能突变当单片机电源接通电源的瞬间单片机的9管脚会产生一个阶跃信号,所以RTS端维持高电平由于这个充电时间远远大于1ms,一般就可以实现对单片机的上电自动复位,即接通电源就完成了系统的初始化。
初始化是为了让单片机从地址0000H开始执行, 除此之外单片机要想正常工作还必须有时钟电路,时钟电路是产生时序的基础,单片机每执行一条指令都是建立在时序电路上的,为了能保证单片机执行指令的同步,电路就要在唯一的时钟信号控制下按时序的先后进行工作。
它分为内部时钟电路和外部时钟电路。
本文采用的是内部时钟电路,在MCS—51单片机的内部有一个高增益的反向放大器,其输入端为引脚XTAL1,输出端为XTAL2,只要在外部接上两个电容和一个晶振,就能够成一个稳定的自激振荡器。
这里主要看一下电容和晶振的选择,晶振的大小与单片机的振荡频率有关,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常选择10~30pF的瓷片电容。
本系统电容选择为33pF,晶振为12MHz之所以选择这一频率的晶振是为了在进行单片机与电脑进行串口通信时容易产生和电脑时钟同步的波特率,另外在设计电路时,晶振和电容应尽可能的靠近芯片,这样可以提高系统的抗干扰能力,电源部分,电源与地之间可以接一个0.1uF的电容,它用来滤除电源的纹波,使单片机稳定工作,单片机最小系统如图3-1所示。
单片机引脚说明:VCC:电源电压输入端。
GND:电源地。
P0口:P0口是一个8位漏极开路双向I/O端口,每个引脚可以吸收8TTL门电流。
P0口当作数据输出时需要加上拉电阻,当P0口的I/O口被写“1”后,被定义为高阻抗输入状态。
P0可以用于外部程序数据存储器,P0口可以是地址的低八位以及数据输出口。
P1口:P1口是一个8位双向的I/O端口单片机内部加上了上拉电阻的端口,P1口缓冲器可接收的4TTL栅极电流输出。
P1口的I/O口被写“1”后,内部上拉的是高的,可以作为输入,P1口外部下拉低时输出电流,这是因为有内部上拉的缘故。
P2口:P2口是一个8位双向的I/O端口单片机内部加上了上拉电阻的端口,P2口缓冲器可接收的4TTL栅极电流输出。
当P2口的I/O口被写“1”后,内部上拉的是高的,可以作为输入,P2口外部下拉低时输出电流,这是因为有内部上拉的缘故。
当P2口用于外部程序存储器或外部数据存储器时P2口是地址高八位输出。
P3口:P3口是一个8位双向的I/O端口单片机内部加上了上拉电阻的端口,P3口缓冲器可接收的4TTL栅极电流输出。
P3口的I/O口被写“1”后,内部上拉的是高的,可以作为输入,P3口外部下拉低时输出电流,这是因为有内部上拉的缘故。
P3口除了普通I/O口功能,还有其第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(T0定时器的外部计数输入)
P3.5 T1(T1定时器的外部计数输入)
P3.6 /WR(外部数据存储器的写选通)
P3.7 /RD(外部数据存储器的读选通)
RST:复位引脚高电平时MCU复位,复位信号输入端口,当MCU要复位时,给与此引脚高电平,高电平持续时间是不少于两个机器周期的时间。
ALE/PROG:地址锁存使能以及编程脉冲信号端口。
当单片机访问外部的存储器时,地址锁存使能锁存地址低八位。
通常情况下,ALE引脚输出单片机外部振荡器的频率的1/6的频率输出。
应该注意到的是:当用于单片机扩展外部的数据存储器时,它会少一个ALE脉冲。
如果你想禁止ALE输出可以设置为0在SFR8EH地址。
此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
此外,ALE引脚倍稍微拉高。
如果微处理器在外部执行状态ALE的禁令,设置无效。
PSEN:程序存储器允许输出控制端,在读外部程序存储器时PSEN低电平有效,以实现外部程序存储器单元的读操作。
EA/VPP:外部程序存储器访问允许。
当/EA接高电平时,单片机读取内部程序序存储器,当扩展有外部ROM时,当读完内部ROM后自动读取外部ROM,当/EA接低电平时,单片机直接读取外部程序存储器。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端。
XTAL2:片内振荡器反相放大器的输出端。
3.2.2红外模块HX1838
红外数据传输的特点:成本廉价、建设工程期短、适应性好、扩展性好、设备维护上更容易实现。
使用红外模块进行传输,丰富了系统的功能,提高了系统的可操作性,因而达到了交互式与智能化。
红外数据传输广泛地运用在红外遥控系统和车辆的监控、门禁系统、小区的安全防火系统和传呼系统、身份的识别、非接触RF的智能卡等。
工业设备中,在高压,辐射、有毒气体、粉尘等环境下,采用红外遥控不仅完全可靠而且能有效地隔离电气干扰。
一体化红外线接收头三个管脚分别是地、+5 V电源、解调信号输出端接在单片机P3.3引脚上。
利用外部中断进行数据的接收。
下图3-5为红外模块硬件结构。
图 3-5红外模块硬件结构
红外线接收器大都将信号的接受、放大、检波等集于一身,而且可以经过编码解码时单片机收到可识别的信号源。
这样一来便会减少硬件设计过程中的麻烦,使电路简单化,且应用起来比较方便。
下图为红外一体化接受头HX1383,因为其性价比较高,且易于购得,外观图如图所示。
图3-6红外接收元器件
3.2.3显示模块LCD1602
如果想要了解系统的运行与工作状态显示器是不可缺少的,显示器是一个典型的输出设备并且它的实际应用也是极为广泛的,几乎所有的电子产品都会使用到显示器其差别仅在于显示器的结构类型不同而已。
最简单的显示器可以是LED发光二极管或者数码管,它可以给出一个简单的开关信息或者数字显示,而需要显示复杂的完整的信息上述的器件就不能胜任,而液晶的出现就很好的解决了这一问题,它不仅显示内容丰富而且好节约了单片机的管脚资源。
本设计采用的是液晶显示LCD1602。
LCD1602内部的字符已经储存了不同的字符形式,每一个字符都有一个固定的代码,其代码与标准的ASCII字符代码一致。
因此只要写入显示字符的ASCII码即可,这种标准化的设计给使用带来很大的方便。
比如英文字母“C”的ASCII代码是01000011(43H),显示时单片机往液晶模块写入显示指令,模块就会把地址为43H中的点阵字符图形识别出,并会在液晶屏相应位置上看到字母“C”。
LCD1602液晶显示与单片机的连接可以分为两种方式:总线方式和模拟口线方式。
在实验中,我们常采用模拟口线连接方式。
如图3-7所示。
图3-7 显示模块硬件结构
目前市场字符液晶绝大多数是基于HD44780的液晶芯片,控制原理是完全相同的,因此基于HD44780的写控制程序可以很容易地应用到市场上大部分的字符液晶。
LCD1602液晶的几个特性:+5V电压、对比度可调、内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有160个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM。
LCD1602采用标准的16脚接口,其中VSS为地电源,VDD接5V正电源,VEE为液晶显示器。
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作。
E端为使能端。
D0~D7为8位双向数据线。
3.3本系统主程序设计流程框图
4.设计结果及分析
4.1 本系统硬件调试
本系统在硬件设计阶段,利用的是仿真软件对硬件进行的仿真的,在软件仿真中通过了。
电路焊好之后,我们在真正的硬件上进行调试,经过多次调试,终于通过了。
4.2 本系统调试
本系统软件部分是用C语言开发的,用C语言开发单片机有如下的优势
C语言是一种编译型的结构化程序设计语言,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。
用C语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统。
其优势如下:
(1)可以大幅度加快开发进度,程序量越大,用C语言就越有优势。
(2)无需精通单片机指令集和具体的硬件,也能够编出符合硬件实际专业水平的程序。
(3)可以实现软件的结构化编程,使得软件的逻辑结构变得清晰、有条理、便于开发小组计划任务、分工合作。
源程序的可读性和可维护性都很好。
(4)省去了人工分配单片机资源的工作,在汇编语言中要为每一个子程序分配单片机的资源。
在使用C语言后,只要在代码中申明一下变量的类型,编译器就会自动分配相关资源,根本不需要人工干预,从而有效地避免了人工分配单片机资源的差错。
(5)汇编语言的可移植性很差,而C语言只要将一些与硬件相关的代码作适当的修改,就可以方便地移植到其它种类的单片机上。
(6)C语言提供auto、static、flash等存储类型,针对单片机的程序存储空间、数据存储空间及EEPROM空间自动为变量合理地分配空间,而且C语言提供复杂的数据类型,极大地增强了程序处理能力和灵活性。
C编译器能够自动实现中断服务程序的现场保护和恢复,并且提供常用的标准函数库,供用户使用。
并且C编译器能自动生成一些硬件的初始化代码。
(7)对于一些复杂系统的开发,可以通过移植(或C编译器提供)的实时操作系统来实现。
正由于C语言在系统开发中的优势,这次设计的所有程序设计都将采用C 语言编写。
5.总结
本次课程设计我们组做的是红外遥控密码锁,采用了51单片机、红外接收模块和液晶显示模块。
利用红外遥控器输入密码的正确与否控制密码锁的开关。
这次课程设计中,我共遇到了三个问题。
一个是测试时液晶屏亮度不够,后来查阅各种相关资料和其他组的电路图,发现是液晶屏的正负极没有与电源单独相连。
第二个是液晶屏的对比度很低,后来发现用华东变阻器的1、3端分别连接电源正负极即可调整对比度。
第三个问题是临场答辩前,电路板跳线脱落,
后来是同组的杨国栋同学帮忙借来电烙铁和焊锡丝,才当场重新焊接好,非常感谢他。
通过这次实验,我最大的感悟是,只有通过自己思考,自己排版,自己动手,才能真正掌握电子的知识。
推广开来,即是“实践出真知”。
另外老师提出了很多实用性建议,比如加入电机模拟锁的开关而非仅仅液晶显示等,让我知道一切应该归于运用。
还有就是要自己努力思考而非只是借助网上固有的资料来学习和做成成品,感谢老师的教诲。
\
参考文献
[1]. 陈玻若 . 红外系统. 普通高等教育兵工类规划教材 1995
[2]. 郭天祥. 新概念51单片机C语言教程—入门、提高、开发、拓展全攻略[M]. 北京:
电子工业出版社, 2009.1
[3]. 郑阿奇. Visual C++实用教程[M]. 北京:电子工业出版社, 2010
[4]. 王宜怀.张书奎等. 嵌入式技术基础与实践[M]. 北京:清华大学出版社,2011
附录系统部分程序
/*****************************************************
----------------------------------------------------
文件:main.c
---------------------------------------------------- *****************************************************/ //红外密码锁开启后直接输入密码即可 1602显示
#include <reg51.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void delay(uchar x); //延时 X*0.14Ms
void delay1(int ms);
sbit IRIN = P3^2; //红外接收器控制端口
sbit LCD_RS = P2^7; //1602控制端口
sbit LCD_RW = P2^6; //1602控制端口
sbit LCD_EN = P2^5; //1602控制端口
uchar i;
uchar key;
uchar flag;
uchar num[7];
uchar IRCOM[7];
uchar code cdis1[] = {"Please Input The"};
uchar code cdis2[] = {"Password........"};
uchar code dis1[] = {"The Password is "};
uchar code secret[]= {"888888"}; //密码
uchar code enter[] = {"You Can Enter!!!"};
uchar code error[] = {"Wrong!!!!!!!!!!!"};
uchar code again[] = {"Please Try Again"};
/*
*检测LCD忙状态,busy为1时忙,为0时闲,此时可以写指令与数据 */
bit lcd_busy()
{
bit busy;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
busy = (bit)(P0&0x80);
LCD_EN = 0;
return(busy);
/*
*写指令
*/
void lcd_wcmd(uchar cmd)
{ while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
delayNOP();
LCD_EN = 1;
P0 = cmd;
delayNOP();
LCD_EN = 0;
}
/*
*写数据
*/
void lcd_wdat(uchar dat) { while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
delayNOP();
LCD_EN = 1;
P0 = dat;
delayNOP();
LCD_EN = 0;
}
/*
*LCD初始化
*/
void lcd_init()
{
delay1(15);
lcd_wcmd(0x38); //16*2显示 5*7点阵 8位数据 delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x0c); //显示开关光标
delay1(5);
lcd_wcmd(0x06); //移动光标
delay1(5);
lcd_wcmd(0x01); //清楚LCD内容
delay1(5);
}
/*
*设置显示位置
*/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
void disp1(unsigned char ch[])
{
unsigned char m;
lcd_pos(0); //显示在第一行
m = 0;
while(ch[m] != '\0')
{ //显示字符
lcd_wdat(ch[m]);
m++;
}
}
void disp2(unsigned char ch[])
{
unsigned char m;
lcd_pos(0x40); //显示在第二行
m = 0;
while(ch[m] != '\0')
{ //显示字符
lcd_wdat(ch[m]);
m++;
}
}
/*
*主函数
*/
main()
{
IRIN=1; //打开红外控制端口
i = 0;
flag = 0;
delay1(10);
lcd_init(); //LCD初始化
disp1(cdis1);
disp2(cdis2);
IE = 0x81; //允许中断使能 INT0外部中断 TCON = 0x01; //触发方式为脉冲负边沿触发
while(1)
{
while(flag)
{
disp1(cdis1);
disp2(cdis2);
flag = 0;
}
}
}
/*
*中断处理
*/
void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1; //退出中断处理
return;
}
while (!IRIN)
{delay(1);}
for (j=0;j<4;j++) //收集4组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN)
{delay(1);}
while (!IRIN)
{delay(1);}
while (IRIN)
{
delay(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补0 if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补1 N=0;
} //end for k
} //end for j
disp1(dis1);
if (IRCOM[2]!=~IRCOM[3])
{ EX0=1;
return; }
switch(IRCOM[2])
{
case 0X16:
key = '0';
num[i++] = '0';
break;
case 0X0c:
key = '1';
num[i++] = '1';
break;
case 0x18:
key = '2';
num[i++] = '2';
break;
case 0x5e:
key = '3';
num[i++] = '3';
break;
case 0x08:
key = '4';
num[i++] = '4';
break;
case 0x1c:
key = '5';
num[i++] = '5';
break;
case 0x5A:
key = '6';
num[i++] = '6';
break;
case 0x42:
key = '7';
num[i++] = '7';
break;
case 0x52:
key = '8';
num[i++] = '8';
break;
case 0x4a:
key = '9';
num[i++] = '9';
break;
case 0x45:
flag = 1;
i=0;
break;
default:
break;
}
lcd_pos(0x50-i);
lcd_wdat('*'); //第一位显示 if(i == 6)
{
i = 0;
num[7] = '\0';
disp1(num);
if(strcmp(num,secret) == 0)
{
disp1("Right!!!!!!!!!!!");
disp2(enter);
}
else
{
disp1(error);
disp2(again);
}
}
IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4位高四位变低四位
if(IRCOM[5]>9)
{ IRCOM[5]=IRCOM[5]+0x37;}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{ IRCOM[6]=IRCOM[6]+0x37;}
else
IRCOM[6]=IRCOM[6]+0x30;
EX0 = 1;
}
void delay(unsigned char x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
void delay1(int ms)
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
实物图片
答辩记录表
成绩评定表
学生姓名:张紫轩学号: 11224021 班级: 11物41
课程设计总结。