《单片机课程设计(论文)红外遥控数字钟有程序.doc》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)红外遥控数字钟有程序.doc(23页珍藏版)》请在三一办公上搜索。
1、 课程设计(论文)说明书题 目:红外遥控数字钟 院 (系):信息与通信学院 专 业:微电子学 学生姓名: 学 号: 指导教师: 职 称:讲师 2011年 12 月 12 日摘 要 本系统采用AT89S52单片机与HS0038、DS1302配合,实现具有修改、保存功能的红外遥控数字钟,并用一块LCD1602显示屏显示数字钟的实时时间、日期和星期。数字钟的设定、修改功能由红外线遥控器及HS0038配合遥控控制。DS1302可以实现对系统的时、分、秒、日期和星期等信息的保存,使系统在掉电的情况下仍然能够准确的保存并运行时间信息。另外系统装有1个独立的按键,实现复位功能。关键词:AT89S52;HS0
2、038;DS1302;数字钟AbstractThe system uses the microcontroller and the DS1302 with AT89S52, real-time time date and week of preservation and display. There is also a LCD1602 display system to display the system date and time required for the symbol. DS1302 can be achieved on the system is the hours, minu
3、tes, seconds, date, and save information such as a week, the system in case of power-down will still be able to save and run-time and accurate information.Keywords:AT89S52;HS0038;DS1302; digital clock目 录引言 11 方案确定及元器件原理分析 11.1 设计要求 11.2 各模块方案选择 11.3 最终选择方案 72 系统硬件设计 72.1 DS1302时钟电路 72.2 红外接收部分电路 82.
4、3 显示部分电路 82.4 单片机复位电路 82.5 电源电路 92.6 总电路原理图 92.7 总电路PCB 93 系统软件设计 103.1 初始化程序设计 113.2 红外解码程序设计 113.3 时钟设置程序的设计 113.4 时钟显示的设计 114 电路调试 125 改进方案 125.1 整点报时功能 125.2 闹铃功能 125.3 阴历显示功能 126 结束语 13谢辞 14参考文献 15附录 16引言远程遥控技术有称为遥控技术,是指实现对被控目标的遥远控制,在工业控制、航空航天、家电领域应用广泛。红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,
5、易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计家用电器的红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方便。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无
6、线中设备。红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空调机以及玩具等其他小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅可以完全可靠而且能有效地隔离电器干扰。红外线遥控也成为了目前使用最广泛的一种通信和遥控手段。本文便是基于红外技术实现数字钟的遥控控制。1 方案确定及元器件原理分析1.1 设计要求采用市面上的万能遥控器作为本作品的遥控设备制作一个时钟能够通过遥控器对时钟进行时间修改和相关功能的设定其他创新功能1.2 各模块方案选择 (1)主模块的选择和说明。目前在单片机系统中,应
7、用比较广泛的微处理器芯片主要为8XS5X系列单片机。为了完成时钟设计,应用AT89S52单片机完全可以实现。但是本设计中需要更多的I/O引脚,故本设计采用具有32根I/O引脚的AT89S52单片机。(2)AT89S52简介。AT89S52是美国ATMEL公司生产的低电压、高性能的CMOS8位单片机,片内含8K bytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随即存取数据存储器(RAM),期间采用ATMEL公司的高密度、非易失性存储技术生产,与标准的MCS-51指令系统及8052产品引脚兼容,片内置通用的8位中央处理器(CPU)和Flash存储单元,功能强大。AT89S5
8、2单片机审核于许多较为复杂控制应用场合。1)AT89C52主要性能参数: 与MCS51产品指令和引脚完全兼容 ,具有8k字节可重擦写Flash闪速存储器 ,1000次擦写周期 ,全静态操作:0Hz24MHz ,三级加密程序存储器 ,2568字节内部RAM ,32个可编程I/O口线 ,3个16位定时器/计数器 ,8个中断源 ,低功耗空闲和掉电方式 。2)MCS51单片机的中断系统 中断源 MCS51单片机是一个多中断源的单片机,有五个中断源:外部中断0、定时器0中断、外部中断1、定时器1中断和串行接收或发送中断。 各中断源的中断处理程序入口地址如下表1所示:表1 中断向量表中断源入口地址外部中断
9、00003H定时器0000BH外部中断10013H定时器1001BH串行口0023H中断控制 a中断的开放或禁止是由中断允许寄存器IE控制的。IE的格式如下表2: 表2 中断允许寄存器IE格式EAESET1EX1ET0EX0EA中断总允许位。EA1,开放总中断,而各个中断源的中断请求是允许还是禁止,分别由各自的中断允许位确定;EA=0,禁止一切中断。 ES串行口中断允许位。 ET1和ET0分别是定时器T1和T0的中断允许位。 EX1和EX0分别是外部中断1(INT1)和外部中断0(INT0)的中断允许位。 以上五个中断允许位的意义是:0为禁止中断,1为允许中断。 b中断源优先级控制中断优先级寄
10、存器IP。 MCS51单片机有高、低两个中断优先级,5个中断源可由程序设置为高优先级中断或低优先级中断,实现二级中断嵌套。一个正在执行的低优先级中断源的中断服务程序,能被高优先级中断源所中断,但不能被同级别的另一个中断源所中断。MCS51单片机的5个中断源的优先级由中断优先级寄存器IP的相应位设定,如表3。表3 IP格式PSPT1PX1PT0PX0PS是串行口的中断优先级控制位。 PT1和PT0分别是定时器T1和T0的中断优先级控制位。 PX1和PX0分别是外部中断INT1和INT0的中断优先级控制位。中断优先级控制位的意义是:0为设定为低优先级中断源;1为设定为高优先级中断。 如果同优先级的
11、多个中断请求同时出现时,则按MCS51单片机的CPU查询次序确定那个中断请求被响应,其查询次序为:IE0、TF0、IE1、TF1、RI或TI。 (3)时钟芯片的选择。DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点,但DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中
12、断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能好地解决这个问题。 (4)DS1302简介。DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引
13、脚,而且备份电源可由大容量电容(1F)来替代。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。需要强调的是,DS1302需要使用32.768KHz的晶振。其管脚说明如图1-1和表4所示。图1-1 DS1302芯片引脚图表4 DS1302引脚功能说明引脚号名称功能1VCC1备份电源输入2X132.768KHz晶振输入3X232.768KHz晶振输出4GND地线5RST控制移位寄存器/复位6I/O数据输入/输出7SCLK串行时钟8VCC2主电源输入DS1302的控制字如表5所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为0。则不能把数据写入到DS1302中
14、。位6如果为0。则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。 为了提高对32个地址的寻址能力(地址/命令位15 = 逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节,不管是否写了
15、全部31字节,所写的每一字都将传送至RAM。 表5 DS1302的控制字1RAMCKA4A3A2A1A0RD WDS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表6,其中奇数为读操作,偶数为写操作。 时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。 AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5是A
16、M/PM位,此位是高电平时表示PM,低电平表示AM。在24小时方式下,位5为第二个10小时位(2023h)。 表6 内部寄存器地址和内容寄存器名命令字节取值范围寄存器内容写读76543210秒寄存器80H 81H0059CH10sSEC分寄存器82H 83H0059010minMIN小时寄存器84H 85H0023或011212/24010A/PHRHR日期寄存器86H 87H0128,29,30,310010DATEDATE月份寄存器88H 89H011200010MMONTH周寄存器8AH8BH010700000DAY年寄存器8CH8BH009910YEARYEAR(5)显示模块的选择。本
17、实验中要显示的信息比较多,选择数码管显示的话需要的数码管数量将会很多,将是线路复杂,PCB布线混乱,因此选择LCD1602作为显示模块。(6)LCD1602简介。LCD1602字符LCD基本操作有以下四种: 读状态:输入信号:RS=0,RW=1,E=1 输出信号:D0D7=状态字 读数据:输入信号:RS=1,RW=1,E=1 输出信号:D0D7=数据 写指令:输入信号:RS=0,RW=0,E=1-0 输出信号:D0D7=指令 写数据:输入信号:RS=1,RW=0,E=1-0 输出信号:D0D7=数据 LCD1602的读写顺序如下,通常的读写频率为250KHz左右。指令说明如表7所示。 表7 L
18、CD1602指令说明指令码功能0x38设置162显示,57点阵,8位数据接口0x28设置162显示,57点阵,4位数据接口0x01清屏:数据指针清0,所有显示清00x08显示关0x0c显示开0x06当读或写一个字符后,地址指针自动加10x40设置CGRAM地址为00x80+地址设置1602第一行的数据指针初始地址0xc0+地址设置1602第二行的数据指针初始地址1602初始化流程: 延时20ms。 写指令38H。延时20ms。 写指令38H。 延时20ms。 写指令38H:设置显示模式。 写指令08H:显示关闭。 写指令01H:清屏。 写指令06H:光标移动设置。 写指令08H:显示开及光标设
19、置。 (7)红外遥控解码方式的选择。我们采用普通的家用电器遥控器作为控制信号发出装置,当按下遥控器的设置键后,红外接收装置接收到遥控器发出的红外线控制信号,然后把这个信号转换成电信号,传到单片机中,利用单片机对这个信号进行解码,解码完成后查表确定是不是设置信号,当这个信号是设置信号后,启动设置子程序,那么以后接收到的红外信号就是设置的时间信号了,单片机再对这些信号进行解码,查表判断出数值是多少,然后设置,设置完时间后要进行确认,当遥控器发出确认信号后,单片机收到这个信号并查表判断这是确认信号后,执行确认指令,使设置生效,从而达到控制电源通断的目的。 该方案为软件解码方案,软件解码可以不考虑遥控
20、器的芯片是什么型号的,因为我们只需检测到它的发射编码,然后用软件方式来对它进行处理,从而得到所要的信息。软件解码具有灵活、硬件精简(仅需集成红外接收头和一片单片机)、可靠性高,成本低等特点。经以上的论证,可以采用软件解码方案,成本低,方便实现,并且系统整体性能和可靠性高。 (8)红外遥控解码系统组成 供电电源电路(给微处理器AT89S52和红外一体化接收头HS0038提供工作需要的5V电压) 微控制器AT89S52系统(系统的核心部分) 红外接收电路(接收系统所配备遥控器所发出的红外信号) 看门狗和EEPROM 存储电路(防止系统死机和存储编码信号) 执行电路(控制被控电器电源) (9)红外一
21、体化接收头HS0038。其中HS0038为黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达35m。它能与TTL、COMS 电路兼容。HS0038为直立侧面收光型。它接收红外信号频率为38 kHz,周期约26 s,同时能对信号进行放大、检波、整形,得到TTL电平的编码信号。其外形图如下图1-2所示,三个管脚分别是地、5 V 电源、解调信号输出端。 图1-2 红外接收器外形图红外一体化接收头的测试方法:在HS0038的电源端与信号输出端之间接上一只二极管及一只发光二极管后,再配上规定的工作电源(为5V),当手拿遥控器对着接收
22、头按任意键时,发光二极管会闪烁,说明红外接收头和遥控器工作都正常;如果发光二极管不闪烁发光,说明红外接收头和遥控器至少有一个损坏。只要确保遥控器工作正常,很容易判断红外接收头的优劣。 识别方法分析:为了用软件识别以上波形,采用与程控交换机中“脉冲号码识别法”类似的方法来解决。用扫描的方式对接收波形快速扫描,然后根据扫描结果分析出编码值。识别编码的关键之一是确定扫描周期。分析波形和参数知道:整个数据14位,总时长为22ms25ms,则一个数据位时长为1.5ms1.8ms,占空比1:1,脉宽为750s900s。在编程时要考虑脉宽的偏差容限,为保证扫描精度,选取扫描周期为100s。识别编码的关键之二
23、是判别“0”和“1”。数据“0”为波形从低到高,即在相邻的2次扫描中,扫描值从0到1,则识别数据为“0”;数据“1”为波形从高到低,即在相邻的2次扫描中,扫描值从1到0,则识别数据为“1”。 1.3 最终选择方案 经过方案比较和论证,选择AT89S52作为主控芯片,时钟芯片选择DS1302,应用HS0038的红外遥控解码电路,显示模块用LCD1602。最后选择的方案如下图1-3所示:图1-3 电路系统构成框图2 系统硬件设计 2.1 DS1302时钟电路 时钟芯片DS1302与单片机AT89S52的接口是由3条线来完成的,单片机AT89S52的P1.2用来作为DS1302输入时钟SCLK控制端
24、,P1.3与时钟芯片的数据传输端相连,P1.4控制DS1302的复位输入端。DS1302的第8管脚与一个独立电池连接,2、3管脚接标准32.768KHz石英晶振。DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输出。无论是读周期还是写周期,开始8位指定40存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的始终周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字数。DS1302电路原理图如下图2-1所示。 图2-1 D
25、S1302时钟电路原理图2.2 红外接收部分电路 利用HS0038接收红外线控制信号的电路原理图如下图2-2所示,HS0038红外接收探头连接到单片机的INT0口组成的。 图2-2 红外接收部分电路原理图2.3 显示部分电路 液晶显示器LCD1602与单片机AT89S52的接口由一组8位数据传输线和3根控制线完成。LCD1602的E、RW、RS分别由单片机的P3.5、P3.6、P3.7来控制,数据输入口DB0DB7由P2.0P2.7传输数据。接口3接2K电位器,用于调节屏幕亮度。LCD1602与单片机的接口电路如图2-3所示。 图2-3 显示部分电路原理图2.4 单片机复位电路 单片机AT89
26、S52作为主控芯片,控制整个电路的运行。单片机外围需要一个复位电路,要求RST端脚维持高电平大于10MS以上。电阻和电容的值随时钟频率的不同而变化。复位电路的设计图如图2-4示。图2-4 复位电路设计图2.5 电源电路 时钟芯片DS1302有很宽的工作电压范围,其工作电压为2.55.5V。单片机AT89S52的工作电压范围相对较窄,为4.05.5V,所以本设计中,利用纽扣电池给电路提供+5V电压。在电路中接入一个发光二极管作为指示灯,可以很方便地指示电源与电路是否接通。该设计的电源部分如图2-5所示。 图2-5 电源电路2.6 总电路原理图 在Protel99SE中绘制的该红外遥控数字钟总电路
27、原理图如下图2-6所示。图2-6 电路原理图2.7 总电路PCB 布线时采用双面布线的方式,使得最后安装的LCD恰好可以把电路板完全覆盖,避免了多跳线的排布,同时节约铜板材料,使数字钟外观更美观简洁,符合产品设计需求。其PCB如图2-7所示。 图2-7 电路PCB3 系统软件设计 红外遥控数字钟要求实现屏显年、月、日、时分、秒、星期,且可以修改数据。根据要求,分析得出程序设计一共有四个主要模块:初始化程序设计,HS0038红外解码设计,时钟设置和屏幕显示。主程序流程图如下图3-1所示。 图3-1 主程序流程图3.1 初始化程序设计 初始化程序设计,包括LCD1602、HS0038、DS1302
28、、AT89S52芯片的初始化。 3.2 红外解码程序设计 初始化模块后,系统在接收到遥控器的红外信号时,需要对红外信号进行解码,才能得知遥控器发出的命令是什么,之后才可以做出相应的行动。红外解码后,将相应码源存入缓存区。 红外接收装置HS0038接收到遥控器发出的红外线控制信号,然后把这个信号转换成电信号,传到单片机中,利用单片机的中断设置计数,实现红外解码。 3.3 时钟设置程序的设计 设计程序,使数字钟通过红外线遥控器上6个按键:设置,确认,频道上、下选择,数值增、减选择的命令进行时间设置。程序流程图如图3-2所示。 图3-2 时间调整流程图3.4 时钟显示的设计 因为使用了时钟芯片DS1
29、302,阳历程序只需要从DS1302各寄存器中读出年、月、日、小时、分、星期等数据,再处理既可。在首次对DS1302进行操作之前,必须对他进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓存单元。时钟显示程序流程图见图3-4所示。图3-4 阳历程序流程图4 电路调试电路调试电路调试电路调试 完成电路板腐蚀、原件焊接等硬件制作工序后,首先把检测程序下载到单片机,在检查完所有电路均没有短路后,给电路板接上电源,并按下复位键确定单片机最小系统及LCD1602等基本元器件是否工作。 确保单片机最小系统正常工作之后,把本次实训的程序下载到单片机,接上电源并按下复位键,此时应该看到LCD1
30、602显示出程序初始化的时间,并看到秒钟正常运作,这就说明DS1302工作正常。若看不到初始化设置的时钟,或者时钟不走,则说明是DS1302没有工作,先检查DS1302的晶振及DS1302各个管件是否有短路或者虚焊现象。 此后用万能遥控器进行数字钟设置功能测试。将遥控器对准一体化红外接收头HS0038,依次测试按下遥控器的时钟设置按键;项目选择按键;数值增、减按键和确认按键,观察设置是否能顺利进行,完成时钟、日期修改。若不能实现上述功能,则可以尝试改变解码程序的延时,因为实际电路的延时跟理论有略微差别。 到此,表示整个电路功能全部检测完成。 5 改进方案 5.1 整点报时功能 只需在电路中接入
31、一个简单的蜂鸣器电路,便可通过修改DS1302读取时钟数据程序,加入一系列条件语句使之每逢整点实现报时功能。5.2 闹铃功能 与整点报时功能相似,需要在电路中接入一个简单的蜂鸣器电路,通过增加设置闹钟程序模块,每当DS1302读取到所设闹铃时间时便可实现响铃功能。 5.3 阴历显示功能 阴历程序的实现是要靠阳历日期来推算。首先确定计算方法。阳历一个月为30天或31天(2月除外,闰年2月为29天,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天或29天。如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制能表示一年12个月的大
32、小。如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月为0,小月为1,这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用4字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据。6 结束语通过该次课设,我从中了解到了各种集成电路方面的知识,熟悉了之前从未接触过的HS0038红外线信号接收器和DS1302时钟芯片,在同学的指导下,学会了HS0038的简单性能测试方法:在HS0038的电源端与信号输出端之间接上一只二极管及一只发光二极管后,再配上规定的工作电源(为5V),当手拿遥控器对着接收头按任意键时,发光二极管会闪烁,说明红外接收
33、头和遥控器工作都正常;如果发光二极管不闪烁发光,说明红外接收头和遥控器至少有一个损坏。所以只要确保遥控器工作正常,很容易判断红外接收头的优劣。增强了动手能力,能完全从实验室做出一块完整可用的电路板,学会了充分利用手头的工具对电路的制作安装,焊接调试及检测等步骤,也感觉到各种器件资源的宝贵,更懂得珍惜资源,不浪费任何一个元器件。 谢 辞在此,我要感谢我的同学对我的帮助,他教会了我如何去分析题目以及分析题目的意思,我才能对症下药。我也要感谢老师每次耐心地指出我的错误,使我对论文格式有了深入的了解,而且认识到对细节部分一定要认真对待,不可因小失大。此次的课程设计,使我对该知识得到巩固,也让我对该知识
34、得到进一步的认识,老师和我都同样重视课程设计。通过课程设计,让我理解到课程设计的重要性和严谨性,也让我们对知识掌握的更加全面。参考文献1 王卫东,模拟电子电路基础,西安电子科技大学出版社, 2003.22 阎石,数字电子技术基础,高等教育出版社, 2006.53 陈有卿,实用电子制作精选,机械工业出版社, 1994.114 任致程,凌红武,电子制作工艺技巧,人民邮电出版社, 19995 电子电路百科全书编辑组,电子电路百科全书,科学出版社, 19886 张凤言,电子电路基础,高等教育出版社, 19957 杜武林,高频电路原理与分析,西安电子科技大学出版社, 19948 李亚伯,数字电路与系统,
35、电子工业出版社, 1998附 录主程序代码:#include1602.h#includeds1302.h#includeir.huint8_t time_tmp7=0x12,0x34,0x56,0x78,0x98,0x21,0x32;uint8_t code v_coder=6,4,3,2,1,0;uint8_t code l_coder=4,0;/uint8_t time12;uint8_t choice,t_run;struct option_pointuint8_t cnt_x,cnt_y;struct option_point s_point=7,0,8,0,10,0,11,0,13,
36、0,14,0,7,0x40,8,0x40,10,0x40,11,0x40,13,0x40,14,0x40;/*struct option_point v_range=0,9,0,9,0,1,0,;*/void main(void)uint8_t cnt_x;Init_1620();init_1302();/ settime_1302(time_tmp); EA=1; /开启总中断TMOD=0x11; /使用定时器T0的模式1 EX0=1; /开外中断0IT0=1; /外中断的下降沿触发 ET0=1; /定时器T0中断允许 choice=0;t_run=1;/* dokey_state=0; w
37、hile(key_state=0);Write_Com(0x80);/ key_num0=0xf0;for(cnt_x=0;cnt_x1;Busy();Write_Com(0x80+0x40);for(cnt_x=0;cnt_x1;while(1);*/doif(t_run=1)gettime_1302(time_tmp);Time_To_Lcd(time_tmp);Updata_Cache();if(key_state=1)key_state=0;switch(key_num2) case 0x18: t_run=0;break;elseBusy();Write_Com(0x80+(s_t_
38、x)+(s_t_y);if(key_state=1)key_state=0;switch(key_num2) case 0x18: if(check_v(time_tmp) Write_Com(0x1);Delay_Ms(10);Write_Com(0x80+5);Busy();Write_Data_String(SURE?,5);while(key_state=0);if(key_num2=0x15)settime_1302(time_tmp);key_state=0;t_run=1;break;case 0x1e: if(choice=0)choice=11;else choice-; b
39、reak; case 0x1a: if(choice=11) choice=0; else choice+; break; case 0x0:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);/time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);Time_To_Lcd(time_tmp);Updata_Cache();break;case 0x1: time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(1l_codercho
40、ice%2);Time_To_Lcd(time_tmp);Updata_Cache();break; case 0x2:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(2l_coderchoice%2);Time_To_Lcd(time_tmp);Updata_Cache();break; case 0x3:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(3l_coderchoice%2);Time_To
41、_Lcd(time_tmp);Updata_Cache();break; case 0x4:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(4l_coderchoice%2);Time_To_Lcd(time_tmp);Updata_Cache();break; case 0x5:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(5l_coderchoice%2);Time_To_Lcd(time_tmp);Updata_Cache();break; case 0x6:time_tmpv_coderchoice/2&=(0xfl_coderchoice%2);time_tmpv_coderchoice/2|=(6l_coderchoice%2);Time_To_Lcd(time_tmp);Updata_Cache();break; case 0x7:time_tmpv_codercho
链接地址:https://www.31ppt.com/p-4142942.html