#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char code dispbit[]={0x05,0x04,0x03,0x02,0x01,0x00};
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit RS_LCD=P2^0;
sbit EN_LCD=P2^1;
sbit dot=P0^7;
sbit DQ_DS18B20=P1^0;
uchar tk=0x04,tg=5;
uint TEMP_H=0,TEMP_L=0,TEMPERATURE=0,SIGN=0,DECIMAL=0,TEMP1=0,SIGN1=0,DEC1=0;
uchar flag=0,SHI=0,GE=0,BAI=0XFF;
uchar code DECP[16]={0,0,1,0,2,3,0,4,5,0,6,0,7,8,0,9};
uchar code DECN[16]={0,0,9,8,0,7,0,6,5,0,4,3,0,2,0,1};
void DELAY(uint POSTPONE)
{
while(POSTPONE--);
}
//****************************************** LED SEGMENT **************************************************
void LED_DIS()
{
if(SIGN)
{
P2=0X00;
P0=0XBF;
P0=0XFF;
}
else if(BAI==0XF9){
P2=0X00;
P0=0XF9;
P0=0XFF;
}
P2=0x01;
P0=dispcode[SHI];
P0=0xff;
P2=0x02;
P0=dispcode[GE]&0x7f;
P0=0xff;
P2=0x03;
P0=dispcode[DECIMAL];
P0=0xff;
P2=0x04;
P0=0X9C;
P0=0xff;
P2=0x05;
P0=0XC6;
P0=0xff;
}
//****************************************** LED END ******************************************************
/*
//******************************************* LCD SEGMENT *************************************************
void WR_LCD_COM(uint LCD_COM)
{
RS_LCD=0;
P0=LCD_COM;
EN_LCD=1;
DELAY(100);
EN_LCD=0;
}
void WR_LCD_DATA(uint LCD_DATA)
{
RS_LCD=1;
P0=LCD_DATA;
EN_LCD=1;
DELAY(100);
EN_LCD=0;
}
void WR_LCD_POINT(uchar LCD_ADD,uchar LCD_DATA) //LCD指定位置写数据
{
WR_LCD_COM(LCD_ADD);
WR_LCD_DATA(LCD_DATA);
}
void WR_LCD_NUM(uchar LCD_ADD, uchar NUM)
{
WR_LCD_COM(LCD_ADD);
WR_LCD_DATA(NUM/10+48);
WR_LCD_DATA(NUM%10+48);
}
void WR_LCD_SENTENCE(uchar ADD_LCD,uchar COUNT,uchar *SEN)
{
uchar i;
WR_LCD_COM(ADD_LCD);
for(i=COUNT;i>0;i--)
{
WR_LCD_DATA(*SEN);
SEN++;
}
}
WR_LCD_TEMPERATURE()
{
if(flag==100)
{
if(TEMP1!=TEMPERATURE||SIGN!=SIGN||DEC1!=DECIMAL)
{
TEMP1=TEMPERATURE;
SIGN1=SIGN;
DEC1=DECIMAL;
if(SIGN)
WR_LCD_POINT(0X80+0X49,'-');
else if(TEMP1>99)
{
WR_LCD_POINT(0X80+0X49,'1');
TEMPERATURE%=100;
}
else WR_LCD_POINT(0X80+0X49,' ');
WR_LCD_NUM(0X80+0X4A,TEMPERATURE);
WR_LCD_POINT(0X80+0X4C,'.');
WR_LCD_POINT(0X80+0X4D,DECIMAL+48);
WR_LCD_POINT(0X80+0X4E,0XDF);
WR_LCD_POINT(0X80+0X4F,'C');
}
}
else
{
flag++;
if(flag==1)
WR_LCD_SENTENCE(0X80+0X49,7,"READ ");
else if(flag==25)
WR_LCD_SENTENCE(0X80+0X49,7,"READ. ");
else if(flag==50)
WR_LCD_SENTENCE(0X80+0X49,7,"READ.. ");
else if(flag==75)
WR_LCD_SENTENCE(0X80+0X49,7,"DONE...");
}
}
//********************************************* LCD END **********************************************************
*/
//************************************************** DS18B20 SEGMENT **********************************************
char INIT_DS18B20()
{
uchar DQ;
DQ_DS18B20=0;
DELAY(65);
DQ_DS18B20=1;
DELAY(4);
DQ=DQ_DS18B20;
DELAY(11);
return DQ;
}
void START_DS18B20()
{
char i=0;
while(!i)
{
if(!INIT_DS18B20())
i=1;
// else WR_LCD_SENTENCE(0X80+0X40+9,5,"ERROR");
}
}
void WR_DS18B20(uchar COM_DS18B20)
{
uchar i;
for(i=8;i>0;i--)
{
DQ_DS18B20=0;
COM_DS18B20>>=1;
DQ_DS18B20=CY;
DELAY(6);
DQ_DS18B20=1;
}
}
RE_DS18B20()
{
uchar i,j,TEMP;
for(j=2;j>0;j--)
{
for(i=8;i>0;i--)
{
DQ_DS18B20=0;
DQ_DS18B20=1;
DELAY(3);
TEMP>>=1;
if(DQ_DS18B20)
TEMP|=0X80;
DELAY(5);
}
if(j==1)
TEMP_H=TEMP;
else TEMP_L=TEMP;
}
}
void RE_TEMPERATURE()
{
START_DS18B20();
WR_DS18B20(0XCC);
WR_DS18B20(0X44);
START_DS18B20();
WR_DS18B20(0XCC);
WR_DS18B20(0XBE);
RE_DS18B20();
TEMPERATURE=TEMP_H*256+TEMP_L;
DECIMAL=DECP[TEMP_L&0X0F];
SIGN=TEMP_H/16;
if(SIGN)
{
TEMPERATURE=~TEMPERATURE*0.0625;
DECIMAL=DECN[TEMP_L&0X0F];
if(DECIMAL==0)
TEMPERATURE+=1;
}
else TEMPERATURE*=0.0625;
TEMP1=TEMPERATURE;
if(TEMP1>99)
{
TEMP1%=100;
BAI=0XF9;
}
else BAI=0XFF;
SHI=TEMP1/10;
GE=TEMP1%10;
}
//************************************************** DS18B20 END **************************************************
/*
void init()
{
EN_LCD=0;
WR_LCD_COM(0x38);
WR_LCD_COM(0x0C);
WR_LCD_COM(0x06);
WR_LCD_COM(0X01);
WR_LCD_COM(0x80);
}
*/
void main()
{
// init();
P2=0X00;
P0=0XFF;
EA=1;
ET0=1;
TMOD=0X01;
TH0=0X3c;
TL0=0xb0;
TR0=1;
flag=100;
while(flag--)
RE_TEMPERATURE();
while(1)
{
LED_DIS();
}
}
void timer() interrupt 1
{
RE_TEMPERATURE();
}
LED 温度 ds18b20 51单片机 含 protues 仿真 课程设计
5星 · 超过95%的资源 需积分: 9 85 浏览量
2010-06-16
00:16:28
上传
评论 3
收藏 60KB RAR 举报
liubinkaixin
- 粉丝: 14
- 资源: 41
最新资源
- 校园帮项目,毕业设计/课程设计/javaWeb/SSM
- C++ plotting library,matplotlib-cpp-master.zip
- 案例源码matplotlib-examples-master.zip
- 基于JavaScript 实现的KMP 算法
- 基于C++实现二叉树的创建,遍历,添加,查找与删除
- 基于C语言实现二叉树的基本操作
- 毕业设计基于STM32的测量温度与压力的数据处理设计C语言完整源码+论文.zip
- 基于MATLAB的PCA算法人脸识别项目源码+GUI界面+说明文档.zip
- 基于STM32的测量温度与压力的数据处理设计源码+论文(毕业设计).zip
- Vision Transformer 网络对不同氨气氧气浓度轨迹RAS 图像数据集的分类,包含训练权重和数据集、迁移学习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页