收藏 分享(赏)

单片机课程设计,电子万年历.doc

上传人:精品资料 文档编号:8244361 上传时间:2019-06-16 格式:DOC 页数:36 大小:3.91MB
下载 相关 举报
单片机课程设计,电子万年历.doc_第1页
第1页 / 共36页
单片机课程设计,电子万年历.doc_第2页
第2页 / 共36页
单片机课程设计,电子万年历.doc_第3页
第3页 / 共36页
单片机课程设计,电子万年历.doc_第4页
第4页 / 共36页
单片机课程设计,电子万年历.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、 本科课程设计课程名称: 单片机原理与接口技术 课设项目: 电子万年历课程设计 课设地点: 专业班级: 学号 学生姓名: 同组人: 指导教师: 2012 年 05 月 30 日设计题目:电子万年历设计任务与要求:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能4、增加了显示温度的模块设计方案:由于我是在网上购买的现成的开发板来学习和使用的,故在方案的选择上也只能限于开发板设计好的电路和芯片.系统分为主控模块、时钟电路模块、温度检测模块,按键扫描模块,LCD 显示模块,电源电路、复位电路、晶振电路等模块。主控模块采用 AT89C52 单片机,按键模块用四个按键,用于

2、调整时间,显示模块采用 LCD1602,时钟电路模块采用 DS1302 时钟芯片实现对时间、日期的操作,温度模块使用 18B20 实现度温度的操作。STC89C52,ATMEL 的 51 系列单片机,价格便宜,在国内使用者非常多。支持串口下载,使用非常方便,且具有很大的价格优势。缺点是仅支持串口下载,不支持在线下载,使用中会有些不方便。1.显示模块:方案一: 普通的共阴 LED 数码管,用点阵 LED 实现文字的显示.方案二: LCD1602 液晶显示屏.LED 数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602 液晶显示屏,显示功能强大,可以显示大量文字、图形

3、,显示多样性,清晰可见,价格相对 LED 数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用 LED 数码管的话,所需数码管较多,而且不利于控制,因此选择 LCD1602 作为显示模块.故选择方案二.2.时钟电路模块:方案一:用单片机的定时器产生 1S 的时基信号,然后用程序来实现时钟的时、分、秒计时,同时用程序来产生年、月、日。该方案优点是减少使用外设芯片;缺点是用单片机模拟时钟,使编程量增大,且用定时器产生时基信号,精度不高。方案二:DS1302 是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、

4、月和年,月小于 31 天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时器的功能,但时间误差较大,且需要编写时钟程序.因此采用 DS1302 方案二作为时钟电路。3.温度模块:直接采用常用的 18B20.系统框图:液晶显示(LED)1602单元电路设计:单片机中央处理系统的方案设计,选用 AT89C52 单片机作为中央处理器,如图所示。该单片机除了拥有 MCS-51 系列单片机的所有优点外,内部还具有8K 的在系统可编程 FLASH 存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合

5、整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高。单片AT89C52时钟芯片DS1302温度传感器 18B202、时钟振荡电路用主振 11.0592MHZ 的晶振,使用内部晶振接法并上俩个 30PF 的电容,如图所示.3、复位电路复位电路由电阻和极性电容组成,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约 2us 时,即可实现复位。此复位电路为上电复位,较为简单。若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环等情况,

6、通过手动复位就可以实现重新启动的操作。手动按钮复位需要人为在复位输入端 RST 上加入高电平。一般采用的办法是在 RST 端和正电源 Vcc 之间接一个按钮和一个电阻。 4、DS1302 时钟电路时钟电路主要由时钟芯片 DS1302、备用电池、晶振等几部分组成,如图(6)所示。DS1302 采用 3 线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。DS1302 管脚图 DS1302 时钟电路DS1302 各引脚的功能为:8: Vcc1:备用电池端;1: Vcc2:5V 电

7、源。当 Vcc2Vcc1+0.2V 时,由 Vcc2 向 DS1302 供电,当Vcc2#include #include unsigned char code digit11=“0123456789-“; /定义字符数组显示数字unsigned char code Str=“wendu made byFMZ“; /说明显示的是温度unsigned char code Error=“ DS18B20 ERROR“; /说明没有检测到 DS18B20unsigned char code Error1=“ PLEASE CHECK“; /说明没有检测到 DS18B20unsigned char c

8、ode Temp=“wendu made byFMZ:“; unsigned char code Cent=“Cent“; /温度单位unsigned char flag,tltemp;unsigned char code dis_week=“SUN,MON,TUE,WED,THU,FRI,SAT“;unsigned char code para_month13=0,0,3,3,6,1,4,6,2,5,0,3,5; /星期月参变数unsigned char data dis_buf116; /lcd 上排显示缓冲区unsigned char data dis_buf216; /lcd 下排显示

9、缓冲区unsigned char data year,month,date,week;/年、月、日、星期unsigned char data armhour,armmin,armsec;/闹钟时、分、秒unsigned char data hour,min,sec,sec100; /时、分、秒、百分之一秒unsigned char data flag,vkey,skey;/设置状态计数标志、按键先前值、按键当前值bit alarm; /标识是否启用闹钟,1-启用,0-关闭sbit rs = P20; /LCD 数据/ 命令选择端(H/L)sbit rw = P21; /LCD 读/ 写选择端(

10、H/L)sbit ep = P22; /LCD 使能控制sbit PRE = P33; /调整键(AN3)sbit SET = P34; /调整键(AN4)sbit SPK = P36;void delayms(unsigned char ms); /延时程序bit lcd_busy(); /测试 LCD 忙碌状态程序void lcd_wcmd(char cmd); /写入指令到 LCD 程序void lcd_wdat(char dat); /写入数据到 LCD 程序void lcd_pos(char pos); /LCD 数据指针位置程序void lcd_init(); /LCD 初始化设定

11、程序void pro_timedate(); /时间日期处理程序void pro_display(); /显示处理程序void pro_key(); /按键处理程序void time_alarm(); /定时报警功能(闹钟)unsigned char scan_key(); /按键扫描程序unsigned char week_proc(); /星期自动计算与显示函数bit leap_year(); /判断是否为闰年void lcd_sef_chr(); /LCD 自定义字符程序void update_disbuf(unsigned char t1,unsigned char t2,unsign

12、ed char dis_h,unsigned char dis_m,unsigned char dis_s);/ 延时程序void delay(unsigned char ms) while(ms-) unsigned char i;for(i = 0; i 59)sec = 0;min+;if(min59)min=0;hour+;if(hour23)hour=0;date+;if (month=1|month=3|month=5|month=7|month=8|month=10|month=12)if (date31) date=1;month+; /大月 31 天if (month=4|m

13、onth=6|month=9|month=11)if (date30) date=1;month+; /小月 30 天if (month=2)if( leap_year()if (date29) date=1;month+; elseif (date28) date=1;month+;if (month12) month=1;year+;if (year99) year=0;week_proc();if (sec=armsec /闹钟启用时,报警时间到 ,启动 Timer1/显示处理程序void pro_display() unsigned char i;lcd_pos(0x00);for (

14、i=0;i= 100) /1 秒时间 (100*10ms=1000ms=1s)sec100 = 0;pro_timedate();/调用时间和日期处理程序if (sec elseupdate_disbuf(0x00,“FMZTIME“,hour,min,sec);pro_display(); /调用显示处理函数/按键扫描程序unsigned char scan_key()skey=0x00; /给变量 vkey 置初值skey|=PRE; /读取 PRE 键的状态skey=skey=1;if(DQ=1)dat|=0x80; /如果读到的数据是 1,则将 1 存入 datelsedat|=0x00;/如果读到的数据是 0,则将 0 存入 dat/将单片机检测到的电平信号 DQ 存入 rifor(time=0;time=1; /将 dat 中的各二进制位数据右移 1 位for(time=0;time4;time+); /稍作延时 ,给硬件一点反应时间/ 函数功能:做好读温度的准备void ReadyReadTemp(void)Init_DS18B20(); /将 DS18B20 初始化WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delaynms(200); /转换一次需要延时一段时间

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报