基于LCD1602和DS1302的时间显示程序(5)

2019-01-03 16:01

RTInputByte(ucAddr); /* 地址,命令 */ ucData = RTOutputByte(); /* 读1Byte数据 */ T_CLK = 1; T_RST = 0; return(ucData); }

/******************************************************* 函数名:Set1302() 功能:设置初始时间

说明:先写地址,后读命令/数据(寄存器多字节方式) 调用:W1302()

入口参数:pClock: 设置时钟数据地址格式为: 秒分时日月星期年 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 返回值:无

********************************************************/ void Set1302(uchar *pClock) { uchar i;

uchar ucAddr = 0x80;

W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ for(i =7; i>0; i--) {

W1302(ucAddr,*pClock); /* 秒分时日月星期年 */ pClock++; ucAddr +=2; }

W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/ }

//================================= 温度显示控制部分 =============================================== /***************************************************** 函数名:void delay() 功能:DS18B20延时 说明:DS18B20时序延时 入口参数:useconds

返回值:无

*****************************************************/ //*********** 18B20驱动 ************************** //延时

void delay(word useconds) {

for(;useconds>0;useconds--); }

/***************************************************** 函数名:byte ow_reset() 功能:DS18B20复位

说明:DS18B20使用时先要复位 入口参数:无 返回值:presence

*****************************************************/ //复位

byte ow_reset(void) {

byte presence; DQ = 0; //拉低总线 delay(29); // 保持 480us DQ = 1; // 释放总线 delay(3); // 等待回复 presence = DQ; // 读取信号 delay(25); // 等待结束信号

return(presence); // 返回 0:正常 1:不存在 }

/***************************************************** 函数名:byte read_byte()

功能:从 1-wire 总线上读取一个字节 说明:读总线上的数据有严格的时序 入口参数: 返回值:value

*****************************************************/ byte read_byte(void)

{ byte i; byte value = 0; for (i=8;i>0;i--) {

value>>=1; DQ = 0; DQ = 1; delay(1);

if(DQ)value|=0x80; delay(6); }

return(value); }

/***************************************************** 函数名:void write_byte()

功能:向 1-WIRE 总线上写一个字节 说明:写总线上的数据有严格的时序 入口参数:val 返回值:无

*****************************************************/ void write_byte(char val) { byte i;

for (i=8; i>0; i--) // 一次写一位 {

DQ = 0; // DQ = val&0x01; delay(5); // DQ = 1; val=val/2; } delay(5); }

/*****************************************************

函数名:Read_Temperature() 功能:读取和显示温度 说明:

入口参数:xx,yy 返回值:无

*****************************************************/ Read_Temperature(char xx,char yy) {

uchar i,tl_temp; uint x; uchar ct[8]; union //共用体 { byte c[2]; int x; }temp;

ow_reset(); // DS18B20复位 write_byte(0xCC); // Skip ROM write_byte(0x44); // 转换温度 ow_reset();

write_byte(0xCC); // Skip ROM write_byte(0xbe); // 读取寄存器

temp.c[1]=read_byte(); // 读出温度低8位 temp.c[0]=read_byte(); // 读出温度高8位

// 零下温度判断

sflag=0; //温度零下标志 0:零上,1:零下 if((temp.c[0]&0xf8)!=0x00) {

sflag=1; // 零下标志位置1

temp.c[1]=~temp.c[1]; // 低8位取反 temp.c[0]=~temp.c[0]; // 高8位取反 tl_temp=temp.c[1]+1; // 低8位加1 temp.c[1]=tl_temp; // 计算后重新存入数组

if(tl_temp>255) temp.c[0]++; // 如果低8位大于255,向高8位进1 }

x=((temp.c[0]&0x07)*256+temp.c[1])*.625; for(i=0;i<8;i++) { ct[i]=0; } i=0; while(x/10) {

ct[i]=x; x=x/10; i++; } ct[i]=x;

if(sflag==1) DisplayOneChar(xx-1,yy,0x2d); else DisplayOneChar(xx-1,yy,0x20);

DisplayOneChar(xx, yy,ct[2]+0x30); // 显示温度十位数 DisplayOneChar(xx+1,yy,ct[1]+0x30); // 显示温度个位数 DisplayOneChar(xx+2,yy,0x2e); // 显示小数点

DisplayOneChar(xx+3,yy,ct[0]+0x30); // 显示温度小数位 DisplayOneChar(xx+4,yy,0x01); // 显示自定义字符 DisplayOneChar(xx+5,yy,0x43); // 显示字符\}

/***************************************************** 函数名:void adjust_res() 功能:温度分辨率调整

说明:此函数可以对温度的显示进行精度调节. 入口参数:res 返回值:无

*****************************************************/

void adjust_res(char res) // res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应

// 0.5, 0.25, 0.125 {

ow_reset(); // 复位

write_byte(0xcc); // 跳过Rom write_byte(0x4e); // 写暂存器 write_byte(0x02); // 写TH write_byte(0x01); // 写TL

write_byte(res); // 温度转换分辨率设置 ow_reset(); // 复位

write_byte(0xcc); // 跳过Rom

write_byte(0x48); // 把暂存器内容写到EPRam中 }

//==========================程序结束

======================================================


基于LCD1602和DS1302的时间显示程序(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:经济地理学教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: