找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

ds18b20在液晶上显示

[复制链接]
admin 发表于 2012-9-2 11:31:28 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
准备写一个带温度显示的时钟,现在做到了一半“温度显示”
请高手看看有没有问题或更简洁的写法。

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit ds18b20=P2^2;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit s4=P3^3;
sbit rd=P3^7;
uchar code table[]=" 2010-12-23 ";
uchar code table1[]="00:00:00 00.0 C";
uchar num,bai,shi,ge;
uint temp;
//**************************************************
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(2);
lcden=1;
delay(2);
lcden=0;
}
void init(void)
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x80);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(10);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(20);
}
write_com(0x80+0x40+14);
write_data(0xdf);
// TMOD=0x01;
// TH0=(65536-45872)/256;
//TL0=(65536-45872)%256;
//EA=1;
//ET0=1;
//TR0=1;
}
//ds18b20*************************************
void dsinit(void)
{
uint i;
ds18b20=1;
delay(1);
ds18b20=0;
i=103;
while(i>0)i--;
ds18b20=1;
i=4;while(i>0)i--;

}
bit readbit(void)
{
uint i;
bit dat;
ds18b20=0;i++;
ds18b20=1;i++;i++;
dat=ds18b20;
i=8;while(i>0)i--;
return (dat);
}
uchar read(void)
{
uchar i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
j=readbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void writedate(uchar dat)
{
uint i;
uchar j;
bit num;
ds18b20=0;
i=4;while(i>0)i--;
for(j=8;j>0;j--)
{
num=dat&0x01;
dat=dat>>1;
if(num)
{
ds18b20=0;
i++;i++;
ds18b20=1;
i=8;while(i>0)i--;
}
else
{
ds18b20=0;
i=8;while(i>0)i--;
ds18b20=1;
i++;i++;
}
}
}
void change(void)
{
dsinit();
delay(1);
writedate(0xcc);
writedate(0x44);
}
uint get_temp()
{
float aa;
uchar a,b;
dsinit();
delay(1);
writedate(0xcc);
writedate(0xbe);
a=read();
b=read();
temp=b;
temp<<=8;
temp=temp|a;
aa=temp*0.0625;
temp=aa*10+0.5;
return temp;
}
void bsg()//显示温度
{
uchar bai,shi,ge;
bai=temp/100;
shi=temp/10%10;
ge=temp%100%10;
write_com(0x80+0x40+10);
write_data(0x30+bai);
write_com(0x80+0x40+11);
write_data(0x30+shi);
write_com(0x80+0x40+13);
write_data(0x30+ge);
}
void main(void)
{
init();
while(1)
{
uchar a;
change();
for(a=10;a>0;a--)
{
get_temp();
}
bsg();
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 20:52 , Processed in 0.057377 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表