课程设计(论文)-基于单片机的多功能电子时钟系统.doc_第1页
课程设计(论文)-基于单片机的多功能电子时钟系统.doc_第2页
课程设计(论文)-基于单片机的多功能电子时钟系统.doc_第3页
课程设计(论文)-基于单片机的多功能电子时钟系统.doc_第4页
课程设计(论文)-基于单片机的多功能电子时钟系统.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的多功能电子时钟系统 JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 电子系统设计 课 题: 基于单片机的多功能电子时钟系统 学 院: 电 气 信 息 工 程 学 院 专 业: 电子信息工程 班 级: 08电子1班 姓 名: 学 号: 指导老师: 刘晓杰 日 期: 2012-1-4 目录摘要3一、绪论41.1课题的目的与意义41.2选题的任务内容及技术指标4二、系统方案设计42.1系统总方案的确定42.2 主要模块的方案对比论证52.2.1 单片机的选择52.2.2时钟模块的选择52.2.3 显示模块的选择52.2.4按键电路模块的选择52.3系统实现的总体框图5三、硬件电路设计63.1单片机系统电路的设计63.1.1单片机简介:63.1.2单片机89C52引脚图及功能简介73.2时钟模块的设计83.2.1 DS1302简介及引脚功能介绍83.2.2本系统中DS1302电路接线图93.3 LCD1602显示模块的设计93.3.1引脚功能说明93.3.2本系统中LCD1602电路接线图103.4按键电路模块的设计103.4.1 本系统中4*4矩阵键盘接线图:103.5 蜂鸣器电路模块的设计113.6复位电路模块设计11四、系统的软件设计124.1 软件设计的整体思路124.2软件设计154.2.1 DS1302 驱动程序154.2.2 LCD1602驱动程序174.2.3 键盘扫描程序18五、测试结果205.1时间、日期的显示:205.2 时间、日期的校准205.3 秒表的操作20六、总结21七、参考文献21八、附录22附录一、元器件清单22附录二、电路原理图23附录三、源程序清单24摘要本设计要实现一个多功能电子时钟系统,包括硬件设计和软件设计,并重点讨论了模块软件设计和编程思想。该系统以51单片机为核心,设计中采用STC89C52芯片、DS1302时钟芯片及LCD1602液晶显示器,附加必要地外围电路,整体由5V电源供电,再通过编写配套的C语言程序,实现年、月、日、时、分、秒、星期在LCD显示屏上显示。此外还实现了整点报时和秒表功能。电子时钟主要利用电子技术将时钟电子化,数字化,具有时钟精确、体积小、可扩展性能强等特点,也可通过改装增加新功能,从而被广泛应用于生活和工作中。关键词:电子时钟、单片机、C语言Abstract The design to achieve a multifunctional electronic clock system, including hardware design and software design, and discussed the module software design and programming.The system with 51 single chip as the core, is adopted in the design of STC89C52 chip, the DS1302 chip and LCD1602 liquid crystal display, additional necessary peripheral circuits, which consists of 5V power supply, and then through the preparation of supporting C language program, to achieve annual, month, day, week, when minutes and seconds, displayed in the LCD display. In addition to realize the whole point timekeeping and stopwatch functions. Electronic clock main use of electronic technology, electronic clock, digital clock, with precision, small volume, scalable performance and other characteristics, can also be modified to add new function, which is widely used in life and work.Key words: electronic clock, single-chip, C language一、绪论1.1课题的目的与意义(1) 课题的目的: 进一步熟悉和巩固所学的理论知识和实践技能,培养学生综合运用所学理论知识和实践知识独立完成课题的工作能力。(2) 课题的意义: 多功能电子时钟是一种基于单片机技术来实现年、月、日、时、分、秒计时的装置,同时系统还有快速校准时间、秒表计时等功能,与机械时钟相比,既有更高的准确性和直观性,使用寿命更长。1.2选题的任务内容及技术指标1、设计任务设计制作一台利用单片机作为核心控制的多功能电子时钟系统2、技术指标(1)、系统具有3种工作模式状态(正常时钟显示模式、系统校准模式,秒表计时模式)(2)、在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。 (3)、在正常时钟显示模式时,时钟具有整点报时功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每隔1秒鸣叫一次,前4响为低音,后1响为高音,共鸣叫5次,最后一响结束时为整点。高音频率为1KHZ(4)、在系统校准模式时,系统具有快速校准时间的功能,(5)、在秒表计时模式时,可兼做比赛时间记录表,秒表计时的精确度0.1 秒 ,由三个键分别控制秒表启动,清零,记录功能,可连续记录三组时间。并能够显示记录时间。(6)、系统显示器采用LCD液晶显示器1602或其他显示器件,并采用键盘对相关数据进行设置与操作。二、系统方案设计 2.1系统总方案的确定方案一:基于单片机的多功能电子时钟系统: 设计中采用STC89C52芯片、DS1302时钟芯片及LCD1602液晶显示器,附加必要地外围电路(复位电路、晶振电路、按键电路等)构成电子时钟,在这些硬件的基础上,通过编写相应的软件程序,实现年、月、日、时、分、秒在LCD上的显示及整点报时,秒表等功能,通过按键电路对这些功能进行控制。软件用C语言编写,虽然汇编语言时间比较精准(一条语句一般是12个时钟周期),但是工程化不强,如果想建立较为复杂的工程一般都采用C语言。 方案二:基于EDA的电子时钟系统:以FPGA为核心,利用EDA技术自顶向下的设计方法,设计电子时钟的各模块及相应的具体电路,分别有时间计数模块、键盘控制模块、显示电路模块及时间调整模块等。运用VHDL语言编程仿真,再生成各个小模块的模拟元件,再元件例化,根据设计连接电路实现电子时钟系统。设计周期短,对硬件电路的要求不高。 根据分析:方案一较适合;方案一综合性较强。时间精度高,而且软件和硬件结合能够更好的实现所需功能,方案二进行测试时会有较小的误差显示,而且对硬件的焊接和调试要求不高。所以方案一较适合。2.2 主要模块的方案对比论证 2.2.1 单片机的选择单片机有多种方案的选择,如飞思卡尔XS128,凌阳SPCE061A语音单片机,AVR等,但51单片机价格便宜,使用方便,操作简单,针对题目的要求,STC89C52八位单片机已足够胜任,所以本设计采用STC 89C52做处理器控制模块。2.2.2时钟模块的选择时间的生成可采用52单片的定时中断实现, 优点:硬件电路设计简单,操作简便;缺点:软件设计较为复杂,精确度低,而且掉电不保存。 时间的生成亦可用时钟芯片DS1302来实现。其内部含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路.提供秒分时日日期.月年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式.DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:1 RES 复位,2 I/O 数据线,3 SCLK串行时钟.时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信.DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW。所以选择DS1302芯片来实现时钟的生成。2.2.3 显示模块的选择显示模块可以选择数码管,但设计任务中要求显示年、月、日、时、分、秒,而且还能有显示三组秒表的功能,这样就需要多个数码管,硬件电路设计的相应的边复杂。采用LCD1602显示,LCD1602液晶显示可以显示32个字符,既可以显示数字,亦可以显示字母,符合设计任务中对显示的要求,而且硬件电路的焊接相应的比较简单,所以现实模块选择LCD1602液晶显示。2.2.4按键电路模块的选择按键电路可以采用简单的单个I/O口键盘,每个按钮占用一个I/O口,程序较为简单,但在设置时间时,数字的加减过程较为复杂,操作繁琐。采用4*4矩阵键盘电路,键盘是由16个按键组成的开关矩阵,是最简单的,也是最常用的单片机输入设备,它能够快速的设置和校正时间,按键大方,美观,易操作。2.3系统实现的总体框图STC89C52复位电路按键电路晶振电路蜂鸣器LCD1602显示驱动电路电源电路DS1602时钟芯片电路 图4.1 系统方案图 描述:以STC89C52芯片为核心,时钟晶振电路使单片机各功能部件有条不紊的工作,复位电路实现单片机的复位,按键电路实现系统模式的选择和时间的设置等,通过软件控制对芯片内部数据进行读取并在显示器上显示。电源电路为各个模块的电路供电。三、硬件电路设计3.1单片机系统电路的设计3.1.1单片机简介: 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性! STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。 3.1.2单片机89C52引脚图及功能简介 图3.1单片机89C52引脚图引脚功能简介:单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。1、 电源(1) VCC芯片电源,接5V;(2) VSS接地端;2、 时钟XTAL1、XTAL2:晶体振荡电路反相输入和输出端。3、 控制线(1) ALE/PROG:地址锁存允许/片内EPROM 编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。(2) PSEN:外ROM读选通信号。(3) RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在VCC掉电情况下,接备用电源。(3) EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。4、 I/O线89C52共有4个8位并行I/O端口:P0口、P1口、P2口、P3 口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。P0:经上拉电阻后作为液晶模块的数据输入端。P2.7作为LCD1602的RS端P2.6作为LCD1602的RW端P2.5作为LCD1602的EN端P2.3 作为蜂鸣器的输出端P3.4作为DS1302的CLK端P3.5作为DS1302的IO端P3.6作为DS1302的RST端P0:矩阵键盘电路的输入端3.2时钟模块的设计3.2.1 DS1302简介及引脚功能介绍美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302芯片主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。第8引脚经30欧姆电阻与备用纽扣电池连接,作为主电源掉电后给DS1302提供电源,以保证时间的正常运行。 3.2 DS1302引脚功能图DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。Vcc1经30欧姆电阻与备用纽扣电池连接,作为主电源掉电后给DS1302提供电源,以保证时间的正常运行。3.2.2本系统中DS1302电路接线图 3.3 LCD1602显示模块的设计3.3.1引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-1所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表3-1:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LCM的数据总线与单片机的P0口相接,控制线分别与P2.7,P2.6,P2.5相接。LCM的第3个引脚接上了10K欧姆的可调电阻,用于调节液晶屏的对比度。3.3.2本系统中LCD1602电路接线图3.4按键电路模块的设计矩阵键盘又称行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线,组成的键盘,在行线和列线的每一个交叉点上,设置一个按键,这样键盘的个数是4*4个,这种行列式键盘结构能够有效地提高单片机系统中I/O的利用率。3.4.1 本系统中4*4矩阵键盘接线图:3.5 蜂鸣器电路模块的设计P2.3做为蜂鸣器发声的控制引脚,高低电平经P2.3输出,并经过8550, 三极管驱动蜂鸣器的通与断电,引起蜂鸣器中薄膜的震动从而发出声音,高低电平的频率即为发声的频率。蜂鸣器接线图3.6复位电路模块设计V0 为电容上的初始电压值;V1 为电容最终可充到或放到的电压值Vt 为t时刻电容上的电压值有:Vt = V0 +(V1-V0)X 1-exp(-t/RC) t = RC X Ln(V1-V0)/(V1-Vt)复位电路接线图:四、系统的软件设计4.1 软件设计的整体思路整个软件系统采用模块化思想,把1602,DS1302,键盘的驱动程序做成头文件,在功能程序中调用。采用这种方法不仅使程序模块化,使程序结构层次分明,便于管理和维护,同时可方便以后开发的调用,只要包含头文件,功能程序模块中再调用接口函数就可以了,而不必关心底层驱动是如何实现的,这样缩短了开发周期,开发效率大大提高。主程序采用事件驱动机制,事件为某个按键按下,则主程序响应这个按键,并进入相应的功能程序,其编程思想如下:YY设置模式为0?调用设置功能程序设置模式为1?调用时间显示功能程序NN主程序其中改变设置标记的状态为“设置”键:当第一次按下“设置”键时,改变设置模式为0,表示主程序应该响应设置事件,进入显示时间状态。当第二次按下“设置”键时 ,设置模式为1,表示主程序响应显示时间事件,进入调整时间时间状态。再按“设置”键时,进入秒表计时状态。键盘电路设计思路:按键处理中采用了基于状态机的程序调度机制,当某个按键按下时,改变其状态,再根据状态散转去执行相应的程序,达到了一键多义的效果。而在输入值时,直接按09键值输入。4*4键盘分布如下图:1247设置580369光标空启动清0记录系统主程序的流程图:YYYN开始I/O初始化DS1302初始化定时中断初始化读取DS1302的静态RAM中的时间1:调整时间键盘扫描进入设置状态退出?2:正常显示调用读取时间函数并显示时间定时中断初始化整点时间到?显示并蜂鸣50s到?3:秒表模式NNYYYNNN键盘扫描进入设置状态退出键盘扫描4.2软件设计4.2.1 DS1302 驱动程序#ifndef _DS1302_h#define _DS1302_hsbit ACC0 = ACC0;sbit ACC7 = ACC7;sbit T_CLK = P34; /实时时钟时钟线引脚sbit T_IO = P35; /实时时钟数据线引脚sbit T_RST = P36; /实时时钟复位线引脚void v_RTInputByte(uchar ucDa)/往DS1302写入1Byte数据uchar i;ACC = ucDa;T_RST = 1;for(i=8; i0; i-)T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC 1;uchar uc_RTOutputByte(void) /从DS1302读取1Byte数据uchar i;T_RST = 1;for(i=8; i0; i-)ACC = ACC 1;T_IO = 1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0;return(ACC);void v_W1302(uchar ucAddr, uchar ucDa)/往DS1302写入数据T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); / 写地址 _nop_();_nop_();v_RTInputByte(ucDa); / 写1Byte数据T_CLK = 1;T_RST = 0;uchar uc_R1302(uchar ucAddr)/读取DS1302某地址的数据uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /写地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); /读1Byte数据T_CLK = 1;T_RST = 0;return(ucDa);uchar dectobcd(uchar dec)/DEC码转换为BCD码uchar bcd;bcd = 0;while(dec = 10) dec -= 10; bcd+; bcd = 4;data1 += bcd * 10;return data1;/*void Write_DS1302Init(void)/一开始往DS1302中写入数据v_W1302(0x8e,0x00);/允许写入数据v_W1302(0x80,0x45);/写入秒v_W1302(0x82,0x59);/写入分v_W1302(0x84,0x23);/写入小时v_W1302(0x86,0x01);/写入日v_W1302(0x88,0x01);/写入月v_W1302(0x8a,0x07);/写入星期v_W1302(0x8c,0x12);/写入年/*/#endif4.2.2 LCD1602驱动程序#ifndef _1602_H_#define _1602_H_sbit E = P25;/1602使能引脚sbit RW = P26;/1602读写引脚sbit RS = P27;/1602数据/命令选择引脚void enable(uchar del)/1602命令函数P0 = del;RS = 0;RW = 0;E = 0;delayms(2);E = 1;delayms(2);void write(uchar del)/1602写数据函数P0 = del;RS = 1;RW = 0;E = 0;delayms(2);E = 1;delayms(2);void L1602_init(void)/1602初始化,请参考1602的资料enable(0x01);/显示清屏,数据指针加1enable(0x38);/显示模式设置16*2enable(0x0c);/设置开显示,不显示光标enable(0x06);/写一个字符后地址指针加1enable(0xd0);/* 改变液晶中某位的值,如果要让第一行,第五个字符显示b ,调用该函数如下 L1602_char(1,5,b)*/void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang = 1) a = 0x80;/1602第一行的首地址是0x80if(hang = 2) a = 0xc0;/1602第二行的首地址是0xc0a = a + lie - 1;enable(a);write(sign);/*改变液晶中某位的值,如果要让第一行,第五个字符开始显示ab cd ef ,调用该函数如下 L1602_string(1,5,ab cd ef;)*/void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;/1602第一行的首地址是0x80if(hang = 2) a = 0xc0;/1602第二行的首地址是0xc0a = a + lie - 1;enable(a);while(1)if(*p = 0) break;write(*p);p+;#endif4.2.3 键盘扫描程序/*按键4*4矩阵扫描*/#ifndef _key_h_#define _key_h_#define key_check P1unsigned char key=0xff;void key_scan()uchar temp;uint i=0;uchar uu=0xfe;for(i=0;i4;i+) uu=_cror_(uu,1);/_cror_右移函数key_check=uu;temp=key_check;temp=temp&0xf0;if(temp!=0xf0) delayms(80); /按键消抖temp=key_check;temp=temp&0xf0;if(temp!=0xf0)temp=key_check;switch(temp)case 0xe7:key=10;break;case 0xd7:key=0;break;case 0xb7:key=11;break;case 0x77:key=12 ;break;case 0xeb:key=7;break;case 0xdb:key=8;break;case 0xbb:key=9;break;case 0x7b:key=13;break;case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=14;break;case 0xee:key=1;break;case 0xde:key=2;break;case 0xbe:key=3;break;case 0x7e:key=15;break;default : break; / key = 16;while(temp != 0xf0)/检测按键松开temp=key_check;temp=temp&0xf0;key_check = 0xff;#endif五、测试结果在时间显示界面下,显示模式0; 按一下“设置”键,显示模式,1,会有光标闪烁,再按光标键,依次时、分、年、月、日会闪动,表示对应的属性正在设置,此时按数字键,设定所要调整的时间;再“设置”键 ,进入秒表计时状态,按下“启动”键,秒表开始计时,按下“记录”键,开始记录第一组时间,再按“记录”键,记录第二组数据,再按“记录”键,记录第三组数据。按“设置”键,再次进入时间显示界面。5.1时间、日期的显示:5.2 时间、日期的校准5.3 秒表的操作在时间显示界面下,按下“设置”键,则进入秒表功能,按下“启动”键则开始计时,按下“记录”键,记录时间,按下三次“记录”键,记录三组数据, 按下“清0”键,则清零后可再计时,按下“设置”键则退出并回到时间显示界面。操作显示过程如下:六、总结在本次课程设计过程中,虽然非常顺利地完成了软件和硬件的设计和仿真,并最终实现了题目所要求实现的功能。但还有可深入研究和可改进之处。在调试过程中,最让人头痛的是使用了备份电池,当备份电池直接接在芯片时,芯片的发热量很大,经过查看数据手册,我认为是电池容量超过了芯片涓细充电电流所容许的容量,于是在和备用电池之间串联了30欧姆的电阻,减小充电电流,消除了DS1302的发热问题但不影响备用电池的功能。本课程设计让我了解到在撰写开题报告时,一定要考虑整个设计,软件和硬件综合考虑,再画硬件原理图时,一定要考虑到软件的编写,软硬件结合,才能做成达到所能符合要求的设计成果。本课程设计从软件设计到仿真到硬件制作和调试,我学到了不少东西,特别是在仿真编程和硬件仿真方面。在编程方面,知道了要适当的运用模块化思想和文件管理思想,设计程序时要考虑到程序的多种特性,在使用仿真软件时得到了一些启示:仿真只是提供一个实现的大概参考,真正的功能实现仍需在实际硬件调试中完善。仿真只是适当的判断了软件编程的正确性,真正判断软件编程的可行性,还是需要下载到硬件中。此次课程设计,让我学会了protus软件和keil软件的使用,为以后的学习奠定了一定的基础。七、参考文献1张桂红,姚建永.单片机原理与应用M.福州:福建科学技术出版社,2007,2793062石从刚.MCS-51单片机原理与应用实验实训教程M.北京:北京航空航天大学出版社,2006,76883谢振辉.改进式MCS-51单片机实验M.北京:科学出版社,2006,1261314侯媛彬,袁益民等.凌阳单片机原理及其毕业设计精选M.北京:科学出版社,2006,27305潘超群.单片机控制技术在通信中的应用-MCS-51系列M.北京:电子工业出版社,20076于永,戴佳,常江等,51单片机C语言常用模块与综合系统设计实例精讲M.北京:电子工业出版社,2007八、附录附录一、元器件清单单片机:STC89C52时钟芯片:DS1302液晶显示:LCD1602蜂鸣器三极管:8550(PNP)晶振:12Mhz、32.7Khz电位器:1K瓷片电容:20PF (4个)电解电容:10uF触电式按键:17个排阻:330*8电阻:4.7K (4个)、10K(2个)底座:2*4、2*20附录二、电路原理图附录三、源程序清单#include#include#include#define uchar unsigned char#define uint unsigned int#include delay.h#include 1602.h#include ds1302.h#include key.huchar keytemp;/键值的暂存uchar keyflag;/按键值有效确定标志uchar count,timecount;/设置键按键次数,定时器1的计时次数uchar sec, min, hour, week, day, month, year;/秒、分、时、星期、日、月、年的数据uchar model;/模式选择键uchar T_ms,T_sec,T_min;/秒表uint n;bit flag;bit f_sec,f_min,f_hour,f_week,f_day,f_month,f_year;/秒、分、时、星期、日、月、年的闪烁标志sbit beep = P23; /闹铃引脚void T_init(void)/定时器初始化TMOD= 0x11;/定时器0、1定时都工作在方式1 TH0 = 0x0D8;/定时时间:10ms TL0 = 0x0F0; TH1 = 0x3c; TL1 = 0x0b0; EA=1;/开总中断 ET0=1; /定时器0允许 ET1=1; TR0=0;/打开定时器0 TR1=0;void t0(void) interrupt 1 using 0/定时器0中断服务子程序 TH0 = 0x0D8; /定时时间:10ms TL0 = 0x0F0;T_ms+;if(T_ms 99)T_ms = 0;T_sec +;if(T_sec 59)T_sec = 0;T_min +;void t1(void) interrupt 3 using 1 TH1=0x3c; /50ms定时 TL1=0x0b0; timecount+; if(timecount9) timecount=0; flag = flag; void scan(void)/调整函数switch( count )case 1: f_hour=1;break;case 2: f_hour=0;f_min=1;break;case 3: f_min=0;f_sec=1;break;case 4: f_sec=0;f_year=1;break;case 5: f_year=0;f_month=1;break;case 6: f_month=0;f_day=1;break; default:f_sec=0;f_min=0;f_hour=0; f_day=0; f_month=0; f_year=0;break;/switch 结束void disp_time(void)sec = bcdtodec( uc_R1302( 0x81); /读出DS1302中的秒min = bcdtodec( uc_R1302( 0x83); /读出DS1302中的分hour = bcdtodec( uc_R1302( 0x85); /读出DS1302中的小时day = bcdtodec( uc_R1302( 0x87); /读出DS1302中的日month= bcdtodec( uc_R1302( 0x89); /读出DS1302中的月year = bcdtodec( uc_R1302( 0x8d); /读出DS1302中的年if(f_hour = 1 & flag = 1)/时闪烁标志位L1602_c

温馨提示

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

评论

0/150

提交评论