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

下载本文档

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

文档简介

1、 光电技术课程设计题 目:光控数字温度时钟课程设计任务书1、 主题词、关键词数字时钟;DS1302;A/D;D/A;热敏电阻;光敏电阻;51单片机2、 课程设计内容要求 掌握DS1302时钟芯片使用方法 掌握光敏电阻原理、特点和使用方法 掌握热敏电阻原理、特点和使用方法 掌握LED数码管动态显示原理与使用方法 设计与开发一套数字时钟 采用DS1302S时钟芯片,带断电保护; 具有闹钟和定点报时功能; 具有温度显示功能; 具有光控功能,能根据环境光线的强弱,动态调节显示亮度。3、 进程安排 第13周:系统硬件电路设计 第14周:系统软件设计与仿真 第15周:实物制作 第16周:撰写总结报告一、

2、整体设计思想4二、 系统硬件电路设计41、 系统硬件电路图42、 主控模块53、 DS1302时钟模块54、 蜂鸣器和按键模块65、 数码管显示模块和驱动模块66、温度光强采集模块(A/D)7三、 系统软件设计81、主程序流图82、源程序9MAINCLOCK9DS130224TLC154327USER29四、 实物图291、正面292、反面293、工作中30五、 心得体会301、总结301.1、使用通用51单片机与专用单片机的区别301.2、关于第三个数码管倒装的细节问题302、心得体会311、 整体设计思想按照系统设计功能的要求,初步确定设计系统由显示模块(数码管模块)、数码管驱动模块、主控

3、模块、时钟模块、温度光强采集模块(A/D)、蜂鸣器和按键模块共6个模块组成。主控芯片使用51系列AT89C51单片机;时钟芯片使用DS1302,是一种高性能、低功耗、带RAM的实时时钟芯片;温度光强采集使用TLC1543,十位串行(A/D);显示使用共阳+5V可调数码管。主控模块(89C51)数码管显示模块DS1302时钟电路数码管驱动模块蜂鸣器和按键模块温度光强采集模块2、 系统硬件电路设计1、 系统硬件电路图2、 主控模块主控模块核心组成部分是AT89C51单片机,承担着所有操作任务的调控与分派工作。3、 DS1302时钟模块DS1302时钟芯片是本系统实现高精度计时的关键。利用DS130

4、2时钟芯片独立于单片机来计时,在提高计时进度的同时也提高了整个系统的抗干扰能力。DS1302通过I/O、SCLK、RES端口和单片机AT89C51进行通信。I/O接至P1.5用来传送所有的数据;SCLK接至单片机P1.6口,在读写操作时给DS1302提供相应的时钟脉冲;RES接至单片机P1.7上用来控制单片机与时钟芯片间的数据传送的开始于结束。4、 蜂鸣器和按键模块系统有两个独立按键,独立按键K1、K2分别接至单片机P2.4、P2.5口。 K1主要功能用来进行加一操作。在有功能选择的情况下,无论选中那一种功能操作,按下K1即进行一次加一操作,在没有功能选择的情况下,系统不响应此按键的任何操作。

5、K2用来功能选择,其功能可以用按键次数N来表示:N=1:校准闹钟的小时位 N=2:校准闹钟的分钟位N=3:校准计时的小时位 N=4:校准计时的分钟位 N=5:退出5、 数码管显示模块和驱动模块采用四个共阳+5V可调数码管显示,其中分钟位的第一个数码管使用倒码,倒装,提供秒钟闪烁。DAC0808是8位数模转换集成芯片,电流输出,稳定时间为150ns,驱动电压±5V,33mW。DAC0808可以直接和TTL,DTL和CMOS 逻辑电平相兼容。在按下K1或K2时,单片机会向DAC0808芯片输出0x000xff之间的不同数值,经转换后会输出不同电压,从而控制数码管的显示。6、温度光强采集模

6、块(A/D)TLC1543是一种开关电容结构的逐次逼近式A/D转换器,片内提供转换时钟,十位串行数据输出。可采集11路模拟输入电压,由片内多路开关选通,并采样保持。在本芯片工作温度(0 C70 C)范围内,A/D转换时间10微秒,具有单+5V电源工作的一大优点。89C51单片机的P1.1、P1.2与P1.3作输出,其中P1.1输出地址与控制信息,P1.2模拟片选,P1.3产生时钟输出。TLC2543C数据输出寄存器中的数据通过P1.0输入单片机,转换结束信号通过P1.4进入单片机并被查询。3、 系统软件设计1、主程序流图开始主程序及DS1302、TLC1543初始化定时器T

7、1,每500ms使小数点闪烁,每1s调节一次亮度Main调用闹钟或整点判别与处理函数main调用设置键扫描函数状态4,51,2读取时间在显示温度的秒数内Main调用调整闹钟函数Main调用调整时间函数 显示温度Main调用正常显示时间函数 no yes2、源程序MAINCLOCK#include <reg52.h>#include "myds1302.h"#include "TLC1543.h"#include <math.h>#define NUM 3/控制数码管扫描时间#define ADJUS_CLOCK 1#define

8、ADJUS_ALARM 0#define LED_ON 0#define LED_OFF 1#define BEEP_ON 0#define BEEP_OFF 1sbit BEEP =P26;/蜂呜器sbit T_shi_s =P20;/数码管sbit T_shi_g =P21;sbit T_feng_s =P22;sbit T_feng_g =P23;sbit set_key =P25;/设置键 sbit add_key =P24;/增值键/09共阳极字形码(不带点),减0x80对应数值表示显示小数点uchar code table0=0xC0, 0xF9, 0xA4, 0xB0, 0x99

9、, 0x92, 0x82, 0xF8, 0x80, 0x90;/09共阳极字形倒码(不带点)uchar code table1=0xc0, 0xcf, 0xa4, 0x86, 0x8b, 0x92, 0x90, 0xc7, 0x80, 0x82, 0x70;/'*C'uchar alarm=0;/用于标记闹钟是否在响(1-在响,0-没响)uchar integral_point_flag =0;/1-整点,0-闹钟uchar twinkle =1;/控制时间显示时小数点的闪烁uchar state =0;/用于标志当前的状态: 0-时间显示,1,2-调时间(时,分) 3,4-调

10、闹钟(时,分)uchar key_long_press =0;/键长按,用于记录按键按下的时间/定义结构体用于存放闹钟时间struct calendar Naozhong =0x06, 0x30, 0x00;uchar BCD_jiayi(uchar num, uchar jiexjian, uchar x);void shijian_xianshi(uchar shi, uchar fen);/功能:显示时间void xianshi_shijian_adjust(uchar shi, uchar fen, uchar clock_alarm);/功能:显示调整状态时的数据void xians

11、hi_num(uint num);/xianshi_num(10)则显示 1.0void inc(void);/将state 对应的状态加一void set_key_scan(void);/设置键扫描,获取状态state信息void tiaoshi(void);/设置要调整的时间void tiao_naozhong(void); /设置要调整的闹钟void function_key_scan(void);/时间还是温度void beep_on(void);/打开蜂鸣器void beep_off(void);/蜂呜器关void alarm_clock(void);/是否到了设定闹钟时间uint

12、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

13、 =1;/开定定时器T1中断TR1=1;/打开定时器T1,隔一段时间调节一次亮度TLC1543_Init();/初始化TLC1543Read_Time();Write_Time();/设置初始时间brilliance_control();/亮度初始设置while(1)/whilealarm_clock();/闹钟判别,与撤消set_key_scan();/设置键扫描,获取状态state信息switch(state)case 0:/显示时间Read_Time();/读取时间信息,存放在全局 calendar结构对象 Time中if(Time.DS1302_miao<0x25&&am

14、p;Time.DS1302_miao>=0x20) /20-25/45-50秒间显示温度| (Time.DS1302_miao<0x50&&Time.DS1302_miao>=0x45)temporary_temp =temperature_convert();/将TLC1543转换的数字是转换成对应的温度xianshi_num(temporary_temp);elseshijian_xianshi(Time.DS1302_shi, Time.DS1302_feng);/显示时间break;case 1:/调整闹钟case 2:tiao_naozhong();

15、break;case 3:/调整时间case 4:tiaoshi();break;default : break;/endswitch/endwhilereturn 0;/将TLC1543转换的数字是转换成对应的温度/参数:/返回:参数对应的温度uint temperature_convert(void)float temp_num=0;TR1 =0;temp_num =TLC1543_ReadADC(0x00);TR1 =1;/对采集到的数字量作处理temp_num =10*temp_num*5.0/1024;/10倍电压/matlab polyfit最小二乘法曲线拟合(4阶)temp_nu

16、m =0.000035*pow(temp_num,4) -0.005092*pow(temp_num,3)+ 0.262544*pow(temp_num,2) -7.884431*temp_num+ 123.031448;return (uint)(temp_num*10);/亮度控制/说明:调用TLC1543_ReadADC(1) 通道1获取光敏电阻的AD转换值,/TLC5615_WriteDAC(xxx)进行DA转换/参数:无/返回:无void brilliance_control(void)uint temp=0;temp =TLC1543_ReadADC(0x01);/对获取的AD值处

17、理temp = temp/4;/将10位数字量转换为8位数字量temp =100*temp*5.0/256;/100倍采集到的电压值if(temp >59)/弱光P3 =125;else if(temp >28)/一般光强P3 =175;elseP3 =255;P3 =(uchar)temp;/送到DAC0808转换,控制亮度/key.cvoid Timer_T1(void) interrupt 3/T1中断服务程序static uint num_time=0; /计数器TR1=0;TH1 = (65535-50000)/256;/一次中断时间为 50ms(12MHz下)TL1 =

18、 (65535-50000)%256;num_time+;if(num_time%10 =0)/控制时间显示时小数点的闪烁twinkle =!twinkle;if(num_time >=20)/中断20次,每1s调节一次亮度num_time =0;brilliance_control();/亮度控制TR1 =1;/*/设置键扫描,获取状态state信息/说明:全局变量state 记录状态/参数:无/返回:无void set_key_scan(void)key_long_press =0;/键按下的时间清零set_key =1;/将键值拉高if (0 = set_key)/设置键按下 /i

19、f0delay_ms(2);/延时消抖if (0 = set_key)/真的按下 /if1if(0 != alarm)/在闹钟响起后按功能键关闭闹钟alarm =0;/取消闹钟 beep_off();/关闭蜂鸣器/TR0 =0;/关闭定时器T0,(T0中断用于控制蜂呜器响<可控制整点报时响的次数>)else/在闹钟响时按功能键 state+;/下一个状态if(state >4)state =0;while(!set_key)/等待按键释放/显示调整;这里放显示函数是为了长按键时也有显示信息if(state=3 | state=4)xianshi_shijian_adjust(

20、Time.DS1302_shi, Time.DS1302_feng, ADJUS_CLOCK);else if(state=1 | state=2)xianshi_shijian_adjust(Naozhong.DS1302_shi, Naozhong.DS1302_feng, ADJUS_ALARM); TR0 =1;/打开定时器T0;计算按键时间if(key_long_press >4)/发生设置键长按,直接返回显示时间状态key_long_press =0;state =0;TR0 =0;/按键已释放,关闭定时器T0/endif1/endif0/*/增值键扫描,如果按下则根据参数,

21、将相应的值加1/说明:/参数:/返回:无void add_key_scan(void)uchar record_key_long_press=0;/记录按键时间,用于判断下一个中断和发生key_long_press =0;/键按下的时间清零add_key =1;/增值键拉高if (0 = add_key)/增值键按下delay_ms(2);/延时消抖if (0 = add_key)/真的按下/将state 对应的状态加一inc();while(!add_key)/等待按键释放 /显示调整;这里放显示函数是为了长按键时也有显示信息if(state=3|state=4)xianshi_shijia

22、n_adjust(Time.DS1302_shi, Time.DS1302_feng, ADJUS_CLOCK); elseif(state=1|state=2)xianshi_shijian_adjust(Naozhong.DS1302_shi, Naozhong.DS1302_feng, ADJUS_ALARM); TR0 =1;/打开定时器T0;计算按键时间/长按处理if(key_long_press >4 && record_key_long_press !=key_long_press)/发生长按 record_key_long_press =key_long_

23、press;/将state 对应的状态加一inc();TR0 =0;/按键已释放,关闭定时器T0key_long_press=0;/*/设置要调整的时间/说明:把要设置的时间写入结构对象Time中,再调用DS1302Write(.)写入DS1302中/参数:无/返回:无void tiaoshi(void)uchar current_state =state;/记录当前状态DS1302Write(WRITE_WP, WP_OFF);/关写保护,(否则不能写入)DS1302Write(WRITE_Seconds, Time.DS1302_miao|DS1302_PAUSE);/暂停DS1302DS

24、1302Write(WRITE_WP, WP_ON);/开写保护while(current_state = state)/当前状态调整完成add_key_scan();/增值键扫描set_key_scan();/设置键扫描,调整的对象是否改变xianshi_shijian_adjust(Time.DS1302_shi, Time.DS1302_feng, ADJUS_CLOCK);/显示调整DS1302Write(WRITE_WP, WP_OFF);/关写保护,(否则不能写入)Write_Time();/将要设置的时间写入DS1302DS1302Write(WRITE_Seconds, Tim

25、e.DS1302_miao&(DS1302_PAUSE);/运行DS1302DS1302Write(WRITE_WP, WP_ON);/开写保护/*/设置要调整的闹钟/说明:把要设置的时间写入结构对象Naozhong中/参数:无/返回:无void tiao_naozhong(void)uchar current_state =state;/记录当前状态while(current_state = state)/当前状态调整完成set_key_scan();/设置键扫描add_key_scan();/增值键扫描xianshi_shijian_adjust(Naozhong.DS1302_s

26、hi, Naozhong.DS1302_feng, ADJUS_ALARM);/显示调整/将8位BCD码加一后 若越界(jiexjian为边界)返回x 不越界返回加一后的值 如BCD_jiayi(0x59, 0x59, 0)返回0uchar BCD_jiayi(uchar num, uchar jiexjian, uchar x)num = (num=jiexjian) ? x :(num&0x09)=0x09 ? (num+0x10)&0xf0 : num+1);return num;/将state 对应的状态加一void inc(void)switch(state)/注意T

27、ime中的时间是以BCD码方式存储的/调整时间case 3:/秒数以BCD码方式加1 (不调整秒)Time.DS1302_shi = BCD_jiayi(Time.DS1302_shi, 0x23, 0);break;case 4:Time.DS1302_feng =BCD_jiayi(Time.DS1302_feng, 0x59, 0);break;/调整闹钟case 1:Naozhong.DS1302_shi = BCD_jiayi(Naozhong.DS1302_shi, 0x23, 0); break;case 2:Naozhong.DS1302_feng = BCD_jiayi(Na

28、ozhong.DS1302_feng, 0x59, 0);break;default : break; /endswitch/*/功能显示一位数据/参数:uchar num 要显示的数据, uchar zf 是否带点(0不带,1带)/ uchar liangdu 显示时间用于控制亮度取(共NUM ms,显示liangdu,灭 NUM-liangdu)/返回:无void xianshi_yiwei(uchar num, uchar zf, uchar liangdu)if (zf)/带点显示P0 = table0num - 0x80;else/不带点显示P0 = table0num;delay_

29、ms(liangdu);P0 = 0xff;/关闭显示,消影delay_ms(NUM-liangdu);/*/功能显示一位数据(用倒置的数码管)/参数:uchar num 要显示的数据, uchar zf 是否显示点(0-不显示,1-显示),/ uchar liangdu 显示时间用于控制亮度取(共NUM ms,显示liangdu,灭 NUM-liangdu)/返回:无void xianshi_yiwei_dao(uchar num, uchar zf, uchar liangdu)if (zf !=0)/带点显示P0 = table1num - 0x80;else/不带点显示P0 = tab

30、le1num;delay_ms(liangdu);P0 = 0xff;/关闭显示,消影delay_ms(NUM-liangdu);/*/功能:显示时间/参数:uchar shi 小时, uchar fen 分钟, uchar miao 秒/返回:无void shijian_xianshi(uchar shi, uchar fen)uchar temp=0;/分离个十位/显示小时temp = shi/16;/十进制转换为BCD码T_shi_s =LED_ON;xianshi_yiwei(temp, 0, NUM);T_shi_s =LED_OFF;T_shi_g =LED_ON;temp = s

31、hi%16;xianshi_yiwei(temp, twinkle, NUM);T_shi_g =LED_OFF;/显示分钟T_feng_s =LED_ON;temp = fen/16;xianshi_yiwei_dao(temp, twinkle, NUM);T_feng_s =LED_OFF;T_feng_g =LED_ON;temp = fen%16;xianshi_yiwei(temp, 0, NUM);T_feng_g =LED_OFF;/*/功能:显示调整状态时的时间 (要调的两位闪烁-调时,要调的一位闪烁-调闹钟)/参数:uchar shi 小时, uchar fen 分钟, u

32、char miao 秒, uchar clock_alarm 调的是时间还是闹钟/返回:无void xianshi_shijian_adjust(uchar shi, uchar fen, uchar clock_alarm)static uchar frequency=0;/用于闪烁控制uchar temp=0;/分离个十位uchar liang_mie_shi =NUM;/默认亮uchar liang_mie_feng =NUM;/默认亮frequency+;if(frequency >40)/如果闪烁太快人眼可能看起来是一直亮的frequency=0;elseif(frequenc

33、y >25)/frequency不要用于控制秒闪烁,秒闪烁频率小于点switch(state)case 1:/闹钟的小时case 3:/时间的小时liang_mie_shi = 0;break;case 2:/闹钟的分钟case 4:/时间的分钟liang_mie_feng = 0;break;default : break;/显示小时temp = shi/16;/十进制转换为BCD码T_shi_s =LED_ON;if(clock_alarm =ADJUS_CLOCK)xianshi_yiwei(temp, 0, liang_mie_shi);/调时间闪烁elseif(clock_al

34、arm =ADJUS_ALARM)/调闹钟不闪烁xianshi_yiwei(temp, 0, NUM);T_shi_s =LED_OFF;T_shi_g =LED_ON;temp = shi%16;xianshi_yiwei(temp, 1, liang_mie_shi);T_shi_g =LED_OFF;/显示分钟T_feng_s =LED_ON;temp = fen/16;if(clock_alarm =ADJUS_CLOCK)/调时间闪烁xianshi_yiwei_dao(temp, 1, liang_mie_feng);elseif(clock_alarm =ADJUS_ALARM)/

35、调闹钟不闪烁xianshi_yiwei_dao(temp, 1, NUM);T_feng_s =LED_OFF;T_feng_g =LED_ON;temp = fen%16;xianshi_yiwei(temp, 0, liang_mie_feng);T_feng_g =LED_OFF;/显示带一位小数的温度/说明:xianshi_temperature(10)则显示 10/参数:uint num要显示的数/返回:无void xianshi_num(uint num)uchar i=0;uchar j=0;/j=num%10;/num /=10;/显示*C (温度单位)T_feng_s = L

36、ED_ON;xianshi_yiwei_dao(10, 0, NUM);/10-*CT_feng_s = LED_OFF;/低位 至 高位i =num%10;T_shi_g = LED_ON;xianshi_yiwei(i, 0, NUM);T_shi_g = LED_OFF;num /=10;if(num >0)i =num%10;T_shi_s = LED_ON;xianshi_yiwei(i, 0, NUM);T_shi_s = LED_OFF;T_feng_g = LED_ON;/xianshi_yiwei(j, 0, NUM);/T_feng_g = LED_OFF;/蜂呜器响

37、void beep_on(void)BEEP =BEEP_ON; /打开蜂鸣器/蜂呜器关void beep_off(void)BEEP =BEEP_OFF; /关闭蜂鸣器/*/是否到了设定闹钟时间void alarm_clock(void)if(Time.DS1302_shi >=0x06 && Time.DS1302_shi <=0x19 && 0= Time.DS1302_feng && 0= Time.DS1302_miao)/整点报时integral_point_flag =1;TR0 =1;/打开T0定时器可用于控制整点报时

38、响的次数/闹钟;闹钟响一段时间自动关闭或者闹钟响后手动关闭if(Time.DS1302_shi=Naozhong.DS1302_shi && Time.DS1302_feng=Naozhong.DS1302_feng&&Time.DS1302_miao=Naozhong.DS1302_miao)integral_point_flag =0;alarm =1;/闹钟时间到beep_on();/打开蜂呜器 ;在按键扫描中关闭TR0 =1;/打开T0定时器可用于控制闹钟响的时间void Timer_T0(void) interrupt 1/T0中断服务程序,用于闹钟报

39、时 static uchar numx=0; /整点报时计数器static uint num_niao=0; /闹钟计数器static uchar hour=0;/小时数static num=0; /计数器,增值键和设置键被按下的时间TR0 =0; TH0 = (65535-50000)/256;/一次中断时间为 50ms(12MHz下)TL0 = (65535-50000)%256;if(state!=0)/设置状态下,计算增值键和设置键被按下的时间num+;if(num >=2)/发生2次中断 num =0;key_long_press+;/增值键按下时间增加elseif( inte

40、gral_point_flag=0)/闹钟状态num_niao+;if(num_niao>1200)/闹钟响了一分钟则关闭integral_point_flag=2;/报时标志置于空闲num_niao=0;/计数器清零alarm =0; /取消闹钟 TR0 =0; /关闭定时器T0BEEP =BEEP_OFF; /关闹钟elseif(integral_point_flag=1)/整点报时状态numx+;if(numx%10 =0)BEEP = BEEP;if(Time.DS1302_shi >0x12) hour = Time.DS1302_shi -0x12;/13点换成一点.(

41、不然响13下。呵呵)elsehour = Time.DS1302_shi;hour = 10*(hour/16) + hour%16;/BCD码表示的时间转换为10进制时间if(numx > 20*hour)TR0 =0;/关闭定时器T0BEEP =BEEP_OFF; /关闭蜂鸣器integral_point_flag=2; /报时标志置于空闲numx =0;/计数器清零TR0 =1;DS1302#include "myds1302.h"sbit SDA = P15;/DS1302双向数据线sbit SCLK = P16;/时钟线sbit RST = P17;/控制线

42、/以BCD码存放时间信息struct calendar Time =0x05, 0x59, 0x50;/*/从DS1302读出一个字节/参数:无/返回:读取的字节uchar DS1302ReadByte(void)uchar i=0;uchar date=0;/读取的字节_nop_();for (i=0; i<8; i+)date = date >>1;/从低位至高位读入if (SDA)/读出1date |=0x80;SCLK =1;/产生上升沿_nop_();SCLK =0;_nop_();return date;/*/向DS1302写入一个字节/参数:uchar dat

43、要写入的字节/返回:无void DS1302WriteByte(uchar dat)uchar i=0;SCLK =0;_nop_();for (i=0; i<8; i+)SDA =dat&0x01;/DS1302数据是从低位开始传输的_nop_();SCLK =1;/产生上升沿_nop_();SCLK =0;dat =dat>>1;/将高位移至低位/*/从DS1302读数据/说明:先写要读数据地址,再读数据/参数:uchar cmd 要写入的控制字(数据所在的地址)/返回:读取的数据uchar DS1302Read(uchar cmd)uchar dat=0;RST

44、 =0;/初始CE线置为0SCLK =0;/时钟拉低_nop_();RST =1;/CE线拉高,开始传输DS1302WriteByte(cmd);/传输命令字,要操作的时间/日历的地址dat =DS1302ReadByte();/读取数据SCLK =1;RST =0;/读取结束,CE置为0,结束数据传输return dat;/*/向DS1302写数据/说明:先写地址,再写数据/参数:uchar cmd 要写入的控制字, uchar dat 要写入的数据 /返回:无void DS1302Write(uchar cmd, uchar dat)RST =0;/初始CE线置为0SCLK =0;/时钟拉

45、低_nop_();RST =1;/CE线拉高,开始传输DS1302WriteByte(cmd);/传输命令字,要写入的时间/日历的地址DS1302WriteByte(dat);/要写入的日期/时间SCLK =1;/时钟拉高RST =0;/读取结束,CE置为0,结束数据传输/从DS1302读出时间参量/说明:全局结构体变量Time用于存放时间参量/参数:无/返回:无void Read_Time(void)Time.DS1302_shi = DS1302Read(READ_Hour);/读取小时Time.DS1302_feng = DS1302Read(READ_Minutes);/读取分钟Tim

46、e.DS1302_miao = DS1302Read(READ_Seconds);/读取秒数/对读取的时间进行有效处理(去除掉与时间信息无关的位的影响)if(Time.DS1302_shi>0x23) Time.DS1302_shi =0;/如果使用12小时制,则需要对读取的时间进行处理if(Time.DS1302_feng>0x59) Time.DS1302_feng =0;if(Time.DS1302_miao>0x59) Time.DS1302_miao -=0x80;/暂停模式下秒的最高位为 1/将Time结构中的时间参量写入DS1302/说明:全局结构体变量Time

47、用于存放时间参量/参数:无/返回:无void Write_Time(void)if(Time.DS1302_shi>0x23) Time.DS1302_shi =0;if(Time.DS1302_feng>0x59) Time.DS1302_feng =0;if(Time.DS1302_miao>0x59) Time.DS1302_miao =0;DS1302Write(WRITE_WP, WP_OFF);/写保护关,(否则不能写入)DS1302Write(WRITE_Hour, Hour_24(Time.DS1302_shi);/设置小时DS1302Write(WRITE_Minu

温馨提示

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

评论

0/150

提交评论