ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:20.44KB ,
资源ID:8329748      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8329748.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可调多功能温度时钟.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可调多功能温度时钟.docx

1、可调多功能温度时钟/多功能时钟(时间+温度+整点报时+可调节)已经调试成功,可以直接移植。#include #includeintrins.h#define uchar unsigned char#define uint unsigned intuchar min,sec=0,hour,counts,flm,hsec,time12;uchar times=0,flag;uchar tian,yue,year=2019;uchar nhour,nmin,nsec;unsigned char T1RH, T1RL;unsigned int j=0; unsigned char dispcode12

2、=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa7,0xFF; /共阳数码管段码unsigned char dispbuf12; sbit dian=P37;sbit K1=P24; sbit K2=P26;sbit K3=P25;sbit K4=P27;sbit DQ=P32;sbit BEEP=P12;sbit IRIN=P33;sbit SDA = P17;sbit SCL = P16;bit flag_P=0,flag_M=0;bit flag_alarm=0; bit alarm_on=0; /*24C02*/void de

3、lay_us();void start();void stop();void ack();void nack();void write_24c02byte(uchar date);uchar read_24c02byte();void write_24c02(uchar address,uchar date);uchar read_24c02(uchar address);void ConfigTimer1(unsigned int ms);void baoshi();void RiQi_time(void);void alarm();void Clock_time(void);void de

4、lay_us()/5_us延时;void start() /起始信号 /SDA = 1; SCL = 1; SDA = 1; /前后位置都没有关系 delay_us(); SDA = 0; delay_us(); void stop() /终止信号 SDA = 0; SCL = 1; delay_us(); SDA = 1; delay_us();void ack() /应答信号 uchar i; SCL = 1; delay_us(); while(SDA = 1)&(i250)i+; SCL = 0; delay_us();void nack() /无应答信号 SCL = 0; /时序图是

5、在SCL为低电平期间,SDA变高则为非应答信号 delay_us(); SDA = 1; SCL = 0; delay_us();void write_24c02byte(uchar date)/带行参 /写入一个字节到I2C总线 uchar i,temp; temp = date; for(i=0;i8;i+) temp = temp1; SCL = 0; delay_us(); SDA = CY; /移到CY位的1赋给SDA(准备好了数据) delay_us(); SCL = 1; /来个上升沿数据送走 delay_us(); SCL = 0; /拉低是为下一次拉高准备 delay_us(

6、); SDA = 1; /释放数据总线 delay_us(); uchar read_24c02byte() /带返回值, /从I2C读一个字节 uchar i,j,k; SCL = 0; delay_us(); for(i=0;i8;i+) SCL = 1; delay_us(); j = SDA; k = (k1)|j;/k0 ; t-); void di(void) uint i; for (i=0; i=8)&(hour=7) counts=0; sec=0; TR1=1; /调节完后,继续走时 if(K3=0&flag_P=0) /加键 delay(300); if(K3=0) fl

7、ag_P=1; add_time(); if(K2=0&flag_P=0) /减键 delay(300); if(K2=0) flag_P=1; sub_time(); if(K4=0&flag_P=0) /开关闹钟键 delay(300); if(K4=0) while(!K4); flag_P=1; alarm_on = alarm_on; if(flag_P&K1=1&K3=1&K2=1&K4=1) /释放 di(); flag_P=0; return ;/*算法24小时制*/void calculate(void) time0=hour/10; /时十位 time1=hour%10;

8、/时个 time2=min/10; /分十位 time3=min%10; /分个 time4=yue/10; /月十位 time5=yue%10; /月个位 time6=tian/10; /天十位 time7=tian%10; /天个位 time8=nhour/10; /闹时十位 time9=nhour%10; /闹时个 time10=nmin/10; /闹分十位 time11=nmin%10; /闹分个 return; void Clock_time(void) /显示闹钟 if(counts=0|counts=6|counts=7)|flag_M) nmin=read_24c02(5);

9、/先读出闹分 P2=0xfE; P0=dispcodetime11; /段显闹分个位 P0&=0x7f; /加小数点,代表闹钟模式 delay(50); /延时 P0=0xff; /消隐 P2=0xfD; P0=dispcodetime10; /段显闹分十位 delay(50); /延时 P0=0xff; /消隐 if(counts=0|counts=5|counts=7)|flag_M) nhour=read_24c02(6); /先读出闹时 P2=0xFB; if(alarm_on=1) P0=dispcodetime9; /闹时个位 P0&=0x7f; /加固定的一点 else P0=d

10、ispcodetime9; /闹时个位 dian = 0; /加固定的两点 delay(50); /延时 P0=0xff; /消隐 P2=0xF7; P0=dispcodetime8; /段显闹时十位 delay(50); /延时 P0=0xff; /消隐 return;void RiQi_time(void) /显示日期 if(counts=0|counts=4|counts=7)|flag_M) tian=read_24c02(3); /先读出天 P2=0xfE; P0=dispcodetime7; /段显天个位 delay(50); /延时 P0=0xff; /消隐 P2=0xfD; P

11、0=dispcodetime6; /段显天十位 delay(50); /延时 P0=0xff; /消隐 if(counts=0|counts=3|counts=7)|flag_M) yue=read_24c02(4); /先读出月 P2=0xFB; P0=dispcodetime5; /月个位 dian = 1; P0&=0x7f; delay(50); /延时 P0=0xff; /消隐 P2=0xF7; P0=dispcodetime4; /段显月十位 delay(50); /延时 P0=0xff; /消隐 return; void LED_time(void) /显示时间 if(count

12、s=0|counts=2|counts=7|flag_M) min=read_24c02(2); /先读出分钟 P2=0xfE; P0=dispcodetime3; /段显分钟个位 delay(50); /延时 P0=0xff; /消隐 P2=0xfD; P0=dispcodetime2; /段显分钟十位 delay(50); /延时 P0=0xff; /消隐 if(counts=0|counts=1|counts=7|flag_M) hour=read_24c02(1); P2=0xfB; P0=dispcodetime1; /小时的个位 if(hsec0; i-) /在1560ms之间对数

13、据线进行采样,如果是高电平就写1,低写0发生。 DQ = 1;_nop_(); _nop_(); /在开始另一个写周期前必须有1Us以上的高电平恢复期。 DQ = 0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /5us DQ = val&0x01; /最低位移出 delay(6) ; /66us val = val/2; /右移1位 delay(1);uchar read_byte (void) uchar i; uchar value = 0; for(i = 8;i0;i-) DQ = 1; / 给脉冲信号 _nop_(); _nop_();

14、 value= 1; DQ = 0; / 给脉冲信号 _nop_(); _nop_(); _nop_(); _nop_();_nop_(); /4us DQ = 1; _nop_();_nop_();_nop_();_nop_();_nop_();/5us if(DQ) value|= 0x80 ; delay(13); /66us 注意延时的长短,如果是delay(6) 会造成LED闪烁 DQ = 1; return(value) ; void Setting_DS18B20(void) ow_reset(); write_byte(0xCC); / 跳过读序号列号的操作 write_byte(0x4e); write_byte(0x64); write_byte(0x8a); /-10 write_byte(0x7f); /*读取温度并完成转化*/void Read_Temperature(void) uchar tplsb,tpmsb; / 温度值低位、高位字节 uchar flag=0; / unsigned int j=0; /暂存计算得温度的整数部分 float tt; ow_reset(); write_byte(0xCC); / 跳过读序号列号的操

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1