光控数字温度时钟课程设计报告(精编文档).doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【最新整理,下载后即可编辑】
序号:20
光电技术课程设计
题目:光控数字温度时钟
学生王较军班级电子2011-2BF 学号物理与电子学院专业电子科学与技术指导老师梅孝安职称副教授
完成时间2015年6月12日
(湖南理工学院物理与电子学院)
整体设计思想
本次实验采用通用51单片机(AT89C51)。DS1302作为基本时钟,并带有蜂鸣器模块,实现报时闹铃功能。使用TLC1543芯片(10位串行A/D)作为温度光强采集模块。温度采集采用热敏电阻、光强采集采用光敏电阻。亮度控制采用D/A输出(DAC0808),采用LED数码管动态显示。出于方便、高效考虑,设置两个按钮一为功能键,一为加键。
系统硬件电路设计(
本设计硬件总设计图如图1所示。温度由热敏电阻采集经处理后转换为温度显示,光强每经过一段时间间隔由光敏电阻采集一次,转换为数字信号后通过DACO8O8芯片控制(D\A输出)达到调节LED数码管显示亮度的目的。
图1 设计总电路图
DS1302模块
DS1302模块以DS1302时钟芯片为主体构成,用于基本的时间显示。其硬件结构图如图2所示。DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,,且具有闰年补偿等多种功能。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。缺点是时钟精度不高,易受环境影响,出现时钟混乱。模块软件设计见设计报告系统程序设计部分。
图2 DS1302模块电路图
数码管及数码管驱动模块
(1)数码管模块如图3所示:
图3 数码管模块
在数码管显示上将第三个数码管反向安置,使得第二、第三个数码管的小数点位组成一对,实现时钟的秒显示功能。第三个数码管译码表:0xc0, 0xcf, 0xa4, 0x86, 0x8b, 0x92, 0x90, 0xc7, 0x80, 0x82, 0x70
(2)数码管驱动模块,如图4,图5所示:
图4 数码管驱动模块
图5 数码管驱动模块
其中,DAC0808用于实现亮度调节(D\A转换),
温度光强采集模块
模块结构如图6所示
图6 温度光强采集模块
采集温度用热明电阻,热敏电阻的主要特点是:①灵敏度较高,其电阻温度系数要比金属大10~100倍以上,能检测出10-6℃的温度变化;②工作温度范围宽,常温器件适用于-55℃~315℃,高温器件适用温度高于315℃(目前最高可达到2000℃),低温器件适用于-273℃~-55℃;③体积小,能够测量其他温度计无法测量的空隙、腔体及生物体内血管的温度;④使用方便,电阻值可在0.1~100kΩ间任意选择;⑤易加工成复杂的形状,可大批量生产;⑥稳定性好、过载能力强。
采集光强使用光敏电阻,光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体及梳状欧姆电极,接出引线,封装在具有透光镜的密封壳体内,以免受潮影响其灵敏度。入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,
使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。
蜂鸣器和按键模块
图7为蜂鸣器模块实现闹铃,整点报时功能。图8为按键模块,K1为加键用于调节数据的大小,K2为功能键用于实现不同功能的转换。
图7为蜂鸣器模块
图8 按键模块
系统软件设计
(1)主程序
(2)
(3)
#include
#include "shu_ma_guan.h"
#include "myds1302.h"
#include "key.h"
#include "naozhong.h"
#include "TLC1543.h"
#include
uint temperature_convert(void);
void brilliance_control(void);
int main(void)
{
uint temporary_temp=0;
TMOD =0x11; //T0,T1均工作于方式1(16位定时/计数),软件启动
TH0 = (65535-50000)/256; //一次中断时间为50ms(12MHz 下)
TL0 = (65535-50000)%256;
TH1 = (65535-50000)/256; //一次中断时间为50ms(12MHz 下)
TL1 = (65535-50000)%256;
EA =1; //开总中断
ET0 =1; //开定定时器T0中断
ET1 =1; //开定定时器T1中断
TR1=1; //打开定时器T1,隔一段时间调节一次亮度
TLC1543_Init(); //初始化TLC1543
Read_Time();
Write_Time(); //设置初始时间
brilliance_control(); //亮度初始设置
while(1) //while
{
alarm_clock(); //闹钟判别,与撤消
set_key_scan(); //设置键扫描,获取状态state信息
switch(state)
{
case 0: //显示时间
Read_Time(); //读取时间信息,存放在全局calendar 结构对象Time中
if((Time.DS1302_miao<0x25&&Time.DS1302_miao>=0x20)
||
(Time.DS1302_miao<0x50&&Time.DS1302_miao>=0x45))
//20-25/45-50秒间显示温度
{
temporary_temp =temperature_convert(); //将TLC1543转换的数字是转换成对应的温度
xianshi_num(temporary_temp);
}
else
{