数字钟模块化 C程序Word下载.docx

上传人:b****6 文档编号:18824150 上传时间:2023-01-01 格式:DOCX 页数:14 大小:16.56KB
下载 相关 举报
数字钟模块化 C程序Word下载.docx_第1页
第1页 / 共14页
数字钟模块化 C程序Word下载.docx_第2页
第2页 / 共14页
数字钟模块化 C程序Word下载.docx_第3页
第3页 / 共14页
数字钟模块化 C程序Word下载.docx_第4页
第4页 / 共14页
数字钟模块化 C程序Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字钟模块化 C程序Word下载.docx

《数字钟模块化 C程序Word下载.docx》由会员分享,可在线阅读,更多相关《数字钟模块化 C程序Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

数字钟模块化 C程序Word下载.docx

0x39,0x5e,0x79,0x71,0x00};

ucharcodeduan[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

//带小数点

voiddelay_1ms(uintz)

{

uchari,j;

for(i=z;

i>

0;

i--)

for(j=110;

j>

j--);

}

voiddelay(uintz)

while(z--);

voiddelay8(void)

_nop_();

_nop_();

voidt0init(void)

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

/////////////////////////////////////////////////////

///////////////ds18b20///////////////////////////////////

#ifndef__DS18B20_H__

#define__DS18B20_H__

#include"

dingyi.h"

sbitdq=P3^3;

uintd;

voidinit_ds18b20(void)//ds12b20的初始化

ucharn;

dq=1;

delay(8);

dq=0;

delay(80);

n=dq;

delay(4);

voidwrite_ds18b20_byte(uchardat)//ds18b20写一个字节

uchari;

for(i=0;

i<

8;

i++)

{

dq=0;

dq=dat&

0x01;

dat>

>

=1;

}

ucharread_ds18b20_byte(void)//ds18b20读一个字节

uchari,value;

value>

if(dq)

value=value|0x80;

returnvalue;

uintrtc_ds18b20(void)//ds18b20的处理函数

uinta,b,c;

init_ds18b20();

write_ds18b20_byte(0xcc);

//跳过ROM

write_ds18b20_byte(0x44);

//启动

delay(300);

write_ds18b20_byte(0xbe);

a=read_ds18b20_byte();

//低八位

b=read_ds18b20_byte();

//高八位

c=a&

0x0f;

c=c*0.625;

b<

<

=4;

b+=(a&

0xf0)>

4;

b=b*10+c;

returnb;

voiddisplay_ds18b20()

d=rtc_ds18b20();

wx=1;

P1=wu[2];

wx=0;

dx=1;

P1=du[d/100];

dx=0;

delay_1ms

(2);

P1=0xff;

delay(200);

P1=wu[3];

P1=duan[(d/10)%10];

delay(100);

P1=wu[4];

P1=du[d%10];

delay_1ms(3);

P1=wu[5];

P1=du[12];

delay_1ms(4);

//////////////////////////////////////////////////////////////

//////////ds1302///////////////////////////////////////

#ifndef__DS1302_H__

#define__DS1302_H__

#include"

sbitsck1302=P0^0;

sbitio1302=P0^1;

sbitrst1302=P0^2;

//输入信号,在读、写数据期间,必须为高

sbitdx=P2^0;

//段选

sbitwx=P2^1;

//位选

ucharzhou[8];

ucharsfm[8];

//没小数点

ucharsfm1[8];

//有小数点

ucharrqi[8];

uchartime_data[7]={11,6,3,5,11,6,30};

//年周月日时分秒

ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};

ucharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};

uchart1;

voidwrite_ds1302_byte(uchardat)//单字节写

sck1302=0;

io1302=dat&

dat=dat>

1;

sck1302=1;

}

voidwrite_ds1302(ucharadd,uchardat)//多字节写

rst1302=0;

rst1302=1;

write_ds1302_byte(add);

//写地址

write_ds1302_byte(dat);

//写数据

io1302=1;

ucharread_ds1302(ucharadd)//多字节读

//写一个地址

value=value>

if(io1302)

voidset_stc(void)//数据转换

7;

j=time_data[i]/10;

time_data[i]=time_data[i]%10;

time_data[i]=time_data[i]+j*16;

write_ds1302(0x8e,0x00);

//去除写保护

write_ds1302(write_add[i],time_data[i]);

write_ds1302(0x8e,0x80);

//加上写保护

voidread_rtc(void)//一下读取时间、日期、星期

time_data[i]=read_ds1302(read_add[i]);

voidtime_pros(void)//把16进制转换成十进制

sfm[7]=time_data[6]%16;

sfm[6]=time_data[6]/16;

sfm[5]=16;

sfm[4]=time_data[5]%16;

sfm[3]=time_data[5]/16;

sfm[2]=16;

sfm[1]=time_data[4]%16;

sfm[0]=time_data[4]/16;

sfm1[7]=time_data[6]%16;

sfm1[6]=time_data[6]/16;

sfm1[5]=19;

sfm1[4]=time_data[5]%16;

sfm1[3]=time_data[5]/16;

sfm1[2]=19;

sfm1[1]=time_data[4]%16;

sfm1[0]=time_data[4]/16;

rqi[7]=time_data[3]%16;

rqi[6]=time_data[3]/16;

rqi[5]=17;

rqi[4]=time_data[2]%16;

rqi[3]=time_data[2]/16;

rqi[2]=17;

rqi[1]=time_data[0]%16;

rqi[0]=time_data[0]/16;

zhou[7]=17;

zhou[6]=17;

zhou[5]=17;

zhou[4]=time_data[1]%16;

zhou[3]=17;

zhou[2]=17;

zhou[1]=17;

zhou[0]=17;

voiddisplay_sfm(void)//显示时分秒

{

if(t1<

=18)//没小数点

wx=1;

P1=wu[i];

wx=0;

dx=1;

P1=du[sfm[i]];

dx=0;

}

else//有小数点

P1=du[sfm1[i]];

if(t1==20)

t1=0;

voiddisplay_rqi(void)//显示日期

wx=1;

P1=du[rqi[i]];

dx=1;

dx=0;

voiddisplay_zhou(void)//显示星期

P1=du[zhou[i]];

////////////////////////////////////////////////////

////////////////主函数、、///////////////////////////

ds1302.h"

ds18b20.h"

sbitp07=P0^7;

uintt;

voidmain()

t0init();

//set_stc();

p07=1;

while

(1)

read_rtc();

time_pros();

if(t/100==0)

display_sfm();

}

if(t/100==1)

{

display_zhou();

if(t/100==2)

display_rqi();

if(t/100==3)

{

display_ds18b20();

if(t/100==4)

t=0;

voidt0()interrupt1

t++;

t1++;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

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

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