可编程作息时间控制器设计讲解_第1页
可编程作息时间控制器设计讲解_第2页
可编程作息时间控制器设计讲解_第3页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息工程学院课程设计报告书题 目:可编程作息时间控制器设计专 业:电子信息科学与技术班 级:学 号:学生姓名指导教师:2013年5月13日信息工程学院课程设计任务书学号学生姓名专业(班级)设计题目可编程作息时间控制器设计设 计 技 术 参 数0.5v 低电压驱动蜂鸣器5V外部稳压电源供电1602LCD显示日期和时间LED提示闹钟到来设 计 要 求(1)按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示)。(2)具备日期和时钟显示。工作量文字报告字数大约在 2000字,页数在20页左右工 作 计 划(1)整体设计构思(2)查阅有关资料(3)编写调试程序(4)画出电路图(5)装载程序

2、,查看结果参 考 资 料1 单片机原理及应用(第二版)张毅刚彭喜兀彭宇北京高等教育出版 社2 刘和平.单片机编程与入门.重庆大学出版社,2002.68-99,111-1223 陈明荧.89C51单片机课程设计实训教材.清华大学出版社,2003.38-67,102-118指导教师签字教研室主任签字信息工程学院课程设计成绩评定表学生姓名:学号:专业(班级): 电子课程设计题目:_可编程作息时间控制器设计指导教师评语:成绩: 指导教师:年 月 日摘要本设计是可编程作息时间控制器设计,由单片机AT89C51芯片和LCD LED显示器,辅以必要的电路,构成一个单片机四路可调闹钟。电子钟可采用数字电路实现

3、,也可以采用单片机来完成。LCD显示“时”,“分”,LED亮灯来表示闹钟的到来, 定时时间到能发出警报声。 现在是自动化高度发达的时代, 特别是电子类产品都是靠内部的控制电路来实现对产品的控 制,达到自动运行的目的,这就需要我们这里要做的设计中的电器元件及电路的支持。在这次设计中主要是用 AT89S51来进行定时,也结合着其他辅助电路实施控制, 在定时 的时候,按一下控制小时的键对小时加一; 按一下控制分钟的键对分钟加一; 到达预设的时 间,此电路就会发出报警声音提示已经到点。关键字:四路可调闹钟AT89C51 LCD目录1任务提出与方案论证 11.1单片机型号的选择11.2按键的选择11.3

4、显示器的选择11.4计时部分的选择12总体设计22.1系统总框图22.2原理及工作过程说明 22.3系统电路图33详细设计43.1主程序部分的设计 43.2独立式键盘的接口电路 43.3 1602LCD液晶显示器 53.4闹钟子函数94总结10参考文献111任务提出与方案论证1.1单片机型号的选择通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器

5、组合在单个芯片中,ATME啲AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和 1000次擦写循环,数据保留时间为 10年,是最好的选择。1.2按键的选择本次设计按照题目要求使用独立式按键。由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。1.3显示器的选择选用1602LCD夜晶显示器。1.4计时部分的选择如果使用时钟芯片, 系统就不怕掉电且时间精确。 但这种芯片比较贵, 况且,设计本系 统主要是为了学习单片机程序的编写和调试以及设计硬件电路的一些方法,因此采用软件的方法来计时而没有采用价格较高的时钟

6、芯片。2总体设计2.1系统总框图2.2原理及工作过程说明制作一个可编程作息时间控制器闹钟,当4路闹钟中的任一路到时,均会点亮灯、打铃。如有需求,可对程序进行调整,增加闹钟的路数及到时后的处理方式。定时闹钟的基本功能如下。显示时钟时间,格式为“时时:分分”,并可重新设置。显示闹铃时间,格式为“时时:分分”,且显示闪烁以便与时钟时间相区分。闹铃时间可重新设置。程序执行后工作指示灯LED闪烁,表示时钟工作为时钟显示模式.LCD显示的初始时间为“ 23:58”。按下K2,闪烁显示的“ 00:00”为闹铃的时间,单击 K3又返回时钟显示 模式。时钟从“ 23:58”开始计时,定时时间“ 00:00”到时

7、,继电器开关接通,控制电器的 开启,且可发出声响(可控)。时钟与闹铃时问的设置可通过4个功能按键KIK4实现,具体说明如下。(1) 时钟时间的设置: 首先单击KI进入时钟设置模式。 此时每单击一下 KI,则小时增I,单击一下K2,则分钟增1,再单击K3则设置完成,返回时钟显示模式。此时小时和分钟均 已发生变化。(2) 闹铃的时间设置:首先单击,K3进入闹铃的设置模式。此时每单击一下KI,则小时增1,单击一下 K2,则分钟增I,最后单击.K3则设置完成,返回闹铃显示模式。此时闹 铃的小时和分钟均已发生变化。(3) K4的功能:闹钟更换。(4) K2单独的功能:显示闹铃时间。2.3系统电路图LCD

8、1LM016LC130pFC2X1工U1CRYSTAL1231 XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSEP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/INTLP1.3P3.3/INTP1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WR-P1.7P3.7/RD-19VDDdE90VCCR

9、24S RDGnsVv211110 32.3836.35 34riRM B0IO32013-03-e;500 12 3 4 5 6 7DDDDDDDDBUZ1RX8VCC-1L-300SW1SW-SPST3详细设计3.1主程序部分的设计程序部分主要采用了程序结构的模块化设计, 避免了一些函数的不必要的重复书写, 使 程序变得单间易懂。程序在执行时,主程序要须通过调用子函数就可完成相应的功能 。主 程序流程图如下图 3-1 。图3-1主程序流程图83.2独立式键盘的接口电路P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51在单片机应用系统中,有时只需要几个简单的按键向

10、系统输入信息。这时,可将每个按键接在一根I/O接口线上,这种方式的连接称为独立式键盘。每个独立式按键单独占有一根I/O接口线,每根I/O接口线的工作状态不会影响到其他I/O接口线。这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O接口线,I/O接口线浪费较大。故只在按键数量不多时采用这种按键电路。在此电路中,按键输入都采用低电平有效。3.3 1602LCD液晶显示器LCD1LM016L7D6D5D4D3d2d1DODE 得 CS EEV DPV SSV1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为 光的厚,是否带背光在应用中并无差别

11、,两者尺寸差别如下图HD4478Q带背光的比不带背3-3-1所示:F-0.0r75.fr-73 7r亠*-2 54.-1OOOQOOOOOQQOQQOO 16細乩ED*13.0,R1, 25 L9 0 *匚I. 5 -图3-3-11602LCD尺寸图 1602LCD主要技术参数: 显示容量:16 X2个字符 芯片工作电压:4.5 5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95 X 4.35(WX H)mm引脚功能说明各引脚接口说明如表3-11602LCD采用标准的14脚(无背光)或16脚(带背光)接口, 所示:表3-1 :弓I脚接口说明表编号符号;引脚说明

12、编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和

13、R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0- D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。10. 8. 2. 3 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表 3-2所示:表3-2 :控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000

14、001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数至U CGRA或 DDRAM10要写的数据内容11从 CGRAM或 DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码 01H,光标复位到地址 00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D :光标移动方向,高电平右移,低电平左移S:屏幕上

15、所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C :控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C :高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL :高电平时为4位总线,低电平时为 8位总线N :低电平时 为单行显示,高电平时双行显示 F:低电平时显示5x7的点阵字符,高电平时显示 5x10的 点阵字符。指令7:字符发生器 RAM地址设置。指令& DDRA地址设置。指令9:读忙信号和光标地址 BF

16、 :为忙标志位,高电平表示忙,此时模块不能接收命 令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:表3-3 :基本操作时序表读状态输入RS=L,R/W=H E=H输出D0- D7= 犬态字写指令输入RS=L,R/W=L,D0- D7=f令码,E= 高脉冲输出无读数据输入RS=H R/W=H E=H输出D0- D7=据写数据输入RS=H R/W=L D0。7=数据,E=高脉冲输出无读写操作时序如图 3-3-2和3-3-3所示:图3-3-3写操作时序1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指

17、令之前一定要确认模块的忙标志为 低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模 块在哪里显示字符,图 3-3-4是1602的内部显示地址。LCD16字X2行00 0! 02 03 04 05 06 07 08 09 0A OB 0C 0D 0E 0F 10 27404142434445|464748494A4B404D4E轩5067图3-3-4 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是 0100

18、0000B( 40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式, 在液晶模块显示字符时光标是自动右移 的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM已经存储了 160个不同的点阵字符图形,如图3-3-5所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名 等,每一个字符都有一个固定的代码,比如大写的英文字母“ A”的代码是 01000001B(41H),显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“ A”* 13-4 CGRO

19、M和中半持代码与字特88麻対臣关豪0000001OOH01000101ClioOil!s101Q101!1HQUH1100noiXXX XOOOCOGRAM(1)0Ppf三tPXXX XD0414 -IAQ丄广n7f IA41XXXX00SQ2HR :bLdrA用XXXXXW1)3csc无1gXXX xotooDTd 1dV七戶DX X XX01G1(KsHE JU丄上才+JUH0xxx xonocn&AFVf工3PXXX KOlll(87GwpdZJ上X予X x xxiooo(I)aKX h夕卜UXX XX X1M19IYiy旦*-1yXXX X 1010)I:JZ厂Aki千xxxxion(

20、4)+ItKkI*tOKX X X X 110Q5)7N*SI3八MnX XX XU订| TOo76詳图3-3-5字符代码与图形对应图1602LCD的一般初始化(复位)过程延时15mS写指令38H (不检测忙信号)延时5mS写指令38H (不检测忙信号)延时5mS写指令38H (不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令OCH显示开及光标设置3.4闹钟子函数闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。其工作流程图如下图3-4 。图3-44总结通过

21、自己的不懈努力,我终于完成了设计的任务要求。功能上基本达标:时钟的显示,日期显示,调时功能、校时功能、闹铃功能、闹钟设功能。其精确可以满足日常生活显 示时间的需要。在本次设计的过程中, 我发现很多的问题, 虽然以前没有做过这样的设计但 通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的

22、课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此, 程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。参考文献1 单片机原理及应用(第二版)张毅刚 彭喜元 彭宇北京高等教育出版社2 刘和平.单片机编程与入门.重庆大学出版社,2002.68-99,111-1223 陈明荧.89C51单片机课程设计实训教材.清华大学出版社,2003.38-67,102-118附录#in clude#defi ne uint un sig ned int#defi ne uchar un sig ned charsb

23、it key1=P1A0;sbit key2=P1A1;sbit key3=P1A2;sbit key4=P1A3;sbit Icde n=P3A4;sbit Icdrs=P3A5;sbit Icdrw=P3A6;sbit Ied=P2A2;sbit sou nd=P2A7;int a,b,i, min, hour,m in ge, min shi,hourge,hourshi,sec,secge,secshi,c nt,c nt1, nian=2013,yue=5,ri=5,amin 1=1,ahour1,am in ge1,am in shi1,ahourge1,ahourshi1,ami

24、n 2=1,ahour2,am in ge2,am in shi2,ahourge2,ahourshi2,amin 3=1,ahour3,am in ge3,am in shi3,ahourge3,ahourshi3,amin4=1,ahour4,am in ge4,am in shi4,ahourge4,ahourshi4;uchar code table1=0,1,2,3,4,5,6,7,8,9;uchar code table2=Time:00:00;uchar code Alarm_1=Alar1:00:00;uchar code Alarm_2=Alar2:00:00;uchar c

25、ode Alarm_3=Alar3:00:00;uchar code Alarm_4=Alar4:00:00;uchar code riqi=2013-05-06;uchar nu m1, nu m2,alarm1,alarm2,alarm3,alarm4;bit flag=0;void delay (un sig ned int z)延时程序uint i,j;for(i=z; i0;i-)for(j=110;j0;j-);void write_com(uchar com)/LCD命令控制,写指令函数delay(5);lcdrs=O;PO=com;delay(5);Icde n=1;delay

26、(5);Icde n=0;void write_data(uchar date)/LCD 数据控制,写数据函数delay(5);lcdrs=1;P0=date;delay(5);lcde n=1;delay(5);lcde n=0;void write_ nian( uchar add , uint date)/ 年显示函数uchar qia n,bai,shi,ge;qia n=date/1000;bai=(date-1000*qia n)/100;shi=(date-qia n*1000-bai*100)/10;ge=date%10;write_com(0x80+0x40+add);wri

27、te_data(table1qia n);write_data(table1bai);write_data(table1shi);write_data(table1ge);void write_yue(uchar add , uchar date)/ 月显示函数uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);void write_ri(uchar add , uchar date)日显示函数uchar shi,ge;shi=date/10;

28、ge=date%10; write_com(0x80+0x40+add); write_data(0x30+shi);write_data(0x30+ge);void qi()write_ nian (0, nia n); write_yue(5,yue);write_ri(8,ri);write_com(0x80+0x40+7); write_data(-);write_com(0x80+0x40+4); write_data(-);void time()设置时间函数while(1)if(ke y仁=0)delay(10);if(key1=0) if(hour=23)/时”设置hour=0;

29、elsehour+;hourge=hour%10;hourshi=hour/10;write_com(0x0f);delay(2);write_com(0x80+6);write_data(table1hourge);/时”个位写入 LCD 第 1 行第 6 位delay(5);write_com(0x80+5);delay(2);write_data(table1hourshi); while(!key1);if(key2=0)delay(10);if(key2=0)if(min=59)mi n=0;elsemi n+;min ge=min %10;min shi=mi n/10; writ

30、e_com(0x0f); write_com(0x80+9); write_data(table1 min ge);二行第9位delay(1); write_com(0x80+8); write_data(table1 min shi);行第8位delay(1); while(!key2);if(key3=0)delay(10);if(key3=0)write_com(0x0c);TR1=1;while(!key3); break;置完毕void display1()设置闹钟1时间函数/时十位写入LCD第1行第5位/分设置/分个位写入LCD第/分十位写入 LCD第二/整体显示,关光标,不闪烁/

31、定时计数器1启动/key3松开时,显示时间”时分位均已设while(1)if(ke y仁=0)delay(10);if(key1=0)if(ahour仁=23)/闹钟”时”设置ahour1=0;elseahour1+;ahourge 仁ahour1%10;ahourshi仁ahour1/10;write_com(0x0f);write_com(0x80+0x40+8);write_data(:);write_com(0x80+0x40+7);write_data(table1ahourge1);delay(1);write_com(0x80+0x40+6);write_data(table1a

32、hourshi1);delay(1);while(!key1);if(key2=0)/闹钟”分”设置delay(10);if(key2=0)if(ami n1=59)amin 1=0;elseamin 1+;amin ge1=am in 1%10;amin shi1=am in 1/10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1am in ge1);delay(1);write_com(0x80+0x40+9);write_data(table1am in shi1);delay(1);while(!key2);if(k

33、ey3=0)alarm1=alarm1;delay(10);if(key3=0)write_com(0x0c);write_com(0x80+0x40);for(i=0;i11;i+)write_data(riqii);while(!key3);break;设置结束,此时LCD第二行无数据显示只有第一行有时间显示void display2()设置闹钟2时间函数while(1)if(ke y仁=0)delay(10);if(key1=0)if(ahour2=23)/ 闹钟”时”设置ahour2=0;elseahour2+;ahourge2=ahour2%10;ahourshi2=ahour2/1

34、0;write_com(0x0f);write_com(0x80+0x40+8);write_data(:);write_com(0x80+0x40+7);write_data(table1ahourge2);delay(1);write_com(0x80+0x40+6);write_data(table1ahourshi2); delay(1);while(!key1);if(key2=0)/闹钟”分”设置delay(10);if(key2=0)if(ami n2=59)amin 2=0;elseamin 2+;ami nge2=ami n2%10; amin shi2=am in 2/10

35、; write_com(0x0f);write_com(0x80+0x40+10); write_data(table1am in ge2); delay(1);write_com(0x80+0x40+9); write_data(table1am in shi2); delay(1);while(!key2); if(key3=0)alarm2=alarm2;delay(10);if(key3=0)write_com(0x0c); write_com(0x80+0x40);设置结束,此时 LCD第二行无数据显示for(i=0;i11;i+) write_data(riqii); while(

36、!key3); break;只有第一行有时间显示void display3()设置闹钟3时间函数while(1)if(ke y仁=0)delay(10);if(key1=0) if(ahour3=23)/ 闹钟”时”设置ahour3=0;elseahour3+; ahourge3=ahour3%10; ahourshi3=ahour3/10; write_com(0x0f); write_com(0x80+0x40+8); write_data(:); write_com(0x80+0x40+7); write_data(table1ahourge3); delay(1);write_com(

37、0x80+0x40+6); write_data(table1ahourshi3); delay(1);while(!key1);if(key2=0)/闹钟”分”设置delay(10);if(key2=0)if(ami n3=59)amin 3=0;elseamin 3+;ami nge3=ami n3%10; amin shi3=am in 3/10; write_com(0x0f); write_com(0x80+0x40+10); write_data(table1am in ge3); delay(1);write_com(0x80+0x40+9);write_data(table1a

38、m in shi3);delay(1);while(!key2);if(key3=0)alarm3=alarm3;delay(10);if(key3=0)write_com(0x0c);write_com(0x80+0x40);for(i=0;i11;i+)write_data(riqii);while(!key3);第二行无数据显示break;设置结束,此时LCD只有第一行有时间显示void display4()设置闹钟4时间函数while(1)if(ke y仁=0)delay(10);if(key1=0) if(ahour4=23)/ 闹钟”时”设置ahour4=0;elseahour4+

39、;ahourge4=ahour4%10;ahourshi4=ahour4/10; write_com(0x0f); write_com(0x80+0x40+8); write_data(:);write_com(0x80+0x40+7);write_data(table1ahourge4);delay(1);write_com(0x80+0x40+6);write_data(table1ahourshi4);delay(1);while(!key1);if(key2=0)/闹钟”分”设置delay(10);if(key2=0)if(am in4=59)amin4=0;elseamin 4+;a

40、min ge4=am in 4%10;amin shi4=am in4 /10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1am in ge4);delay(1);write_com(0x80+0x40+9);write_data(table1am in shi4);delay(1);while(!key2);if(key3=0)alarm4=alarm4;delay(10);if(key3=0)write_com(OxOc);write_com(0x80+0x40);for(i=0;i11;i+)write_data(ri

41、qii);while(!key3);break;设置结束,此时LCD第二行无数据显示只有第一行有时间显示void keysca n()键盘扫描if(key1=0)delay(10);if(ke y仁=0)key1键松开后执行下一行程序/调用time()函数,即时间设置while(!key1); time();else if(key2=0)cn t1+;delay(10);if(cn t1=1)while(!key2)ahourge仁ahour1%10; ahourshi仁ahour1/10; write_com(0x80+0x40+7);write_data(table1ahourge1);

42、delay(5);write_com(0x80+0x40+6); delay(2);write_data(table1ahourshi1); amin ge1=am in 1%10;amin shi1=am in 1/10; write_com(0x80+0x40+10); write_data(table1am in ge1); delay(5);write_com(0x80+0x40+9);delay(2); write_data(table1am in shi1); write_com(0x80+0x40);for(i=0;i11;+i) write_data(Alarm_1i);wri

43、te_com(0x80+0x40); for(i=0;i11;i+) write_data(riqii);时间,闹钟设置时间不显示if(cn t1=2)while(!key2)ahourge2=ahour2%10; ahourshi2=ahour2/10; write_com(0x80+0x40+7);write_data(table1ahourge2); delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1ahourshi2); amin ge1=am in 1%10;amin shi1=am in 1/10; write_co

44、m(0x80+0x40+10); write_data(table1am in ge2); delay(5);write_com(0x80+0x40+9); delay(2);write_data(table1am in shi2);write_com(0x80+0x40); for(i=0;i11;+i) write_data(Alarm_2i);write_com(0x80+0x40); for(i=0;i11;i+) write_data(riqii);时间,闹钟设置时间不显示if(cn t1=3)/显示闹钟设置的时间/key2松开后,LCD只有第一行显示显示闹钟设置的时间/key2松开

45、后,LCD只有第一行显示while(!key2)ahourge3=ahour3%10;ahourshi3=ahour3/10; write_com(0x80+0x40+7); write_data(table1ahourge3); delay(5);write_com(0x80+0x40+6); delay(2);write_data(table1ahourshi3); amin ge1=am in 1%10;amin shi1=am in 1/10; write_com(0x80+0x40+10); write_data(table1am in ge3); delay(5);write_co

46、m(0x80+0x40+9); delay(2);write_data(table1am in shi3);/显示闹钟设置的时间key2松开后,LCD只有第一行显示write_com(0x80+0x40); for(i=0;i11;+i) write_data(Alarm_3i);write_com(0x80+0x40); for(i=0;i11;i+) write_data(riqii);时间,闹钟设置时间不显示if(cnt1=4)while(!key2)ahourge4=ahour4%10; ahourshi4=ahour4/10; write_com(0x80+0x40+7); writ

47、e_data(table1ahourge4); delay(5);write_com(0x80+0x40+6); delay(2);write_data(table1ahourshi4); amin ge1=am in 1%10;amin shi1=am in 1/10; write_com(0x80+0x40+10); write_data(table1am in ge4); delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1am in shi4);write_com(0x80+0x40);for(i=0;i11;+i)wri

48、te_data(Alarm_4i);/显示闹钟设置的时间write_com(0x80+0x40);for(i=0;i4)cn t 仁0;else if(key3=0)cn t+;delay(10);if(c nt=1)while(!key3);表示闹钟时间设置退出ahourge仁ahour1%10;ahourshi仁ahour1/10;write_com(0x80+0x40+7);write_data(table1ahourge1);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1ahourshi1);amin ge1=am in 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论