资源描述
机械工程系课程设计说明书课 程 名 称:微机接口技术题 目 名 称:带闹钟功能及测温的时钟控制器设计年级专业及班级:2008级机械设计制造及其自动化 2 班姓 名:郑泽龙学 号:0808012217指 导 教 师:刘建春评 定 成 绩:教 师 评 语: 指导老师签名: 2011 年 7 月 1 日多功能数字时钟系统设计目录1.前言:22.整体方案确定:23.硬件系统设计:43.1. 按键扫描模块设计:53.2. LCD显示模块63.3. 时钟DS1302模块73.4. 存储器24C02模块83.5. 蜂鸣器模块83.6. 测温模块94.软件系统设计:94.1.按键控制函数key_control(void)流程图:104.2. 按键扫描函数char KeyScan(void)流程图:104.3.闹钟函数ALARM(void)114.4. 24c02数据存数函数头文件声明程序如下:125.试验仿真:155.1硬件调试155.1.1排除元件失效155.1.2.排除电源故障155.1.3.联机仿真调式165.2软件仿真165.2.1系统误差分析166结论167.成果展示178.参考资料191.前言:带闹钟功能及测温的时钟控制器是一种可实现年、月、日时、分、秒计时,温度扫描,数据存储,按键调节时间及闹钟功能的装置,并通过单片机处理后送给显示芯片(9325tp)显示的装置,与机械式时钟相比具有更高的准确性和直观性,且具有更长的使用寿命。本系统可以分为六大模块:按键扫描模块、LCD显示模块、时钟DS1302模块、存储器24C02模块、蜂鸣器模块、测温模块。2.整体方案确定:程序开始时先对系统初始化,初始化屏幕显示并设置好各种中断。首先从24c02芯片中读取上次关机前闹钟的存储数据,扫描按键程序,如有按键按下则进入时间修改函数并将修改后的时间信息写入DS1302的时间芯片中并送显示,同时向24c02中写入更改后的闹钟数据,若无按键按下则进入更新时间函数,从时钟芯片中读取时间信息并送显示,并判断从时间芯片上读取的小时,分的数据和24c02中存储的数据是否一致,若一致则进入闹铃程序,若不一致则将时钟芯片的信息送显示。模块联系图:主函数流程图3.硬件系统设计:Proteus仿真系统硬件连接图如下图所示:3.1. 按键扫描模块设计:Proteus仿真硬件连接图如下图所示:说明:本系统的采用独立按键来调节时间,按键按下时拉低p口得电平,再通过按键扫描函数对p3口的值进行处理,并控制响应的变量改变,从而达到调整时间及闹钟的目的。其中具体的按键调节方法如下:k1和k2分别控制时钟及闹钟数据的加减;k3和k4分别控制时间的的移位及闹钟的移位,其中若k4键有按下则先调整时间;k5键是复位键,对k3及k4进行复位;k6键用于控制闹钟的开关,闹钟只有在打开状态下才能响。K3及k4按下次数对应的调整值:K3按下次数修改项K4按下次数修改项1年1闹钟一时2月2闹钟一分3日3闹钟二时4时4闹钟二分5分6周3.2. LCD显示模块Proteus仿真硬件连接图如下图所示:3.3. 时钟DS1302模块Proteus仿真硬件连接图如下图所示:3.4. 存储器24C02模块Proteus仿真硬件连接图如下图所示:3.5. 蜂鸣器模块Proteus仿真硬件连接图如下图所示:电路原理图:3.6. 测温模块Proteus仿真硬件连接图如下图所示:4.软件系统设计:软件设计最主要的部分是按键控制函数key_control(void),按键扫描函数char KeyScan(void),闹钟函数ALARM(void)及24c02数据存数函数。具体的函数设计流程图如下:4.1.按键控制函数key_control(void)流程图:4.2. 按键扫描函数char KeyScan(void)流程图:4.3.闹钟函数ALARM(void)4.4. 24c02数据存数函数头文件声明程序如下:#ifndef _24c02_H_#define _24c02_H_#include /头文件的包含#include #define _Nop() _nop_() /定义空指令 /sbit SDA=P15; /模拟I2C数据传送位?sbit SCL=P11; /模拟I2C时钟控制位 ? extern bit ack; /应答标志位 ?/*- 启动总线-*/void Start_I2c();/*- 结束总线-*/void Stop_I2c();/*- 字节数据传送函数 函数原型: void SendByte(unsigned char c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0 假) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。-*/void SendByte(unsigned char c);/*- 字节数据传送函数 函数原型: unsigned char RcvByte();功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数。 -*/unsigned char RcvByte();/*- 应答子函数原型: void Ack_I2c(void); -*/void Ack_I2c(void);/*- 非应答子函数原型: void NoAck_I2c(void); -*/void NoAck_I2c(void);/*- 向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no); 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);/*- 向有子地址器件读取多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no); 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);#endif5.试验仿真:5.1硬件调试5.1.1排除元件失效造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。5.1.2.排除电源故障在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V4.8V之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。5.1.3.联机仿真调式联机仿真借助仿开发板等工具,进行程序烧入调试。5.2软件仿真5.2.1系统误差分析本次设计的单片机电子钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。6结论一周多的设计大体上实现了系统的时间实时显示、可调整时间、温度扫描显示、到点闹铃提醒、用户闹钟数据存储的功能,本系统最大的创新点就是能实现用户数据的存储及闹钟随按随停。本系统的设计最大的难度在于按键功能及闹钟随按随停及调整时间的跟踪光标的编程,通过对这些程序的编写及调式,自己从对单片机朦朦胧胧的认识到现在对其设计流程及软硬件关联有了初步的了解,其实单片机系统的设计就跟我们机械设计设计一样机构一样,并不是每样东西都要我们自己去设计,很多标准件都已有现成的标准及模板,我们要做的是将如何将这些现成的模板及标准修改整合成为我们所需要的机构,单片机系统设计也一样。我们不一定也没必要要看懂所有的程序,只要会用它就行。就如后面在设计闹钟数据存储的程序时,会调用现有的函数使得编程变得很简单,刚开始的几天编键盘及闹钟程序时,虽说困难重重,却为我接下去的程序调式及修改奠定了扎实的基础。这个系统虽然基本功能已经完成,但还是有一些不足之处,比如光标显示的问题,闹钟还不能根据用户需要在固定某一天或某几天开启,只能实现普通的开关功能,性能还不够优越,当然这些功能也可以加以改进,只是时间有限。同时也是因为第一次这样的模块化的系统,所以在一些变量及函数结构的处理上还有很多不合理的地方。如果系统再复杂一点的话,一旦出现错误就很难找了。总体来说,两周的实习很棒,让我了解了很多的单片机系统设计的知识,我觉得要想学好单片机就得多些这样的实践,就个人觉得要是让我看书一个的效果都不及这两周。 7.成果展示8.参考资料【1】 张齐等. 单片机应用系统设计技术基于C51的Proteus仿真(第2版).电子工业出版社.2009-1.【2】 LY-51S 开发板光盘资料【3】 求是科技.8051系列单片机C程序设计完全手册.人民邮电出版社.2006-4.18
展开阅读全文