电子系统设计报告
使用了备份电池,当备份电池直接接在芯片第1脚时,芯片的发热量很大,温度上升达到了很高的度数,经过查看数据手册,我的主电源与备用电源接反了,将线路正确和好后,温度还是很高,经过再仔细的看了芯片使用手册后,我认为是电池容量超过了芯片涓细充电电流所容许的容量,于是在第8脚和备用电池之间串联了30欧姆的电阻,减小充电电流,消除了DS1302的发热问题但不影响备用电池的功能。需要改进的地方是按键和时间的显示部分星期应该可以自己更新。在实际的操作中,按键的反应很慢,原因是为了防抖而在程序中加入只有按键弹起才执行的程序,虽然防抖了,但按键反应迟钝,带来了操作上的不便。但是在时间校准的设计上采用矩阵按键功能,能够快速校准时间,给设置时间带来了极大地方便。
第6章 结论
从最终的作品来看,本电子钟具有如下优点:走时准确;能快速校准时间;整点报时闹铃提示功能;秒表功能计时准确,精确到1毫秒;功耗低,操作界面友好,操作简便。
本课程设计从软件设计到仿真到硬件制作和调试,我收获不小。首先,我认真复习了C语言编程,其次我学习了使用protus和keil画电路原理图和编程。特别是在仿真编程和硬件调试方面。在编程过程中一直灌输给自己“编程是一种思想”,一定要用编程的思想去编程,如模块化思想,文件管理思想,头文件和接口函数的思想,设计程序时要考虑到程序的可扩充性,兼容性,可维护性以及重用性,并归纳和总结各种功能算法,各种调度和事件驱动机制等等。在编程方面有了一定的进步。在使用仿真软件时得到了一些启示:仿真只是提供一个实现的大概参考,真正的功能实现仍需在实际硬件调试中完善。此次的课程设计为我的毕业设计做了良好的基础。
第7章 参考文献
[1] 楼然苗,李光飞. 单片机课程设计指导[M].北京:北京航空航天大学出版社,2007 [2] 李海滨,片春媛,许瑞雪.单片机技术课程设计与项目实例[M].北京:中国电力出版社,2009
[3] 杨居义.单片机课程设计指导[M].北京:清华大学出版社,2009
[4] 张友德、赵金英、涂时亮.单片微型计算机原理、应用与实验(第四版)[M].上
海:复旦大学出版社.2003.
[5] 肖金球.单片机原理与接口技术[M].北京:清华大学出版社.2003.
[6] 张超琦.单片机原理及实例 实践篇[M].上海:上海交通大学出版社.2006.
[7] 吕胜杰. 用单片机实现DS18B20的远程无线温度检测[J]. 自动化应用, 2010, 11(09):
第 31 页 共 50 页
电子系统设计报告
31-37.
[8] 董秀洁, 赵程程. 基于AT89S52和nRF905的无线遥控系统设计与实现[J].中原工学
院学报, 2010, (04): 10-16.
[9] 郑阿奇,彭作民. Visual Basic.NET程序设计教程[M] .机械工业出版社, 2007,6
[10] Visual BASIC程序设计,谭浩强,清华大学出版社,2000
附录一:元器件清单
单片机STC89C52 电阻:4.7k 4个 10k 1个 1k 1个 电位器:10k 1个 晶振:12MHz 1个 32.7MHz 1个 时钟芯片DS1302
附录二:电路原理图
第8章 附录
蜂鸣器
三极管:8050 1个 电容:20PF 4个 电解电容:10uF 1个 按键:8个 排阻:330*8 2个 液晶显示LCD1602 第 32 页 共 50 页
电子系统设计报告
附录三:程序清单
#include
#define uint unsigned int #define uchar unsigned char
sbit Set = P1^3; //模式切换键 sbit Up= P1^2; //加法按钮 sbit Down = P1^4; //减法按钮
sbit out = P1^1; //立刻跳出调整模式按钮 sbit stop_watch=P1^0;
sbit stop_watch_button1=P1^5; sbit stop_watch_button2=P1^6; sbit stop_watch_button3=P1^7;
第 33 页 共 50 页
电子系统设计报告
sbit b=P2^3;
char done,count,temp,flag,up_flag,down_flag;
char settime_flag,stopwatch_flag,stopwatch_count=0;
char idata stop_watch_temp1[]={' ','0','0',':','0','0',':','0','0',':','0','0','\\0'}; char idata stop_watch_temp2[]={' ','0','0',':','0','0',':','0','0',':','0','0','\\0'}; char idata stop_watch_temp3[]={' ','0','0',':','0','0',':','0','0',':','0','0','\\0'}; uchar week_value[2];
uchar idata stop_watch_value[]={' ','0','0',':','0','0',':','0','0',':','0','0','\\0'}; uchar idata DateStr[3]={'0','0','\\0'}; SYSTEMTIME CurrentTime; uchar idata minite=0; uchar idata second=0; uchar idata count_stop=0;
void show_time(); //液晶显示程序 void disp_alarm(void); void gettime(void); void trasfer(void)
{ stop_watch_value[4]=minite/10+0x30; stop_watch_value[5]=minite+0x30; stop_watch_value[7]=second/10+0x30; stop_watch_value[8]=second+0x30; stop_watch_value[10]=count_stop/10+0x30; stop_watch_value[11]=count_stop+0x30; }
void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i /*延时子程序*/ void mdelay(uint delay) { uint i; for(;delay>0;delay--) {for(i=0;i<62;i++) //1ms延时. {;} } } void bz(int co,int h,int l) { int i; 第 34 页 共 50 页 电子系统设计报告 for(i=1;i<=co;i++) { b=1; mdelay(h); b=0; mdelay(l); } } void disp_strstowatch(void) { LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,一般指令 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 GotoXY(0, 0); Print(\ Stopwatch \ GotoXY(0,1); Print(\ GotoXY(1, 1); Print(stop_watch_value); stopwatch_flag=1; Delay1ms(200); } void disp_strstowatch1(void) { LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,一般指令 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 GotoXY(0,1); Print(\ GotoXY(0, 0); Print(stop_watch_temp1); GotoXY(1, 1); Print(stop_watch_value); stopwatch_flag=1; Delay1ms(200); } void disp_strstowatch2(void) { LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,一般指令 第 35 页 共 50 页