基于51单片机设计的带有测温功能的电子时钟汇总

上传人:suns****4568 文档编号:91140458 上传时间:2019-06-26 格式:DOC 页数:45 大小:1MB
返回 下载 相关 举报
基于51单片机设计的带有测温功能的电子时钟汇总_第1页
第1页 / 共45页
基于51单片机设计的带有测温功能的电子时钟汇总_第2页
第2页 / 共45页
基于51单片机设计的带有测温功能的电子时钟汇总_第3页
第3页 / 共45页
基于51单片机设计的带有测温功能的电子时钟汇总_第4页
第4页 / 共45页
基于51单片机设计的带有测温功能的电子时钟汇总_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《基于51单片机设计的带有测温功能的电子时钟汇总》由会员分享,可在线阅读,更多相关《基于51单片机设计的带有测温功能的电子时钟汇总(45页珍藏版)》请在金锄头文库上搜索。

1、电子课程设计报告、职业技能训练之电子技术课程设计报告学 院电子与信息学院设计题目基于51单片机设计的带有测温功能的电子时钟班 级XXX姓 名XXX学 号XXX指导教师XXX时 间2012年06月25日目录一、 设计要求二、 课程设计的方案、目的及意义三、 硬件设计方案四、 软件设计方案五、 总结六、 参考资料一、 设计要求用51单片机设计带温度显示的电子时钟,具体要求如下:1、 利用DS1302时钟芯片实现时钟功能模块。2、 时钟要求可以调节时间:年、月、日、时、分、秒。3、 利用LCD1602显示。4、 利用DS18B20芯片实现温度功能模块。5、 利用按键完成各项功能。二、 课程设计方案、

2、目的及意义1、 总体方案:用STC89C51单片机作为CPU主控制器,DS1302时钟芯片提供准确时钟信号,DS18B20温度传感器采集温度信息,三个按键进行加减调整、功能切换作用,通过LCD1602对外多功能显示。2、 具体方案:CPU控制所有模块,通过循环反复从DS1302中读取时钟信息,传送至LCD1602显示,得到基本时钟功能。当分为59,秒为56时开始,每隔一秒LED灯点亮240毫秒,0分0秒时LED灯点亮700毫秒。从而实现整点光报时。定时循环从DS18B20中读取温度信息,传送至LCD1602显示,得到基本温度计功能。当温度高于30度(包括30度)时,点亮红色LED灯,提醒当天为

3、高温天气。低于0度时,点亮蓝色LED灯,提醒当天为冰冻天气。键盘使用扫面方式,MENU键控制功能切换,完成时钟和温度间的转换。OK键控制时间调整与确定,UP、DOWN键调节时间,R、L 键选择调整对象。进入调整时,暂停DS1302数据读取,并将改变的时间数据写入DS1302,并送LCD1602显示,同时,启动LCD1602光标闪烁,确定调整对象,完成人机对话。退出调整时,停止写入数据,重新读取DS1302时钟信息。从而完善时钟功能。3、 目的及意义可作为产品生产,作为居家的时钟显示与温度计。三、硬件设计方案1、原理图2、PCB图3、各功能模块分析(一)、主控制器:STC单片机89C51功能:程

4、序存储器16K、RAM数字存储器1280、可直接通过串口下载程序,单一+5V电源供电,五个中断源的中断控制系统,片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器。RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据。ROM:用以存放程序、一些原始数据和表格。I/O口:四个8位并行I/O口,既可用作输入,也可用作输出。P0口做I/O口需接上拉电阻。 T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式。(二)、LCD1602显示模块介绍:工业字符型液晶,能够同时显示16x02即32

5、个字符(16列2行)。管脚信息:显示模式设置:显示开关及功能设置:数据指针设置:写时序:注:R3调节显示屏对比度(三)、DS1302时钟芯片 管脚信息:VCC:Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1、X2:X1和X2是振荡源,外接32.768kHz晶振。RST:RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,

6、允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK:SCLK为时钟输入端。日历寄存器:注:(1):小时寄存器的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式下,位5为低时为AM,高时为PM。在

7、24小时模式下,位5是第二个10小时位。(2)、秒寄存器的位7定义为时钟暂停标志。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;该位置0是,时钟开始运行。(3)、控制寄存器的位7是写保护位,其他7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位1时,写保护位防止对任一寄存器的写操作。控制字节:注:控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始

8、输出。数据读写及时序:在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。(四)、DS18B20温度传感器管脚信息:GND:接地DQ: 数据I/OVDD:电源存储器:控制字节:Skip ROM CCh:允许总线控制器不用提供64 位ROM 编码就使用存储器操作命令,在单点总线情况下右以节省时间。Convert T44h:开始温度转换。Read ScratchpadBEh:读取暂存器和CRC 字节,知道9字节时序:读时间隙:当从DS12B

9、20读取数据时,主机生成读时间隙。当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。数据线必须保持至少1s,从DS18B20 输出的数据在读时间隙的下降沿出现后15s 内有效。因此,主机在读时间隙开始后必须停止把I/O 脚驱动为低电平15s,以读取I/O 脚状态。在读时间隙的结尾,I/O 引脚将被外部上拉电阻拉到高电平。所有读时间隙必须最少60s,包括两个读周期间至少1s的恢复时间。写时间隙:当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。所有写时间隙必须最少持续60s,包括两个写周期间至少1s 的恢复时间。I/O 线电平变低后,DS18B20 在一个15s 到60s

10、 的窗口内对I/O 线采样。如果线上是高电平,就是写1,如果线上是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15s 内允许数据线拉到高电平。主机要生成一个写0 时间隙,必须把数据线拉到低电平并保持60s。(六)、按键部分原理:键盘扫描,先将P3.6口置零,此时扫描S5S8,如果P3.0P3.3中有为0,则说明有对应键按下。然后将P3.7口置零,此时扫描S1S4,如果P3.0P3.3中有为0,则说明有对应键按下。四、软件设计方案部分程序代码(一)主程序:#include#includelcd1602.h /包含头文件,直接引用显示文件#inclu

11、deds18b20.h#include DS1302.h#define uchar unsigned char #define uint unsigned int#define TIMER0_COUNT 0xEE11sbit mode=P30; /设定修改位数sbit plus=P31; /加键sbit dec=P32; /减键uchar count,s1num,timer0_tick,count=0;typedef struct char hour; char minute; char second; time;typedef struct uint year; char month; ch

12、ar day; date;time now=11,20,7; /显示时间初始值date today=12,6,16;char code dayofmonth=31,28,31,30,31,30,31,31,30,31,30,31; /设定月份数组,用以判定12个月的最大值char code weekday710=Week1 ,Week2 ,Week3 ,Week4 ,Week5 ,Week6 ,Week7 ; /设定行星期显示数uchar monthday(uchar year,uchar month) if(month=2 & year%4=0) /用以判定是否为润年,其2月有29天 ret

13、urn(29); else return(28); /非闰年时的该月份天数28void display_week() /由年月日计算星期,用以显示星期数 char days; days=(today.day+1+2*today.month+3*(today.month+1)/5+today.year+today.year/4-today.year/100+today.year/400)%7; display_string(&weekdaydays0); static void timer0_initialize(void) /timer0 initialize EA=0; /设置不接受所有中断 timer0_tick=0; TR0=0; /关闭Timer0 TMOD=0X01; /设置Timer0为模式2,16位工作模式 TL0=(TIMER0_COUNT & 0X00FF); /设置Timer0低八位数值 TH0=(TIMER0_COUNT 8); /设置Timer0高八位数值 PT1=1; /设置Timer0的优先级为最高 ET0=1; /设置接受Timer0的中断 TR0=1; /启动Timer0 EA=1; /设置系统

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号