《毕业设计(论文)电子日历的制作51单片机的应用.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)电子日历的制作51单片机的应用.doc(43页珍藏版)》请在三一办公上搜索。
1、摘 要随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、星期、时、分、秒信息,还具有时间校准等功能。本系统以STC89C52RC单片机为核心,结合液晶模块LCD1602、专用时钟芯片DS1302等电路构成。时钟由美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302实现,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302
2、的使用寿命长,误差小。用LCD1602液晶显示日历、时钟,直观且显示信息丰富;用四个键盘实现时钟正常显示、调时及闹钟时间设置。本系统设计大部分功能由软件来实现,使电路简单明了,系统稳定性也得到大大的提高。关键词:电子日历 单片机 STC89C52RC DS1302目 录摘 要I第一章 绪论11.1 引言11.2 设计的难点和可能出现的问题11.2.1设计难点11.2.2可能出现的问题11.3本设计应达到的要求1第二章 总体方案设计32.1电子日历设计方案论证32.1.1单片机芯片的选择方案论证32.1.2显示模块的选择方案和论证32.1.3时钟芯片的选择方案和论证32.2系统框图4第三章 单元
3、硬件设计与分析53.1单片机模块设计53.1.1单片机的选型53.1.2 单片机最小系统63.2 日历模块电路设计83.3显示模块设计103.3.1 显示器的选型103.3.2 LCD1602引脚103.3.3 LCD1602与单片机接口电路设计113.4键盘电路设计113.5闹铃模块设计12第四章 系统软件设计134.1主程序设计134.2显示程序设计134.3按键扫描子程序设计144.4 DS1302日期时间数据读取显示设计14第五章 软硬件调试175.1硬件测试175.2软件测试175.3测试结果分析与结论175.3.1测试结果分析175.3.2 测试结论17第六章 总结与展望196.1
4、总结196.2展望19致 谢21参考文献23附录1元器件明细表25附录2 程序清单26第一章 绪论1.1 引言随着社会的不断发展及人们生活水平的不断提高,单片机控制已经越来越普及,它已经成为人们生活中必不可少的工具之一,它已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术, 其中电子日历就是一个典型的例子。本设计采用STC89C52RC单片机作为电子日历的控制模块。单片机可把由DS1302中的数据利用软件来进行处理,从而把数据传输到显示模块,日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠键盘来实现各种显示要求
5、的选择与切换。1.2 设计的难点和可能出现的问题1.2.1设计难点 (1)LCD显示模块的设计 (2)闹铃设计模块的实现设计 (3)单片机个功能模块的综合设计 (4)电路总体设计,元器件选择及焊接,调试1.2.2可能出现的问题 (1)LCD显示模块的功能显示不正常 (2)闹铃设计与其他时间功能设计冲突 (3)软件程序设计功能不完善,系统无法正常运转1.3本设计应达到的要求本课题以单片机为主控制器,采用专用日历时钟芯片或单片机内部定时器产生时钟信号,实现年、月、日、时、分、秒计数,并通过适当的方式显示出来,达到以下要求: 1能显示实时时钟、日历; 2允许误差:10秒/天; 3可以通过按键设置(调
6、整)时钟; 4显示模式:数码管或液晶显示; 第二章 总体方案设计2.1电子日历设计方案论证2.1.1单片机芯片的选择方案论证方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用STC89C52RC,片内ROM全都采用Flash ROM,能以3V的超底压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8
7、KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要导入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用STC89C52RC作为主控制系统。2.1.2显示模块的选择方案和论证方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以
8、也不用此种作为显示。方案三:采用LCD1602液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与单片机连接方便,所以在此设计中采用LCD1602液晶显示屏。2.1.3时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5
9、V时耗电小于300nA。2.2系统框图电子日历电路设计总体设计方框图如图2-1所示,控制电路采用单片机STC89C52RC,时钟电路采用DS1302,用LCD1602液晶显示实现时钟显示,闹铃模块采用电磁式蜂鸣器驱动。单片机模块STC89C52RC日历模块键盘模块闹铃模块显示模块图2-1 总体设计方框图第三章 单元硬件设计与分析整个电子时钟系统电路可分为五部分:单片机模块STC89C52RC、显示模块、日历模块、键盘显示、闹铃模块。3.1单片机模块设计3.1.1单片机的选型根据第二章单片机芯片的选择方案论证,选择采用STC89C52RC作为主控制系统,STC89C52RC引脚如图3-1所示。图
10、3-1 STC89C52RC各引脚图(1)VCC:STC89C52RC电源正端输入,接+5V。(2)VSS:电源地端。(3)XTAL1:单芯片系统时钟的反相放大器输入端。(4)XTAL0:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。(5)RESET:STC89C52RC的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,STC89C52RC便能完成系统重置的各项动作,使得内部特殊功能寄存
11、器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。(6)EA/Vpp:EA为英文External Access的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。(7)ALE/PROG:端口3的管脚设置:P3.0:RXD,串行通信输入;P3.1:TXD,串行
12、通信输出;P3.2:INT0,外部中断0输入;P3.3:INT1,外部中断1输入;P3.4:T0,计时计数器0输入;P3.5:T1,计时计数器1输入;P3.6:WR:外部数据存储器的写入信号;P3.7:RD,外部数据存储器的读取信号。3.1.2 单片机最小系统(1)复位电路设计STC89C52RC单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC
13、,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。电路如图3-2所示。图3-2 上电复位电路上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。(2)时钟电路设计时钟电路是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直
14、接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。电路如图3-3所示。图3-3 时钟电路STC89C52RC单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL04。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。单片机的最小系统如图3-4所示。图3-4 单片机最小系统 3.2 日历模块电路设计根据第二章时钟芯片的选择方案和论证,选择采用DS1302作为日历模块电路设计的核心。(1)DS1302的引脚及功能时钟电路采用DS1302,DS130
15、2是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能,工作电压为2.55.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时间数据或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM存储器。DS1302的封装和引脚功能分别如图3-5和表3.1所示。管脚号管脚名称功能1Vcc2主电源2、3X1、X232.768HZ4GND地5RST复位/片选断6I/O串行数据输入/输出7SCLK串行时钟输入端8Vcc1后备电源图3-5 DS1302的DIP封装图(2)DS1302复位
16、和时钟控制DS1302通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供了终止单字节或多字节数据的传送手段。当RST为高电平时,所有数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置RST为低电平,则会终止此数据传送,并且I/O引脚变为高阻状态。上电运行时,在VCC2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。表3.1 DS1302的引脚功能(3)DS1302的控制字节DS1302的控制字如表3.2所示。控制字节的高有效位(位7)必须是逻辑1,
17、如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。DS1302的控制字格式如表3.2所示。表3.2 DS1302的控制字格式765432101RAMA4A3A2A1A0RDCKWRDS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字如表3.3所示。表3.3 DS1302寄存器日历、时间寄存器及其控制字写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3
18、Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/241010时时AM/PM86H87H0010日日88H89H0010月月8AH8BH00000星期8CH8DH10年年8EH8FHWP0000000(4)DS1302的性能指标a.实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力;b.31 8 位暂存数据存储RAM;c.串行I/O 口方式使得管脚数量最少;d.宽范围工作电压2.05.5V;e.工作电流2.0V 时,小于300nA;f.读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式;g.8 脚DIP 封
19、装或可选的8 脚SOIC 封装根据表面装配;h.简单3 线接口;i.与TTL 兼容Vcc=5V;j.可选工业级温度范围-40 +85;k.对Vcc1 有可选的涓流充电能力;l.双电源管用于主电源和备份电源供应;m.备份电源管脚可由电池或大容量电容输入;3.3显示模块设计3.3.1 显示器的选型显示电路可以用数码管或液晶显示,显示方便,易于读数。本次设计采用1602液晶显示器,可以较直观的动态显示实时时钟,数据显示(误差限制在10秒每天)。3.3.2 LCD1602引脚显示电路采用LCD1602液晶显示器,引脚排列如图3-6所示,引脚功能如表3.4所示。图3-6 1602引脚图表3.4 LCD1
20、602引脚功能表引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线
21、3位11DB4高4位三态、 双向数据总线 12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极3.3.3 LCD1602与单片机接口电路设计以P0、P1口为1602字符点阵液晶显示模块的接口进行设计,接口电路如图3-7所示。 图3-7 LCD1602与单片机连接电路3.4键盘电路设计键盘的开关状态通过一定的电路转换为高、低电平状态。键盘闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、
22、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理键盘的一次闭合,应采用措施消除抖动。本设计采用的是独立式按键,如直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。如图3-8所示为4个键盘的独立式按键接口电路。图3-8 独立式键盘接口电路结构图SB0表示功能移位键,按键选择要调整的时十位、时个位、分十位或分个位。 SB1表示数字“+“键,按一下则对应的数字加1。SB2口表示数字“-”键,按一下则对应的数字减1。SB3口表示时间表的切换,程序默认为日常时间表,当按下该开关,
23、使输入为低电平时,表示当前执行的是考试时间表,并有绿发光二极管显示。再按键,使键抬起,输入维高电平时,表示当前执行的是日常作息时间表,用红发光二级管显示。3.5闹铃模块设计闹铃电路采用电磁式蜂鸣器驱动,蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,电磁式蜂鸣器驱动电路如图3-9所示。图3-9 电磁式蜂鸣器驱动电路蜂鸣器的正极接到VCC(5V)电源上面,蜂鸣器的负极接到三
24、极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。第四章 系统软件设计系统程序主要包括主程序、读出时钟子程序、1602液晶显示程序、DS1302时钟部分子程序等。4.1主程序设计系统进行过相关的初始化指令之后即开始执行万年历部分的程序:读取DS1302的日期时间数据信息、查询有无功能键按下。若有,则根据相应的按键进行对应的处理;若无,则显示。主程序框图如图4-1所示。程序清单见附录二。开始初始化是否有按键按下?读取时间数据并转
25、换成液晶字符读取日期数据并转化成液晶字符通过液晶显示时间、日期、星期YN进入时间调整模式图4-1 主程序流程图4.2显示程序设计显示程序主要将时钟芯片产生的日历信息显示出来,主要包含LCD1602的初始化、在指定位置显示信息,其流程图如图4-2所示。LCD1602初始化设定数据位置输入显示数据开始结束图4-2 显示程序流程图4.3按键扫描子程序设计调整时间用4个调整按钮,1个作为移位、控制用,另外3个分别作为加调整、减调整和复位用。在调整时间过程中,要调整的位与其他位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位示值给该位。时间调整程序流程图4-3所示。NYNY开始计时停
26、止对应位闪烁加键按下减键按下对应位时间加1对应位时间减1显示子程序返回,进入主循环是否按键盘0次数7次图4-3 时间调整程序流程图4.4 DS1302日期时间数据读取显示设计对于时钟芯片DS1302,公历日期时间显示只需从DS1302各寄存器读出年、月、日、时、分、秒、星期,再加处理即可。在首次对DS1302进行操作之前,必须进行初始化,然后从中读出数据,经过处理后,送给显示缓冲单元。其程序框图如图4-4示。 DS1302开始振荡从DS1302中读出电子日历初始化DS1302读出的数据都为BCD码,将其高低位分离,送显示缓冲单元开始图4-4 时间读取程序框第五章 软硬件调试5.1硬件测试电子万
27、年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。在本成电子万年历的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1)串口下载芯片232发烫,单片机晶振不起振(2)LCD1602在显示时间时出现黑格子,遮挡了时间(3)对万年历修改时间或日期时,有时时间改变2次。解决:根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振,复位正常,程序能够下载。LCD1602出现黑格子是由于在其第三引脚没加电
28、阻分压导致,加上5K电阻后正常。键盘延时较短致使按键次数多加。5.2软件测试电子成年历是多功能的数字型,可以看当前日期、时间。电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软件的调试过程中主要遇到的问题如下:(1)LCD1602显示的时间不完整,最后在液晶初始化程序中给加上该显示的数字即可。(2)在调整时间时光标闪烁不规律,原因的由于错用DS1302停振指令所致,最后加上一个变量进行控制即可。 5.3测试结果分析与结论5.3.1测试结果分析(1)在测试中遇到单片机晶振不起振、232芯
29、片发烫,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.(2)LCD1602液晶有黑色背景出现,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。查看烧写的程序是否正确无误,对程序进行认真修改。5.3.2 测试结论经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.第六章 总结与展望6.1总结 本项目已经经过调试运行最终实现了功能要求,通过多次测试表明,电子日历的各项性能完全达到设计要求。对电子日历的发展具有实际推广价值。在未来的
30、几年中电子日历装置一定会被广泛的应用各种场所,人们对这种电子日历系统一定会倍加青睐。电子日历制造成本低,环保,方便,省电,安全。总控制单元的硬件电路中多采用简易芯片,简化了电路设计,系统开发容易,在日常生活中都具有很强的适用性,具有实际推广价值;采用模块化设计,易于维护。6.2展望本项目研究的51单片机电子日历设计功能还较简单,还可以进行功能的扩展,具体如下:(1)可以用声控控制,如果没人可以自动关断,目前还不能实现这一功能。(2)可以测量房间的温度,温度低于一定的数值可以自动打开空调,温度高于一定的数值可以自动关闭空调。(3)可以测量房间的湿度参数。(4)本次做的项目主要是控制数字量,还可以
31、对模拟量进行控制。致 谢在论文完成之际,我首先向关心帮助和指导我的指导老师冯成龙表示衷心的感谢并致以崇高的敬意!在论文工作中,遇到了不少困难,一直得到冯成龙老师的亲切关怀和悉心指导,使我学到了许多平时学不到的知识,让我明白了理论联系实际,不能好高骛远。冯成龙老师以其渊博的学识、严谨的治学态度、求实的工作作风和他敏捷的思维给我留下了深刻的印象,我将终生难忘老师对我的教导。再一次向他表示衷心的感谢,感谢他为学生营造的浓郁学术氛围,以及学习、生活上的无私帮助! 值此论文完成之际,谨向冯成龙老师致以最崇高的谢意!在学校的学习生活即将结束,回顾两年多来的学习经历,面对现在的收获,我感到无限欣慰。为此,我
32、向热心帮助过我的所有老师和同学表示由衷的感谢!特别感谢我的师兄,以及师姐,老师,及班主任,对我的学习和生活所提供的大力支持和关心!还要感谢一直关心帮助我成长的室友!在我即将完成学业之际,我深深地感谢我的家人给予我的全力支持!最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家、教授!参考文献1谢自美.电子线路设计、实验、测试M.武汉:华中理工大学出版社,20002何书森,何华斌.实用数字电路原理与设计速成M.福州:福建科学技术出版社,2000.63白驹衍.单片计算机及应用M.北京:电子工业出版社, 1999.24王洪君.单片机原理及应用M.济南:山东大学出版社, 2009.25阎 石 .数字
33、电子技术基础M.第五版,北京:高等教育出版社,2008.126李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,19987李广弟.单片机基础M.北京:北京航空航天大学出版社,19948谢嘉奎.电子线路(线形部分),第四版.北京:高等教育出版社,1999.9. 童诗白,华成英. 模拟电子技术基础M. 北京:北京高等教育出社.2001 10. 何立民.MCS-51系列单片机应用系列设计M.航空航天大学出版社,2004附录1元器件明细表元器件名称参数备注单片机STC89C52RC(12MHZ)1晶体DRYSTAL 12MHZ1晶体DRYSTAL 32.768MHZ1时钟模块D
34、S13021存储器模块AT24C021LCD显示模块LCD16021三极管PNP90121闹铃1电容47F1电容22pF2电容10F1按键BUTTON7电阻(上拉电阻)10K15电阻1K15滑动变阻器47K2限流电阻0.1K8排阻RESPACK-8/10K1发光二极管(红/绿)10电源接口1开关5附录2 程序清单软件总程序:#include #include #include LCD1602.h#include DS1302.h#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P17; /实时时钟时钟线引
35、脚 sbit DS1302_IO = P16; /实时时钟数据线引脚 sbit DS1302_RST = P15; /实时时钟复位线引脚sbit wireless_1 = P30;sbit wireless_2 = P31;sbit wireless_3 = P32;sbit wireless_4 = P33;sbit ACC0 = ACC0;sbit ACC7 = ACC7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; /秒,分,时到日,月,年位闪的计数sbit Set = P20; /模式
36、切换键sbit Up = P21; /加法按钮sbit Down = P22; /减法按钮sbit out = P23; /立刻跳出调整模式按钮char done,count,temp,flag,up_flag,down_flag;uchar TempBuffer5,week_value2;void show_time(); /液晶显示程序/*1602液晶显示部分子程序*PortDefinitions*sbit LcdRs= P25;sbit LcdRw= P26;sbit LcdEn = P27;sfr DBPort=0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0
37、.数据端口内部等待函数unsigned char LCD_Wait(void) LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_(); LcdEn=0;return DBPort;/*向LCD写入命令或数据*#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input) LcdEn=0; LcdRs=st
38、yle;LcdRw=0; _nop_();DBPort=input;_nop_();/注意顺序LcdEn=1;_nop_();/注意顺序LcdEn=0;_nop_();LCD_Wait();/*设置显示模式*#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned
39、 char DisplayMode) LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/*设置输入模式*#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode) LCD_Write(LCD_COMMAND, 0x04|InputMode);/*初始话LCD*void LCD_Initial() LcdEn=0
40、;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动/*液晶字符输入的位置*void GotoXY(unsigned char x, unsigned char y) if(y=0) LCD_Write(LCD_CO
41、MMAND,0x80|x);if(y=1) LCD_Write(LCD_COMMAND,0x80|(x-0x40);/将字符输出到液晶显示void Print(unsigned char *str) while(*str!=0) LCD_Write(LCD_DATA,*str); str+; /*DS1302时钟部分子程序*/typedef struct _SYSTEMTIME_ unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned c
42、har Month;unsigned char Year;unsigned char DateString11;unsigned char TimeString9;SYSTEMTIME;/定义的时间类型SYSTEMTIME CurrentTime;#define AM(X)X#define PM(X)(X+12) / 转成24小时制#define DS1302_SECOND0x80 /时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH 0x88#define DS1302_YEAR0x8C void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i; ACC = d; for(i=8; i0; i-)