数字光控温度时钟_第1页
数字光控温度时钟_第2页
数字光控温度时钟_第3页
数字光控温度时钟_第4页
数字光控温度时钟_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、序号:02 光电技术课程设计题 目:光控数字温度时钟学 生*班 级电子*-*BF学 号*专 业电子科学与技术指导老师梅孝安职 称副教授完成时间20*年*月*日( 湖南理工学院物理与电子学院 )课程设计任务书1、 主题词、关键词数字时钟;DS1302;A/D;D/A;热敏电阻;光敏电阻;51单片机2、 课程设计内容要求 掌握DS1302时钟芯片使用方法 掌握光敏电阻原理、特点和使用方法 掌握热敏电阻原理、特点和使用方法 掌握LED数码管动态显示原理与使用方法 设计与开发一套数字时钟 采用DS1302S时钟芯片,带断电保护; 具有闹钟和定点报时功能; 具有温度显示功能; 具有光控功能,能根据环境光

2、线的强弱,动态调节显示亮度。3、 进程安排 第8周:系统硬件电路设计 第9周:系统软件设计与仿真 第10周:实物制作 第11周:撰写总结报告一、整体设计思想按照系统设计功能的要求,根据实际应用能力,确定系统为模块化设计,分别为主控处理模块、数码管显示模块、数码管驱动模块、时钟DS1302模块、温度光强感应模块、蜂鸣器模块和按键模块共七个模块。主控芯片采用Atmel公司生产的51系列AT89C51芯片,时钟芯片采用DS1302(高性能、低功耗、带RAM的实时时钟芯片),温度光强采用TLC1543,十位串行(A/D);数码管显示模块采用共阳级+5V可调数码管。 图一 各模块示意图二、系统硬件电路设

3、计1系统硬件电路图 图二 系统硬件电路图2主控处理模块主控模块核心组成部分是一块AT89C51芯片,承担着所有操作任务的调控和分配工作。3数码管显示和驱动模块采用四个共阳极+5V可调数码管显示,其中第三个数码管倒置,提供秒钟闪烁。4时钟DS1302模块DS1302内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口I/O口、复位(RST)、串行时钟(SCLK)与单片机进行通信。5温度光强感应模块温度光强采集模块主要对环境的温度与光强度进行采集,利用TLC分析控制,光强的大小将决定显示的光强。TLC1543是一种开关电容结构的逐次逼近式A/D转换器,片内提供转换时钟,十位串行数据输出。可

4、采集11路模拟输入电压,由片内多路开关选通,并采样保持。在本芯片工作温度(070)范围内,A/D转换时间10微秒,具有单+5V电源工作的一大优点。6蜂鸣器模块闹铃模块主要就是一个蜂鸣器,其作用是当到达设定的时间到时发出蜂鸣声报警。用一个PNP型三极管和蜂鸣器连接主要是给蜂鸣器一个驱动,让蜂鸣器为高电平有效,蜂鸣器发声报警。7按键模块K1:“加”键,在模式选择好之后,进行加一操作,点击加一。K2:“功能”键,功能选择键,根据按键的次数进行状态选择。三、系统软件设计 1程序流程图 图三 主程序流程图 2源代码#include <reg52.h>#include <intrins.

5、h>#include <string.h>#define uint unsigned int#define uchar unsigned charsbit DS1 = P20;sbit DS2 = P21;sbit DS3 = P22;sbit DS4 = P23;sbit K1 = P24;sbit K2 = P25;sbit BUZZER = P26;sbit dot = P07;uchar code LEDData1 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff ; uchar code LEDData

6、2 = 0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff ; uchar DateTime7; uchar Time4; uchar second;uchar k1push;uint Temp,light; uchar alart,aH,aM; char Adjust_Index=0; uint Alart_TimerCount=0; uint Systemtime = 0; void GetTime(uchar *DateTime );void SET_DS1302(uchar *DateTime);uint readAD(ucha

7、r port);void Delayms(uint ms) uchar i;while(ms-) for(i=0;i<120;i+); void Timer_Init() TMOD=0x01; EA=1;ET1=1;ET0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;/50msTH1=(8192-100)/32;TL1=(8192-100)%32; /0.1msTR0=1;TR1=1; void Key_Scan()if(K2=0) while(K2=0);TR0=0;Systemtime=10000;Adjust_Index+;if(Ad

8、just_Index=3 && k1push) SET_DS1302(DateTime);if(Adjust_Index=5)Adjust_Index=0;k1push=0;TR0=1; if(K1=0 && Adjust_Index)while(K1=0);k1push=1;switch(Adjust_Index)case 4: aM=(+DateTime1)%60;aH=DateTime2;alart=1;break;case 3: aH=(+DateTime2)%24;aM=DateTime1;alart=1;break;case 2: DateTime1

9、=(+DateTime1)%60;break;case 1: DateTime2=(+DateTime2)%24;break; void V_Scan() Temp=readAD(0x00)*5*0.9814; Delayms(3);light=readAD(0x10)*5*0.9814; if(light>3180) P3=180; else if(light>2030) P3=210; else P3=240; Delayms(3);void TIME_Display1()Time0=DateTime2/10; Time1=DateTime2%10;Time2=DateTime

10、1/10; Time3=DateTime1%10;Delayms(3);DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;dot=1;Delayms(3); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(3);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(3);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;if(alart)TR1=0;dot=0;Delayms(3);TR1=1;void TIME_Di

11、splay2()Time0=DateTime2/10; Time1=DateTime2%10;Time2=DateTime1/10; Time3=DateTime1%10; if(Systemtime>=6000) DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=

12、0;P0=LEDData1Time3;Delayms(5);else DS1=0;DS2=1;DS3=1;DS4=1;P0=0xff;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=0xff-0x80;Delayms(5); DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;Delayms(5);if(Systemtime=0)Systemtime=10000;void TIME_Display3()Time0=Date

13、Time2/10; Time1=DateTime2%10;Time2=DateTime1/10; Time3=DateTime1%10; if(Systemtime>2400) DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;

14、Delayms(5); else DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=0xff-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=0xff; Delayms(5);if(Systemtime=0)Systemtime=10000;void TIME_Display4()Time0=DateTime2/10; Time1=Da

15、teTime2%10;Time2=DateTime1/10; Time3=DateTime1%10; if(Systemtime>6000) DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;Delayms(5); elseDS

16、1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=0xff-0x80;Delayms(5); DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;Delayms(5);if(Systemtime=0)Systemtime=10000;void TIME_Display5()Time0=DateTime2/10; Time1=DateTime2%10

17、;Time2=DateTime1/10; Time3=DateTime1%10; if(Systemtime>2400) DS1=0;DS2=1;DS3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=LEDData1Time3;Delayms(5);elseDS1=0;DS2=1;D

18、S3=1;DS4=1;P0=LEDData1Time0;Delayms(5); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1Time1-0x80;Delayms(5);DS1=1;DS2=1;DS3=0;DS4=1;P0=LEDData2Time2-0x80;Delayms(5);DS1=1;DS2=1;DS3=1;DS4=0;P0=0xff; Delayms(5);if(Systemtime=0) Systemtime=10000;void Temp_Display()uchar a,b;a=Temp/1000;b=Temp%1000/100;TR1=0; DS1=

19、0;DS2=1;DS3=1;DS4=1;P0=LEDData1a;dot=1;Delayms(3); DS1=1;DS2=0;DS3=1;DS4=1;P0=LEDData1b;Delayms(3);DS1=1;DS2=1;DS3=0;DS4=1;P0=0xf0;dot=0;Delayms(3);DS1=1;DS2=1;DS3=1;DS4=0;P0=0xff;dot=1;Delayms(3);TR1=1;void Alart_Scan()if(alart&&aM=DateTime1 && aH=DateTime2 && Adjust_Index=0

20、 && second=0)BUZZER=0; Alart_TimerCount=120;alart=0; if(DateTime2>7 && DateTime2<23 && DateTime1=0 && DateTime0=0) BUZZER=0;Alart_TimerCount=60;if(Alart_TimerCount=0)BUZZER=1;void ParaInit() Adjust_Index = 0;alart = 0;k1push = 0;BUZZER = 1;P3 = 200;void main()Pa

21、raInit();Timer_Init();while(1)Key_Scan();Alart_Scan();V_Scan();switch(Adjust_Index)case 4: TIME_Display5();break;case 3: TIME_Display4();break;case 2: TIME_Display3();break;case 1: TIME_Display2();break;case 0:if(second>5&&second<10)|(second>35 && second<40)Temp_Display(); elseTIME_Display1(); break;void Timer0_INT() interrupt 1TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(Alart_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论