教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

1602、18b20、ds1302电子时钟(2)

来源:网络收集 时间:2026-06-01
导读: //LCD写数据 delay(1); e=0; } void delay(uchar z) //延时函数 介绍了1602/1602/18b20以c语言为基础的编程方法。 { uchar x,y; for(x=0;xz;x++) for(y=0;y110;y++); } /***************END***********END*********

//LCD写数据

delay(1); e=0; }

void delay(uchar z)

//延时函数

介绍了1602/1602/18b20以c语言为基础的编程方法。

{

uchar x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); }

/***************END***********END******************************/

3.2.3 DS1302.h程序文件:

/***************时钟芯片相关程序*************************/ sbit rst=P2^5; //时钟芯片复位端 sbit sck=P2^6; // 时钟信号

sbit io=P2^7; // 时钟输入/输出端

void Write_Ds1302_Byte(uchar temp);//写入一个字节 void Write_Ds1302(uchar address,uchar dat);//写入 uchar Read_Ds1302 ( uchar address ); //读取时间 void Read_RTC(void);

//读取日历

void Set_RTC(uchar *p); //设定日历 void time_date(); //时间数据处理 void display(uchar *lp,uchar lc); //显示时间 uchar code table0[]="0123456789-";

uchar code table1[]="MONTUEWEDTHUFRISATSUN";

uchar code table2[]="0123456789:";

code uchar write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //写入时钟芯片的地址,顺序同上

code uchar read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //以上是读出数据的地址

uchar code l_tmpdate1[7]={0x50,0x30,0x15,0x12,0x06,0x04,0x09};

/*初始化时钟芯片,依次是秒分时日月星期年,用16进制的BCD码表示 */ uchar l_tmpdate[7],l_tmpdisplay[18],SetTime[18],ring_time[7]; void Write_Ds1302_Byte(uchar temp) //写入一字节数据 {

uchar i;

for (i=0;i<8;i++) //循环8次写入数据 ,上升沿写入 {

sck=0;

io=temp&0x01; //每次传输低字节 temp>>=1; //右移一位 sck=1; }

}

void Write_Ds1302(uchar address,uchar dat)//写入 {

rst=0; delay(1);

介绍了1602/1602/18b20以c语言为基础的编程方法。

sck=0;

delay(1); rst=1;

delay(1); //启动

Write_Ds1302_Byte(address);

Write_Ds1302_Byte(dat); rst=0; //恢复

//发送地址 //发送数据

}

uchar Read_Ds1302 (uchar address) {

uchar i,time=0x00; rst=0; delay(1); sck=0; delay(1); rst=1;

//读取时间

delay(1);

Write_Ds1302_Byte(address); for (i=0;i<8;i++) //循环8次 读取数据 {

//每次传输低字节 //时钟下降沿读入数据 //右移一位

if(io)

time|=0x80; sck=1; time>>=1; sck=0;

} rst=0; delay(1); rst=0; sck=0; delay(1); sck=1; delay(1); io=0; delay(1); io=1; delay(1);

//以下为DS1302复位的稳定时间

return (time); }

void Read_RTC() {

//读取 日历

uchar i,*p;

p=read_rtc_address; //地址传递 for(i=0;i<7;i++) //分7次读取 年月日时分秒星期

介绍了1602/1602/18b20以c语言为基础的编程方法。

l_tmpdate[i]=Read_Ds1302(*p); p++; } }

void Set_RTC(uchar *P1302) //设定 日历 {

uchar i,*p;

Write_Ds1302(0x8E,0X00); //允许写入

p=write_rtc_address; for(i=0;i<7;i++) {

//传地址

//7次写入 年月日时分秒星期

Write_Ds1302(*p,P1302[i]);

p++; }

Write_Ds1302(0x8E,0x80); //禁止写入

//时间数据处理

}

void time_date() {

Read_RTC(); l_tmpdisplay[0]=l_tmpdate[2]/16;//时

l_tmpdisplay[1]=l_tmpdate[2]&0x0f; l_tmpdisplay[2]=10; //加入":" l_tmpdisplay[3]=l_tmpdate[1]/16;//分 l_tmpdisplay[4]=l_tmpdate[1]&0x0f; l_tmpdisplay[5]=10;

l_tmpdisplay[6]=l_tmpdate[0]/16;//秒 l_tmpdisplay[7]=l_tmpdate[0]&0x0f;

l_tmpdisplay[8]=2; //显示2008的2 l_tmpdisplay[9]=0; //显示2008的第一个0 l_tmpdisplay[10]=l_tmpdate[6]/16; //年 l_tmpdisplay[11]=l_tmpdate[6]&0x0f; l_tmpdisplay[12]=10; //加入“-” l_tmpdisplay[13]=l_tmpdate[4]/16;//月 l_tmpdisplay[14]=l_tmpdate[4]&0x0f; l_tmpdisplay[15]=10;

l_tmpdisplay[16]=l_tmpdate[3]/16;//日 l_tmpdisplay[17]=l_tmpdate[3]&0x0f;

}

void display(uchar *lp,uchar lc) //显示时间 {

unsigned char i; //定义变量

介绍了1602/1602/18b20以c语言为基础的编程方法。

write_com(0x82); //液晶第一行显示时间和星期 for(i=0;i<lc;i++) {

write_date(table2[lp[i]]); delay(1); }

write_com(0x80+0x0b);

switch(l_tmpdate[5]) //用英文缩写显示星期 {

case 0: write_date(table1[0]); write_date(table1[1]);

write_date(table1[2]); break;

case 1: write_date(table1[3]); write_date(table1[4]); write_date(table1[5]); break;

case 2: write_date(table1[6]);

write_date(table1[7]); write_date(table1[8]);

break;

case 3: write_date(table1[9]); write_date(table1[10]); write_date(table1[11]);

break;

case 4: write_date(table1[12]); write_date(table1[13]); write_date(table1[14]); break;

case 5: write_date(table1[15]);

write_date(table1[16]); write_date(table1[17]);

break;

case 6: write_date(table1[18]);

write_date(table1[19]); write_date(table1[20]); break;

}

write_com(0x80+0x40); //第二行显示年 for(i=8;i<lc+10;i++) {

write_date(table0[lp[i]]);

介绍了1602/1602/18b20以c语言为基础的编程方法。

delay(1);

} }

/***************END***********END******************************/

3.2.4 DS18B20.h程序文件:

/***************温度传感器相关程序******************/ sbit ds=P2^3; //温度传感器信号线 sbit led=P2^4;

//小灯位定义

// 整型温度值

uchar temperature; uint temp,limit=800;

float f_temp; //浮点型温度值 uint get_temp(); //获得温度 void tempchange(void); void dsreset(void); bit tempreadbit(void);

//转换温度

//DS18B20复位 //读DS118B20一位

uchar tempreadbyte(void); //读DS18B20一个字节

void tempwritebyte(uchar dat); //写入DS18B20一个字节 void deal(); //温度处理函数 void Temp_Display();

//温度显示

uchar code table[]="0123456789.C "; void dsreset(void) //DS18B20复位,初始化函数 {

uint i; ds=0; i=103; …… 此处隐藏:4023字,全部文档内容请下载后查看。喜欢就下载吧 ……

1602、18b20、ds1302电子时钟(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/117606.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)