版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 成绩课程论文题 目: 电子时钟的设计 学生姓名: 陈 臣 学生学号: 1008030203 系 别: 电气信息工程学院 专 业: 电子信息工程 年 级: 10 任课教师: 张 水 锋 电气信息工程学院制目录前言2第一章 系统的结构及功能介绍31.1 系统设计任务3(1) 设计任务3(2) 设计要求31.2 系统结构介绍31.3 系统的工作原理4 (1)电子时钟原理4 (2)LCD1602显示器4 (3)报警器4 1.4系统设计方案论证 4 (1)单片机设计方案 4(2)液晶屏设计方案 4 1.5系统设计方案选定 5 (1)单片机方案选定5 (2) 液晶方案选定 51.6 系统的特点和使用说明
2、5 (1) 系统特点 5 (2) 系统使用说明 5第二章 系统硬件电路设计6 (1)系统电路流程设计7 (2)系统单元电路设计7第三章 系统软件设计8 (1)功能软件流程图 8第四章 系统测试 9(1) 测试仪器 9 (2) 测试方法 9(3) 测试结果 9第五章 设计总结 9参考文献9 附件 完整电路图10PCB图 10 源程序11电子时钟的设计 学生:陈臣 指导教师:张水锋电气信息工程学院 电子信息工程前言目前市场上出现了很多种类的电子时钟,用途也是各种各样,但据调查显示这些时钟都存在一些不足之处,因此通过学习和查找资料,我设计了一款新型的电子时钟,它继承了传统时钟的优点,并在此基础上做出
3、了改进以及一些新增功能。我设计的电子时钟可以调节时间,设定闹铃,液晶显示欢迎语和闹铃提示语,其中最大的亮点是使用时钟芯片DS1302,即使单片机系统断电时间也不会改变下次时钟时可直接用,能够节省电。作品经过试验验证,符合试验要求,满足用户使用。第一章 系统的结构及功能介绍1.1 系统设计任务与要求(1) 设计任务制作电子时钟显示时间,并附有时间可调,闹铃声音 语音提示(2) 设计要求 a :能够产生时间值b :可以通过按键调节系统的时间 c :可设定闹铃时间1.2 系统结构介绍 电子时钟的设计,共分为三个部分:控制部分,检测部分,显示部分。控制部分采取MCS51单片机为主控芯片,检测部分采取时
4、钟芯片DS1302产生时间值,显示部分采取LCD1602屏为显示器,显示当前信息。系统结构框图如图1所示: 传感器检测部分按键调节部分液晶显示部分报警部分数据处理部分1.3 系统的工作原理 (1)时钟芯片DS1302工作原理通过内部硬件和外部晶振共同作用产生模拟时间值,内部的硬件直接将此模拟值转化为数字值,在发给单片机使用(2)LCD1602 ,1602 可显示字母,数字,符号及少量特定汉字(3)报警器 采用蜂鸣器做报警器,通过程序控制,当检测到系统时间与设定的闹铃时间按相等时单片机发出高电平,使报警器发出嘀嘀嘀的声音。1.4系统设计方案论证(1)单片机设计方案方案一:AT89S51单片机+
5、+A/D转换芯片。使用烟雾传感器检测空气中该气体的含量,使用A/D转换芯片,将采集到得模拟值转化为数值,在通过52单片机进行数据处理,但内部空间较小。方案二:AVR ATMAGE 16,ATMAGE 16内部集成的8位AD,可以直接将采集的模拟量转化为数字量,在通过单片机进行数据处理,且内部有16KRAM的空间可供使用。方案三:以LPC2138 为主控芯片:其本身自带A/D转换功能,带大容量的32KRAM 512KFLASH ,内部资源丰富且系统稳定,芯片价格昂贵。(2)液晶屏设计方案 方案一:LCD1602 ,1602 可显示字母,数字,符号及少量特定汉字,显示数量为2行16列,价格为16元
6、左右。方案二:LCD12864,12864可显示字母,数字,符号,汉字,图片等内容,显示数量为7页7行64列,价格为60元左右。方案三:诺基亚5110,5110可显示字母,数字,符号,汉字,图片等内容,显示数量为7行81列,价格为9元左右。1.5 系统设计方案选定综合考虑,方案确定如下:(1)单片机方案选定采用方案一,LPC2138 ,ATMAGE16单片机价格较MCS-51贵,AD采集也使用不到,而51单片机以能满足需求。(2) 液晶屏方案选定采用方案一,选择LCD1602屏作为显示器, LCD1602显示器已能满足需求,且显示内容较大,方便观察。而5110显示器程序设置太过繁琐很多功能使用
7、不到,显示内容太小。而LCD12864价格太高,体积过大,有些功能使用不到,因此LCD1602可以满足本次试验的要求。1.6 系统的特点和使用说明(1)系统特点系统使用时钟芯片DS1302产生时间值,此值为数字量,可直接传给单片机,单片机接收到时钟数据后用液晶屏LCD1602去显示,同时可通过按键去调节时间值和设定闹铃。(2)使用说明直接给单片机最小系统提供+5V直流电压,将DS1302d的电压端口接到单片机的稳压块的正负级上,将DS1302的输出口接到单片机的P30口,蜂鸣器接到单片机的P20口,LCD1602接到单片机的P00-7口和P10-2口。系统的程序下载使用串口直接下载。第二章 系
8、统硬件电路设计(1) 系统电路流程设计时钟芯片产生时间值液晶显示当前状态按键设定时间单片机对数据处理蜂鸣器提示(2)系统单元电路设计用于产生时间,再向单片机发送数据 主要显示欢迎语 当前时间值 闹铃值 MCS-51单片机用来 将输入的电压转化为+5v的直流 作为主控芯片 电压供单片机 传感器使用 当时间与顶定时间相等时 会发出声音提示 用于调节系统时间 和设定闹铃时间单片机的最小系统,使单片机可以正常工作第三章 系统软件设计(1) 软件流程图开始始显示欢迎语显示系统时间否是否有按键按下是按键一按下否是设定闹铃时间按键调时结束第四章 系统测试一:给单片机供正5V电压;二:液晶屏上出现“Welco
9、me to use our clock!”的欢迎语;三: 按下按键,可发现时间在改变,即时间可调;四:通过按键设定一个时间,等到系统时间与之相等时,蜂鸣器即会发出声音,液晶显示屏上出现 “It is time to get up!”以提示用户设定的时间已经到了。 第五章 设计总结本系统主要以单片机(MCS-51)为主要控制芯片,采用DS1302时钟芯片作为传感器芯片产生时间。在设计过程中力求硬件电路简单正确,充分发挥软件设计的优势编程灵活方便来满足系统的要求。经试验实验证明,本次设计可满足实验要求,产生正确的时间,且设置了时间可调,定时,闹铃等功能,能够满足日常使用。但实验仍存在一些问题无法解
10、决。如:显示时间与北京时间相比有毫秒的差别,这些可通过调节按键和用软件中算法的方法改变这一问题。参考文献:【1】 模拟电子线路基础,华成英、童诗白著,北京:高等教育出版社,2006年;【2】 基于Protues的51系列单片机设计与仿真 电子工业出版社【3】 51单片机C语言高级程序设计周兴华著,中国电力出版社,2008年;【4】 C语言高级程序设计谭浩强编著,清华大学出版社;【5】 AT89C51单片机C语言高级程序设计谢维诚著,清华大学出版社;【6】 数字电子新路基础康华光 高等教育出版社附录: 电路图PCB图源程序#include <REG52.H>#include &quo
11、t;LCD1602.h"#include "DS1302.h"void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);main()SYSTEMTIME CurrentTime;LCD_Initial();Initial_DS1302(); GotoXY(0,0);Print("Welcome to use our clock! ");GotoXY(0,0);Print("Date: ");Goto
12、XY(0,1);Print("Time: ");while(1)DS1302_GetTime(&CurrentTime);DateToStr(&CurrentTime);TimeToStr(&CurrentTime);GotoXY(6,0);Print(CurrentTime.DateString);GotoXY(6,1);Print(CurrentTime.TimeString);Delay1ms(300);/* 液晶程序LCD1602 */#ifndef LCD_CHAR_1602_2012_3_31#define LCD_CHAR_1602_2
13、012_3_31#include <intrins.h>#defineLCD_DATA P0/Port Definitions*sbit LcdRs= P10;sbit LcdRw= P11;sbitLcdEn= P25;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/内部等待函数*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);/在用Proteus仿真时,注意用屏蔽此语句,在调用Go
14、toXY()时,会进入死循环, /可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80=0x80 /实际硬件时打开此语句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=style;LcdRw=
15、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 char Displa
16、yMode)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);/移动光标或屏幕*#define LCD_CURSOR0x02 #define LCD_SCREEN
17、0x08#define LCD_LEFT0x00#define LCD_RIGHT0x04void LCD_Move(unsigned char object, unsigned char direction)if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|direction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|direction); /初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,
18、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_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|
19、(x-0x40);void Print(unsigned char *str) /显示函数 字符数字等while(*str!='0')LCD_Write(LCD_DATA,*str);str+; #endif/* DS1302时钟程序 */#ifndef _REAL_TIMER_DS1302_2003_7_21_#define _REAL_TIMER_DS1302_2003_7_21_sbit DS1302_CLK = P36; /实时时钟时钟线引脚 sbit DS1302_IO = P37; /实时时钟数据线引脚 sbit DS1302_RST = P35; /实时时钟复位线
20、引脚sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString9;unsigned char TimeString9;SYSTEMTIME;/定义的时间类型#define AM(X)X#define PM(X)(X
21、+12) / 转成24小时制#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C#define DS1302_RAM(X)(0xC0+(X)*2) /用于计算 DS1302_RAM 地址的宏 void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned
22、char i; ACC = d; for(i=8; i>0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i>0; i-) ACC = ACC >>1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; r
23、eturn(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/读取DS130
24、2某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_SetProtect(bit flag) /是否写保护if(flag)Write1302(0x8E,0x10);elseWrite1302(0x8E,0x00);void
25、 DS1302_SetTime(unsigned char Address, unsigned char Value) / 设置时间函数DS1302_SetProtect(0);Write1302(Address, (Value/10)<<4 | (Value%10); void DS1302_GetTime(SYSTEMTIME *Time)unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadVa
26、lue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadValue&0x70)
27、>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year
28、 = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time)Time->DateString0 = Time->Year/10 + '0'Time->DateString1 = Time->Year%10 + '0'Time->DateString2 = '-'Time->DateString3 = Time->Month/10 + '0'Time->DateS
29、tring4 = Time->Month%10 + '0'Time->DateString5 = '-'Time->DateString6 = Time->Day/10 + '0'Time->DateString7 = Time->Day%10 + '0'Time->DateString8 = '0'void TimeToStr(SYSTEMTIME *Time)Time->TimeString0 = Time->Hour/10 + '0'Tim
30、e->TimeString1 = Time->Hour%10 + '0'Time->TimeString2 = ':'Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 + '0'Time->TimeString5 = ':'Time->TimeString6 = Time->Second/10 + '0'Time->TimeString7 = Time->Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业卫生间施工方案
- 木饰面穹顶施工方案
- 阀门预埋件施工方案
- 雨水管网防水施工方案
- 巴彦淖尔市海绵城市透水沥青车行道施工方案
- 库房吊顶施工方案
- 展台灯光施工方案设计
- 陶土清水砖施工方案及流程
- 宁乡市海绵城市老城区改造施工方案
- 挖机平地管施工方案
- 初三英语阅读理解专项训练100(附答案)
- 犬咬伤急救常识
- 铝合金门窗计算书
- GB/T 9573-2013橡胶和塑料软管及软管组合件软管尺寸和软管组合件长度测量方法
- GB/T 23858-2009检查井盖
- GB/T 17849-1999涂覆涂料前钢材表面处理喷射清理用非金属磨料的试验方法
- GB/T 16895.21-2011低压电气装置第4-41部分:安全防护电击防护
- 危机管理及风险评估基础知识课件
- 田汉的《关汉卿》课件
- (完整)中国的丹霞地貌ppt
- 出租厂房建筑和设施安全检查表
评论
0/150
提交评论