基于51单片机的红外遥控智能定时开关插座

更新时间:2024-05-21 05:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

目录

第一章 绪论 ........................................................................................................................ 1

1.1 选题的目的与意义 .............................................................................................. 1 1.2 本课题在国内外的发展现状及趋势 .................................................................. 1 1.3 本课题要解决的主要问题 .................................................................................. 1 第二章 系统设计方案 ........................................................................................................ 2

2.1 系统结构与功能 .................................................................................................. 2 2.2 总体系统框图 ...................................................................................................... 2 2.3 开关的选择 .......................................................................................................... 2 2.4 显示方式选择 ...................................................................................................... 3 2.5 时钟的实现及单片机的选择 .............................................................................. 3 2.6 按键控制部分的实现 .......................................................................................... 3 第三章 主要元器件原理及其应用 .................................................................................... 4

3.1 单片机STC89C51简介 ........................................................................................ 4 3.2 1602工业字符型液晶简介 ................................................................................. 4 3.3 继电器介绍 .......................................................................................................... 5 第四章 硬件电路的设计 .................................................................................................... 6

4.1单片机最小系统 ................................................................................................... 6 4.2 液晶显示电路 ...................................................................................................... 7 4.3 键盘电路 .............................................................................................................. 8 4.4 插座电源控制电路 .............................................................................................. 8 4.5 蜂鸣器提示电路 .................................................................................................. 9 4.6 红外遥控电路 ...................................................................................................... 9 第五章 系统软件设计 ...................................................................................................... 11

5.1 各模块程序设计 ................................................................................................ 11

5.1.1 主程序流程图 ........................................................................................ 11 5.1.2 时钟程序设计 ........................................................................................ 11

第六章 系统组装和调试 .................................................................................................. 13 总结与体会 ........................................................................................................................ 15 参考文献 ............................................................................................................................ 16 附录一 实物图 .................................................................................................................. 17 附录二 源程序 .................................................................................................................. 18

第1页

电子线路设计与制作

第一章 绪论

1.1 选题的目的与意义

现如今,生活水平提高,生活节奏加快,市面上的插座往往由于其功能过于单一而不能满足我们的需求。比如:电动车充电通常是8小时左右,太长则容易损耗电池,太满则充不满,如果晚上充电,又经常不想从家里出来到车库去给车充电。白天充电又忘记拔电源;家中的水塔忘记抽水而造成生活的一时不便;学校的起床广播因值班人员睡过头而推迟广播;家中的鱼缸因太久没有供氧造成鱼儿缺氧死亡;许多球迷或者新闻爱好者因为错过了开机时间而与精彩球赛或者新闻擦肩而过;夏天里风扇的定时时间过短(一般为1个小时),不便于晚上分段定时使用等等。

综合以上原因考虑,我们急需要一款智能插座。此插座能够实现定时给电器供电,在工作时间之外把电器的电源切断,这样就能解决电器的待机损耗,达到节约用电的目的,还能消除安全隐患,最终使我们的生活更加方便化、智能化。

本文阐述了定时开关插座的硬件电路设计、软件算法设计, 给出了自动开关插座的设计和定型方案,它可以对家中一些需要在特定时间对电器进行自动断、通电控制,而不需要拔掉插头,减少电器的待机损耗,解决生活中的一些烦恼。

1.2 本课题在国内外的发展现状及趋势

目前,在市面上,时间控制器技术相对先进,种类齐全,时间控制器被广泛应用于各类电器中,通过对时间的控制是人们的生活更加简单化、智能化。在智能插座的领域却还处于刚刚发展的阶段,智能插座也仅仅限制于旋钮定时器,或者计数器芯片设计的体积较大的时控插座。这种插座定时时间单一,功能单一,定时准确性低,很难真正满足我们日常生活的需求。现在急需将一种功能强大的时控插座来满足市场需求,改善我们的生活。

随着现代电子科学技术的发展,由于单片机具有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点,成品价格下降,越来越被广泛应用。这种新兴产业的发展,势必在日常生活中产生深远的影响。由单片机实现对插座的定时控制正符合这一发展规律。

1.3 本课题要解决的主要问题

本论文主要是完成一种低成本、低价格、功能强大的单片机定时控制插座系统的设计与开发。包括硬件电路和主要的软件设计。

本课题详细分析系统的硬件设计和软件设计,给出电路原理图,以及主要程序设计的流程图和程序。主要采用51单片机为核心单元,利用单片机的定时器,I/O等功能设计的一款具有定时的单片机时控插座。

第1页

电子线路设计与制作

第二章 系统设计方案

本章主要讨论了系统的总体方案以及各模块的设计方案,包括了控制核心、开关、显示模块、时钟电路以及键盘电路方案。

2.1 系统结构与功能

系统总体设计主要实现以下功能:

(1)人机交互界面:通过1602液晶显示屏,与独立按键建立起一套完善的人机交互界面。可以用于设置定时的参数,显示剩余时间,显示断电提示。

(2)设置定时时间:用户通过人机交互界面,查找到设定时间界面,设置对应的每一组的设置时间。

(3)红外线遥控:本系统可以通过红外线遥控器进行两个定时的时间设定,可以强制开\\关,确认开始定时功能

(4)蜂鸣器提示:当电源接通和断开时都将有蜂鸣器提示。

2.2 总体系统框图

采用一种以STC89C51为核心的单片机控制方案。选用单片机STC89S51 作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的定时控制功能。在单片机的外围电路外接输入键盘及1602液晶用于构造人机交互界面以设置各个参数。其原理如下图2.1所示:

电脑USB供电电 STC 89C52RC 蜂鸣器 插线板模块 光耦 继电器模块 红外接收模按键模

图2.1 单片机控制插座原理图

2.3 开关的选择

采用光耦合器实现单片机控制开关。耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。目前它已成为种

第2页

电子线路设计与制作

类最多、用途最广的光电器件之一。

本次设计开关部分可选用光耦控制三极管开关的形式来驱动继电器的工作。

2.4 显示方式选择

在模拟电子和数字电子中,常用显示数据的有数码管和液晶显示器。

采用LCD液晶显示,可以显示所有字符及自定义字符,并能同时显示多组数据、汉字,字符清晰。由于自身具有控制器,不但可以减轻主单片机的负担,而且可以实现菜单驱动方式的显示效果,达到友好的人机介面。LCD显示能解决LED只能显示数字等几个简单字符的缺点,性能好,效果多,控制方便,显示方式多,且能耗也较少。

2.5 时钟的实现及单片机的选择

时钟的实现可已通过使用时钟芯片或者单片机的定时器实现。下面简要介绍几种方案的特点。单片机仅用于控制继电器、键盘,实现时钟和定时,用51结构的有Atmel的AT89CXX系列、AT89SXX系列、AT89C20系列(20引脚)或STC的所有单片机都可以实现。根据在学校比较流行的学习单片机是STC89C51系列,而且STC89C51单片机便宜,购买方便,下载方便,故单片机选用STC89C51单片机。

时钟通过单片机的内部定时器来实现时钟。单片机的内部定时器可实现较为精确的时钟走时,定时50毫秒的误差率极小,可达到定时开关插座的使用要求。使用单片机内部定时器可简化硬件电路,可以节省开支,但是编程的难度有所提高。

本次设计的时钟走时用单片机定时器已经可以完全达到定时开关插座的使用要求,并可省去时钟芯片,节省开支。考虑到软件的难度增加可换来更好的性价比,所以选用方案二。

2.6 按键控制部分的实现

时钟时间和定时时间的设置功能可以通过按键来实现。按键的实现可以通过以下两种方案实现:

单片机的每一个I/O口与一个按键相连,这样就可以根据扫描I/O口的电平变化实现相关功能。这样可以很简单的实现按键的功能。

根据本定时开关插座的设置要求,用到4个按键。通过两个方案的对比,方案一的实施办法更符合要求。

第3页

电子线路设计与制作

第三章 主要元器件原理及其应用

本章主要讨论了各模块元器件的选择以及元器件的工作原理。

3.1 单片机STC89C51简介

(1)增强型1T流水线/精简指令集结构8051CPU

(2)工作电压:3.4V-5.5V(5V 单片机)/2.0V-3.8V(3V 单片机)

(3)工作频率范围:0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.

(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节 (5)片上集成512字节RAM

(6)通用I/O口(27/23个),复位后为:准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA

(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片

(8)EEPROM功能 (9)看门狗

管脚图如3.1所示。

图3.1 STC89C51管脚图

3.2 1602工业字符型液晶简介

工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)。1602液晶管脚图如图3.2所示。

第4页

电子线路设计与制作

图3.2 1602液晶管脚图

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。。

3.3 继电器介绍

继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

(1)额定工作电压

额定工作电压是指继电器正常工作时线圈所需要的电压,也就是控制电路的控制电压,根据继电器的型号不同,可以是交流电压,也可以是直流电压。

(2)直流电阻

直流电阻是指继电器中线圈的直流电阻,可以通过万能表测量。 (3)吸合电流

吸合电流是指继电器能够产生吸合动作的最小电流。在正常使用时,给定的电流必须略大于吸合电流,这样继电器才能稳定地工作。而对于线圈所加的工作电压,一般不要超过额定工作电压的1.5倍,否则会产生较大的电流而把线圈烧毁。

(4)释放电流

释放电流是指继电器产生释放动作的最大电流。当继电器吸合状态的电流减小到一定程度时,继电器就会恢复到未通电的释放状态。这时的电流远远小于吸合电流。

(5)触点切换电压和电流

触点切换电压和电流是指继电器允许加载的电压和电流。它决定了继电器能控制电压和电流的大小,使用时不能超过此值,否则很容易损坏继电器的触点。

第5页

电子线路设计与制作

第四章 硬件电路的设计

本章节详细讨论了各个模块的具体电路的设计,单片机最小系统、液晶显示模块、继电器驱动模块以及键盘模块。

4.1单片机最小系统

单片机最小系统由复位电路、时钟电路和单片机STC89C51组成,如图4.1所示。

图4.1 单片机最小系统电路

(1)时钟电路模块

由于系统需要计算精确时间,所以该模块使用了一个11.0592MHz的晶振。时钟电路用于产生单片机工作所需要的时钟信号,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按照时序工作。时钟电路图如图4.2所示。

图4.2 时钟电路

(2)复位电路模块

第6页

电子线路设计与制作

复位是单片机的初始化操作,单片机启动运行时,都必须复位。复位电路包括了上电复位于手动复位两个部分。单片机复位信号为高电平复位。复位电路图如图4.3所示。

图4.3 复位电路

4.2 液晶显示电路

本设计选用的1602液晶为16管脚液晶,即带背光液晶。与单片机接口设计如下: 7—14:连接P0端口 4: 连接P2.2 5: 连接P2.1 6: 连接P2.0

1602液晶显示电路图如图4.4所示。

第7页

电子线路设计与制作

图4.4 1602液晶显示电路

4.3 键盘电路

本设计采用了独立键盘设计,只是用了3个独立案件与单片机IO口连接,利用简单的逻辑方式实现了人机交互界面。该界面操作简单,便于控制。人机界面在软件设计板块中将详细介绍。

4.4 插座电源控制电路

由于电源的通断并不频繁所以本设计才用了价格相对较低的继电器做为插座电源的控制电路器件。由单片机的一个I/O口经过三极管控制继电器的通断,从而控制插座的通断电。插座电源控制电路如图4.5所示。

第8页

电子线路设计与制作

图4.5 插座电源控制电路

4.5 蜂鸣器提示电路

本设计报警电路由单片机I/O口经三极管控制蜂鸣器进行报警。报警电路如图4.6。

图4.6 蜂鸣器提示电路

4.6 红外遥控电路

遥控器的每个按键都已经经过编码,当发射器拨键开关拨到ON档时,即有遥控码发出(可以发送任意数字暂定为发送0AAH(二进制:10101010B),这种遥控码具有以下特征:采用脉宽调制的串行码,刚开始发送38K码5ms来判定发射码开始标志,以脉宽为1.5ms、间隔0.5ms、周期为2ms的组合表示二进制的“1”;以脉宽为0.5ms、间隔1.5ms、

第9页

电子线路设计与制作

周期为2ms的组合表示二进制的“0”,红外系统框图如图4.7所示。

键编码调遥控发射器

光/电放大 解解

LED 遥控接收器 图4.6 红外系统框图

解码的关键是如何识别“0”和“1”,从位的定义我们可以发现接收判定“0”、“1”就是判定每个周期开始时低电平(注意发射与接收码正好反相)出现时间的长短,如果接收到为0的时间为1.5ms则为1,如果接收到0的时间为0.5ms则接收到的值为0。 图10为红外接收管电路,通过红外遥控即可通过单片机解码红外信号得出对应的键码,执行相应的动作,红外接收电路如图4.7所示。

图4.6 红外接收电路

第10页

电子线路设计与制作

第五章 系统软件设计

本章详细介绍了各个模块的软件设计流程以及部分源代码,包括了时钟程序、人机界面以及主程序。

5.1 各模块程序设计 5.1.1 主程序流程图

在本次设计中,主程序主要是在单片机的控制下,建立人机操作界面,对设定时间进行储存分析,驱动液晶显示出相关信息,并通过对比分析定时时间与时钟,控制继电器的通、断,从而达到控制插座的通、断电。在这个过程中,单片机首先进行初始化,包括设置单片机各个端口的方向,各个变量的初始化,液晶显示初始化、继电器断开以及单片机振荡频率的校准等。整个系统软件设计的流程图如图5.1所示。

开始液晶、定时器初始化建立人机界面进入键盘循环扫描键值判断与控制定时时间与现实时间对比通断电判断断电图5.1 主程序流程图

通电 5.1.2 时钟程序设计

单片机AT89S52内的定时器0和定时器1能准确定时一段时间。故用定时器0定时,

第11页

电子线路设计与制作

并通过计算定时次数来实现时钟走时。本设计定时器0和定时器1都是定时50ms中断一次,中断20次就能实现一秒钟。整个系统软件设计的流程图如图5.2所示。

开始定时器初始化是否进中断20次?秒加一时分秒满值判断结束图5.2 定时中断程序流程图

第12页

电子线路设计与制作

第六章 系统组装和调试

系统启动如图6.1所示。

图6.1 系统启动

用按键或是遥控器进行定时时间的设定,之后开始计时,此时电源未接通,电源指示灯不亮,如图6.2所示。

图6.2 开始定时开

第13页

电子线路设计与制作

定时时间到,插座电源接通,用电器工作,并进行倒计时,如图6.3所示。

图6.3 开始定时关

定时关时间到,插座电源断开,用电器停止工作,屏幕显示断电状态,如图6.4所示。

图6.4 系统断电

第14页

电子线路设计与制作

总结与体会

这次设计我们做的很用心,而最后收获也很多,感谢队友和自己付出的努力和坚持。

这个题目很长时间之前就想去做,因为智能家居是将来的趋势,能使我们的生活更加方便,但是苦于没有动力,正巧这次课程设计可以自己选题目,于是抓住这次好机会,完成了自己一直以来的愿望。

中间遇到了很多困难,最开始连液晶屏怎么用都不知道,在一点点的学习中,逐个解决遇到的问题,在这个过程中我们也学到了很多软件方便的测试方法,也学到了很多强电的知识,比如继电器的使用,当时准备做这个题目时很多人说强电很危险,但自己还是坚持去做了,强电弱电部分家,一名合格的工程师应该都去熟练掌握。

总的来说,本次设计还是比较成功的,各项指标都符合设计要求。由于经费有限及有的元器件比较难购买到,故定时开关插座系统存在一定的缺陷,可以做进一步的完善:例如电源部分可以用220V市电经过变压器和整流滤波后驱动继电器,这样设计出来的电源重量及体积会更小,能使电源模块更加小巧玲珑,从而不必用实验室的电源进行工作。

继电器选择方面可以考虑降低成本,这次我们用的是施耐德公司的24V驱动继电器,其实可以用更低电压控制的继电器,那样更安全,系统功耗更小,成本也更小。

最后我觉得如果整个系统可以做的更小巧一点,可以做成成品,为我们的生活提供便利。

第15页

电子线路设计与制作

参考文献

[1]李全利.单片机原理及接口技术[M].第二版.北京:高等教育出版社,2009:144 [2]江晓安 董秀峰.模拟电子技术[M].第三版.西安:西安电子科技大学出版社,2009:81 [3]江晓安等.数字电子技术[M].第三版.西安:西安电子科技大学出版社,2009:151 [4]胡翔骏.电路分析[M].第二版.北京:高等教育出版社,2009:215 [5]张晓光.用PIC单片机制作的电源定时插座[J].电子制作2010年05期:87 [6]谭浩强.C语言程序设计[M].第三版.北京:清华大学出版社,2009:204 [7]戴佳等.51单片机实例精讲[M].第三版.北京:电子工业出版社,2008:54 [8]李维 郭强.液晶显示应用技术[M].北京:电子工业出版社,2009. [9]张鑫. 单片机原理及应用.第二版[M].北京:电子工业出版社,2010.

[10]张迎新.单片机初级教程—单片机基础[M].第二版.北京:北京航空航天大学出版社,2009.

第16页

电子线路设计与制作

附录一 实物图

第17页

电子线路设计与制作

附录二 源程序

#include #include

#define uchar unsigned char #define uint unsigned int void IRInit();

sbit IRIN = P3^2; //红外接收器数据线 sbit beep=P2^3;

unsigned char IRCOM[7]; sbit led=P1^0; sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4;

sbit key1=P3^0;//光标选择键 sbit key2=P3^1;//计数加1 sbit key3=P3^3;// sbit key4=P3^6;//

sbit relayout=P1^7;//继电器输出引脚 unsigned char Y0; uchar count,key_sum; uchar mode,address,k; char miao,shi,fen; char miao0,shi0,fen0; char a=1; uchar num;

uchar code table[]=\ 00:00:00%uchar code table1[]=\ 00:00:00%uchar code table2[]=%uchar code table3[]=%uchar code table4[]=\ Continue? %uchar code table6[]=\ POWER OFF!!! \

第18页

电子线路设计与制作

void IRdelay(unsigned char x) //x*0.14MS {

unsigned char i; while(x--) {

for (i = 0; i<13; i++) {} } }

void delay(uint z)

{ uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void didi() { beep=0; delay(300); beep=1; delay(70); beep=0; delay(300); beep=1;

}

void didi_l() { beep=0; delay(500); beep=1;

}

第19页

电子线路设计与制作

void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;

}

void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0;

}

void init()//系统初始化 { //led=0; //IRInit(); //key3=1; TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;

ET0=1;

第20页

电子线路设计与制作

EX0=1; //允许总中断中断,使能 INT0 外部中断 IT0=1; //触发方式为脉冲负边沿触发

TR0=0;//关闭定时器

mode=1;

relayout=1; dula=0; wela=0; lcden=0; RD=0; k=1;

write_com(0x38); write_com(0x0f); write_com(0x06); write_com(0x01); write_com(0x80);

for(num=0;num<16;num++) { write_date(table2[num]); delay(5);

}

write_com(0x80+0x40); for(num=0;num<16;num++) { write_date(table3[num]); delay(5);

}

while(k)

{

if(key1==0||Y0==2)

第21页

电子线路设计与制作

{ delay(5);

if(key1==0||Y0==2) { if(!(Y0==2)) while(!key1); Y0=0; k=0;

}

}

}

write_com(0x80);

for(num=0;num<16;num++) { write_date(table[num]); delay(5);

}

write_com(0x80+0x40); for(num=0;num<16;num++) { write_date(table1[num]); delay(5);

}

//led=0; }

void write_sfm(uchar add,uchar date) { uchar shi,ge; shi=date/10;

ge=date;

第22页

电子线路设计与制作

}

write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);

void write_sfm0(uchar add,uchar date) { }

void keyscan() //定义功能键函数 { // led=0;

{

delay(5);

if(key1==0||Y0==2) {

while(!key1);

if(key1==0||Y0==2) uchar shi,ge; shi=date/10; ge=date; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge);

if(!(Y0==2))

key_sum++; Y0=0;

if(key_sum==1)//第一次按下功能键 {

//TR0=0;//暂停计时 write_com(0x80+0x00+14);

第23页

电子线路设计与制作

}

}

write_com(0x0f);

if(key_sum==2) { }

if(key_sum==3) { }

if(key_sum==4) {

write_com(0x80+0x40+14); //第四次按下功能键 } {

write_com(0x80+0x40+11); //第五次按下功能键 } {

write_com(0x80+0x40+8); //第六次按下功能键 }

if(key_sum==7)//第七次按下功能键 { }

第24页

write_com(0x80+0x00+11); //第二次按下功能键

write_com(0x80+0x00+8); //第三次按下功能键

if(key_sum==5)

if(key_sum==6)

key_sum=0; //按下光标键次数清零

write_com(0x0c); //第七次按下功能键,取消光标键功能 //TR0=1;

//进入定时中断

电子线路设计与制作

}

if(key_sum!=0) //按下光标功能键 {

if(key2==0)//当按下第二个加法调整功能键时 {

delay(5);//延时去抖 if(key2==0) //加法调整 {

while(!key2);

if(key_sum==1)//光标停在时钟秒的位置 { }

if(key_sum==2) //光标停在时钟分的位置 {

fen++; if(fen==60)

fen=0; miao++; if(miao==60)

miao=0; write_sfm0(14,miao); write_com(0x80+0x00+14);

if(key_sum<=3) { write_sfm0(11,fen); }

if(key_sum==3) //光标停在时钟小时的位置 {

shi++; if(shi==24)

shi=0;

第25页

write_com(0x80+0x00+11);}

电子线路设计与制作

}

if(key_sum<=3) }

if(key_sum==4) //光标停在定时时间小时的位置 { }

if(key_sum==5) //光标停在定时时间分钟的位置 { } { }

shi0++; if(shi0==24)

shi0=0; fen0++; if(fen0==60)

fen0=0;

miao0++; if(miao0==60)

miao0=0; {write_sfm0(8,shi); write_com(0x80+0x00+8);}

if(key_sum>=4)

{write_sfm(14,miao0); write_com(0x80+0x40+14);}

if(key_sum>=4)

{write_sfm(11,fen0);

write_com(0x80+0x40+11);}

if(key_sum==6) //光标停在定时时间秒的位置

if(key_sum>=4)

{write_sfm(8,shi0);

write_com(0x80+0x40+8);}

第26页

电子线路设计与制作

}

}

{ }

}

if(key4==0) { }

delay(5); if(key4==0) { }

while(!key1); TR0=1;

if(Y0==1)

if(a>0) {relayout=0;didi_l();}

else {relayout=1;didi();} a=-1*a;

Y0=0;

void main() {

init(); while(1) {

keyscan(); {

if(a>0) {relayout=0;didi_l();}

第27页

if(Y0==1)

电子线路设计与制作

} { } { } {

else {relayout=1;didi();}

a=-1*a; Y0=0;

if(Y0==3)

shi++; if(shi==24)

shi=0; if(key_sum<=3) {write_sfm0(8,shi); write_com(0x80+0x00+8);} Y0=0;

if(Y0==4)

fen++; if(fen==60) {

fen=0;

write_sfm0(11,fen); if(key_sum<=3)

write_com(0x80+0x00+11);} Y0=0;

if(Y0==5)

miao++; if(miao==60) miao=0;

write_sfm0(14,miao);

第28页

电子线路设计与制作

} { } { } {

write_com(0x80+0x00+14); Y0=0;

if(Y0==6)

shi0++; if(shi0==24)

shi0=0;

{write_sfm(8,shi0);

write_com(0x80+0x40+8);} if(key_sum>=4)

Y0=0;

if(Y0==7)

fen0++; if(fen0==60)

fen0=0;

if(key_sum>=4) {write_sfm(11,fen0); write_com(0x80+0x40+11);} Y0=0;

if(Y0==8)

miao0++; if(miao0==60)

miao0=0; if(key_sum>=4) {write_sfm(14,miao0);

第29页

电子线路设计与制作

}

} { }

write_com(0x80+0x40+14);} Y0=0;

if(Y0==9)

TR0=1; Y0=0;

}

void timer0() interrupt 1 //定时器计时中断函数 {

TH0=(65536-50000)/256; TL0=(65536-50000)%6; count++;

{

count=0;//最小计时单位清零 miao--; //秒值加1 if(mode==1) address=0x00; if(mode==2) address=0x40; if(miao==-1) {

miao=59; fen--; if(fen==-1) {

fen=59; shi--;

第30页

if(count==18)//计数值到一秒钟

电子线路设计与制作

}

}

if(shi==-1) { }

write_sfm0(8+address,shi);

shi=23;

write_sfm0(11+address,fen);

write_sfm0(14+address,miao);

if(!(shi||fen||miao)) //判断时间是否匹配 {

mode++;

if(mode==2) { } {

relayout=1; didi();//闹铃响 TR0=0; k=1;

write_com(0x80);

for(num=0;num<16;num++)

{ }

第31页

miao=miao0; shi=shi0; fen=fen0; relayout=0; didi_l();//闹铃响

if(mode==3)

write_date(table6[num]); delay(5);

电子线路设计与制作

write_com(0x80+0x40); for(num=0;num<16;num++) { }

if(key1==0||Y0==1)

{ }

delay(5);

if(key1==0||Y0==1) { }

if(!(Y0==1))

while(!key1); Y0=0;

write_com(0x80);

for(num=0;num<16;num++)

{ }

write_date(table[num]); delay(5);

{ }

write_date(table4[num]); delay(5);

while(k)

write_com(0x80+0x40); for(num=0;num<16;num++)

{ }

write_date(table1[num]); delay(5);

k=0;

第32页

电子线路设计与制作

}

}

mode=1; miao=0; shi=0; fen=0; miao0=0; shi0=0; fen0=0;

}

}

void IR_IN(void) interrupt 0 {

unsigned char j,k,N=0; EX0 = 0;

IRdelay(15); if (IRIN==1) return; }

{ EX0 =1;

//确认IR信号出现

while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {IRdelay(1);} //relayout=0;

for (j=0;j<4;j++) //收集四组数据 {

第33页

电子线路设计与制作

for (k=0;k<8;k++) //每组数据有8位 {

while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {IRdelay(1);}

while (!IRIN) //等 IR 变为高电平 {IRdelay(1);}

while (IRIN) //计算IR高电平时长 { IRdelay(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

if (IRCOM[2]!=~IRCOM[3]) { EX0=1; return; }

IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位

IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位变为低四位

if(IRCOM[5]>9)

{ IRCOM[5]=IRCOM[5]+0x37;} else

if(IRCOM[6]>9)

第34页

IRCOM[5]=IRCOM[5]+0x30;

电子线路设计与制作

{ IRCOM[6]=IRCOM[6]+0x37;} else IRCOM[6]=IRCOM[6]+0x30;

Y0=0;

switch(IRCOM[2]) { case 0x45: Y0=1; break; case 0x46: Y0=2; break; case 0x44: Y0=3; break; case 0x40: Y0=4; break; case 0x43: Y0=5; break; case 0x07: Y0=6; break; case 0x15: Y0=7; break; case 0x09: Y0=8; break; case 0x47: Y0=9; break;

}

EX0= 1; }

第35页

电子线路设计与制作

{ IRCOM[6]=IRCOM[6]+0x37;} else IRCOM[6]=IRCOM[6]+0x30;

Y0=0;

switch(IRCOM[2]) { case 0x45: Y0=1; break; case 0x46: Y0=2; break; case 0x44: Y0=3; break; case 0x40: Y0=4; break; case 0x43: Y0=5; break; case 0x07: Y0=6; break; case 0x15: Y0=7; break; case 0x09: Y0=8; break; case 0x47: Y0=9; break;

}

EX0= 1; }

第35页

本文来源:https://www.bwwdw.com/article/wad7.html

Top