1、1课程设计论文题 目:电子钟院 (系):电子信息工程与自动化学院专 业:自动化学生姓名: 学 号:指导教师:2011 年 1 月 20 日21 .课程设计题目 .42 .系统方案设计 .42.1 系统总体方案设计 .42.2 主要模块方案选择和论证 .52.2.1 单片机的选择 .52.2.2 时间生成模块的选择 .52.2.3 显示模块的选择 .52.2.4 定时时间到指示 .52.2.5 按键的设计 .53 .硬件电路设计 .63.1.1 单片机系统电路的设计: .63.1.2 时钟芯片和按键电路设计 .63.1.3 LCM1602 模块和蜂鸣器电路的设计 .63.1.4 系统硬件总电路图
2、: .73.1.5 总系统电路的 PCB 图 .74 .软件设计 .84.1 系统软件设计 .84.1.1 主程序的事件顺序驱动机制 .84.1.2 网状多级状态结构的按键处理 .84.1.3 秒表的定时中断 .94.1.4 系统主程序的流程图 .104.2 模块软件设计 .114.2.1 LCM1602 的驱动程序 .114.2.2 DS1302 的驱动程序 .114.2.3 闹钟蜂鸣的驱动程序 .124.2.4 掉电状态保存设计 .125 .操作说明和最终实现 .125.1 整体总装图: .125.2 操作说明 .135.2.1 时间,日期,闹钟的设置 .135.2.2 闹钟开/关的设置
3、.135.2.3 在闹钟蜂鸣时停止闹钟 .135.2.4 秒表的操作 .146 .讨论 .147 .总结 .15主要元器件清单: .1532010 年上学期单片机课程设计论文电子钟姓名:XX 学号:XXXX 日期 2011-1-20摘 要本文叙述了电子钟的整个设计过程,包括硬件设计和软件设计,并重点讨论了模块软件设计和编程思想,并在本文末尾进行了讨论和总结,提出了改进的方面和改进的方法。完成的电子钟具有走时准确;掉电长时间后时间不需重新设置;闹钟时间和开关状态掉电保存;秒表功能计时准确;功耗低,操作界面友好,操作简便;最大的特点是具有人性化的设计。关键词:电子钟 硬件设计 软件设计 编程思想
4、掉电保存 人性化 Abstract:This article narrated electron clocks entire design process, including the hardware design and the software design, and discussed the module software design and the programming thought with emphasis, and has carried on the discussion and the summary end of this article, proposed th
5、e improvement aspect and the improvement method. Completes the electron clock has is in luck accurately; After power failure the long time, the time cannot the reset; Alarm clock time and on-off state power failure preservation; The stopwatch function time is accurate; The power loss is low, the ope
6、ration contact surface is friendly, the operation is simple; The most major characteristic has the user-friendly design.Keyword: Electron clock Hardware design Software design Programming thought Power failure preservation User-friendly 1.课程设计题目电子钟:要求:1.显示和设置时间;2.实现秒表功能;3.实现定时功能2.系统方案设计2.1 系统总体方案设计本
7、课设题目要求为:1.显示和设置时间;2.实现秒表功能;3.实现定时功能。显示采用LCM1602 液晶显示模块,设置时间按键采用简单的单个 I/O 口键盘,时间生成采用 DS1302时钟芯片,秒表功能采用定时中断实现,蜂鸣器发声。系统整体方案图如下:4MCU89S52 单片机1602 液晶显示模块DS1302 时钟芯片模块键盘模块蜂鸣器模块电源滤波及指示模块2.2 主要模块方案选择和论证2.2.1 单片机的选择单片机有多种方案的选择,如飞思卡尔 XS128,凌阳 SPCE061A 语音单片机,AVR 等,但 51 单片机价格便宜,使用方便,操作简单,针对题目的要求,89S52 八位单片机已足够胜
8、任,故本设计采用 89S52 做处理器控制模块。2.2.2 时间生成模块的选择时间生成可采用 52 单片的定时中断实现,它的优点:软硬件简单,操作简便,缺点:精确度低,掉电不保存。于是选择常用的时钟芯片 DS1302 来实现时间的生成。DS1302 是低功耗实时时钟芯片,附加 31 字节静态 RAM,采用 SPI 三线接口与 MCU 进行同步通信,可提供秒,分,时,日,星期,月,年,采用双电源供电(主电源和备用电源) ,工作电压宽(2.5V5.5V ) ,不仅时间精确,还可以掉电保存时间日期,静态 RAM 可用来保存闹钟定时时间和重要数据、标记。2.2.3 显示模块的选择显示模块是显示时间等信
9、息和人机交流的设备,好的人机操作界面应该是友好的,显示的信息足够丰富。显示模块可用 8 位数码管显示,但是数码管显示信息量少,显示不友好,硬件相对复杂,在软件设计中不断扫描显示,占用 CPU 时间,效率低。因此本方案选用LCM1602 液晶显示模块。LCM1602 液晶显示模块可显示 16x2 个字符,显示信息丰富,界面友好,硬件接口简单,驱动程序简单,是理想的显示器件。2.2.4 定时时间到指示定时时间到可用发光二极管指示,但效果不太人性化,而选用了蜂鸣器,定时时间到则蜂鸣以示定时时间到。2.2.5 按键的设计由于电子钟功能的设置简单,只需 5 个按钮,故不采用矩阵键盘,而是采用简单的单个I
10、/O 口键盘,每个按钮占用一个 I/O 口,程序简单,硬件连接也很简单。53.硬件电路设计3.1.1 单片机系统电路的设计:图中为单片机最小系统电路图,最小系统设计了手动复位按钮和上电复位电路,ISP 下载口,晶振为 12Mhz。端口分配:P0:经上拉电阻后作为液晶模块的数据输入端。P2.5 作为 LCM 的 RS 端P2.6 作为 LCM 的 RW 端P2.7 作为 DS1302 的 EN 端P1.5 作为 DS1302 的 CLK 端P1.6 作为 DS1302 的 IO 端P1.7 作为 DS1302 的 RST 端P3.0 经上拉电阻后作为设置键P3.1 经上拉电阻后作为上调键P3.2
11、 经上拉电阻后作为下调键P3.3 经上拉电阻后作为退出键P3.4 经上拉电阻后作为秒表键3.1.2 时钟芯片和按键电路设计DS1302 实时时钟芯片的晶振采用 32.768khz,第 8 引脚经 30 欧姆电阻与备用纽扣电池连接,作为主电源掉电后给 DS1302 提供电源,以保证时间的正常运行。接按键的单片机端口接上 10k 欧姆的上拉电阻,以保证在无按键按下时端口是高电平,而按键按下时对应的I/O 口为低电平。3.1.3 LCM1602 模块和蜂鸣器电路的设计LCM 的数据总线与单片机的 P0 口相接,控制线分别与 P2.7,P2.6,P2.5 相接。LCM 的第3 个引脚接上了 10K 欧
12、姆的可调电阻,用于调节液晶屏的对比度,而第 15,16 个引脚用100 欧姆电阻与电源串联,做为液晶屏的背光电源。P1.0 做为蜂鸣器发声的控制引脚,高低电平经 P1.0 输出,并经过 8050,9015 两个三极管组成的复合管驱动蜂鸣器的通与断电,引起蜂鸣器中薄膜的震动从而发出声音,高低电平的频率即为发声的频率。63.1.4 系统硬件总电路图:3.1.5 总系统电路的 PCB 图74.软件设计4.1 系统软件设计整个软件系统采用模块化思想,把 1602,DS1302 的驱动程序做成头文件,在功能程序中调用。采用这种方法不仅使程序模块化,使程序结构层次分明,便于管理和维护,同时可方便以后开发的
13、调用,只要包含头文件,功能程序模块中再调用接口函数就可以了,而不必关心底层驱动是如何实现的,这样缩短了开发周期,开发效率大大提高。在主程序中采用事件顺序驱动机制的编程方法,按键处理中采用采用网状多级状态结构的编程方法,而秒表功能采用定时中断实现,精确到 1ms。4.1.1 主程序的事件顺序驱动机制主程序采用事件驱动机制,事件为某个按键按下,则主程序响应这个按键,并进入相应的功能程序,其编程思想如下;主程序YY设置标记为1?调用设置功能程序设置标记为0?调用时间显示功能程序NN其中改变设置标记的状态为“设置”键:当第一次按下“设置”键时,改变设置标记为1,表示主程序应该响应设置事件,进入设置状态
14、。当退出设置状态时,置设置标志为 0,表示主程序响应显示时间事件,进入显示时间状态。4.1.2 网状多级状态结构的按键处理按键处理中采用了基于状态机的程序调度机制,当某个按键按下时,改变其状态,再根据状态散转去执行相应的程序,达到了一键多义的效果。设置键的状态机处理过程为:每按一下“设置”键,则其状态改变一次(标记状态从 1改变到 8) ,如图:8状态 1状态 2状态 8设置时间:秒设置时间:分设置闹钟时间各个键态的转移网络图:设置停止退出清零退出-1+1退出分+1秒-1时+1闹钟设置下调键设置键(设置时间日期)退出键秒表键上调键开始4.1.3 秒表的定时中断因为 DS1302 读出的最小时间
15、是 1 秒,而秒表功能要求要精确到 1 毫秒,所以必须采用定时中断来实现。每隔 1 毫秒中断一次,精确到了 1 毫秒,达到了设计要求。其初始化如下:初始化:void time_init(void) IE=0x82;TCON=0x00;EA=1;TMOD=0X01; TH0=(56636-1200)/256;TL0=(56636-1200)%256;TR0=0;9中断程序:void clok(void) interrupt 14.1.4 系统主程序的流程图YYYN开始I/O 初始化DS1302 初始化定时中断初始化读取 DS1302 的静态RAM中的闹钟时间和开关标记标记Done=1?键盘扫描进
16、入设置状态退出? 标记Done=0?调用读取时间函数并显示时间定时中断初始化键盘扫描闹钟时间到?显示并蜂鸣20s 到?是否改变闹钟的开/关标记?闹钟开关标记存入DS1302 的静态 RAM,并显示标记中的NNYYY NNN104.2 模块软件设计4.2.1 LCM1602 的驱动程序#ifndef LCD_1602#define LCD_1602#include /引脚定义*sbit LcdRs = P25;sbit LcdRw = P26;sbit LcdEn = P27;sfr DBPort = 0x80; /P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/-接口
17、函数-初始化:void LCD_Initial(void)设定坐标:void GotoXY(unsigned char x, unsigned char y)显示字符串: void Print(unsigned char *str)显示字符: LCD_Write(LCD_DATA,*str)清屏: LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN)4.2.2 DS1302 的驱动程序#ifndef _TIMER_DS1302#define _TIMER_DS1302sbit DS1302_CLK = P15; /实时时钟时钟线引脚 sbit DS1302_IO =
18、P16; /实时时钟数据线引脚 sbit DS1302_RST = P17; /实时时钟复位线引脚/-接口函数-初始化: void Initial_DS1302(void) /时钟芯片初始化写入数据:void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302 写的地址, ucData: 要写的数据读取数据:unsigned char Read1302(unsigned char ucAddr) /读取 DS1302 某地址的数据取时间:void DS1302_GetTime(SYSTEMTIME *Time)
19、 /获取时钟芯片的时钟数据到自定义的结构型数组转化为显示数据:void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里 DateString转化为显示数据:void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString;写 RAM 函数 :void WriteRAM(unsigned char address,unsigned char *dat,unsigned char n)读 RAM 函数:void ReadRAM(unsigned char address,unsigned char *dat,unsigned char n)