标题:
LED和LCD显示测量温度C程序
[打印本页]
作者:
das
时间:
2015-4-5 01:04
标题:
LED和LCD显示测量温度C程序
//说明:本程序用的延时程序部分,都是用示波器精确的测试所得的数据.
#include<reg52.h>
#define uchar unsigned char
sbit DQ=P3^5;
sbit D1=P0^1;
sbit D2=P0^2;
sbit D3=P0^3;
///////////////LCD1602/////
sbit RS=P0^5;
sbit RW=P0^6;
sbit YE=P0^7;
/////////////////////////////////////////////////////////////
uchar code table[]={0xc0,0xf9,0xa4,0xb0,//0,1,2,3
0x99,0x92,0x82,0xf8,//4,5,6,7
0x80,0x90,0xfe};//8,9,.,段码表
/////////////////////////////////////////////////////////////
uchar code table1[] ={"0123456789"};
uchar code table2[] ={" Temperature="};
uchar code table3[] ={" www.51hei.com "};
/////////////////////////////////////////////////////////////
void delay(unsigned int us)
{
while(us--);
}
////////////////////////////////////////////
void delay2()
{
RS=0;
RW=0;
YE=0;
delay(50);
YE=1;
}
/***************************************************************/
void reset()// DS18B20复位OK
{
uchar x=0;
DQ=1;
delay(8);
DQ=0;
delay(330);
DQ=1;
delay(100);
x=DQ;
delay(20);
}
////////////////////////////////////////////从DS18B20读一字节
uchar readbyte()
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(27);//41us
}
return(dat);
}
/////////////////////////////////////////////向DS18B20写一字节
void writebyte(unsigned char dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(8);
if(DQ==0)
{
delay(27);//41us
DQ=1;
}
else
{
DQ=1;
delay(27);//41us
}
dat>>=1;
}
}
////////////////////////////////////////////MCU读取温度值
uchar readtemp()
{
uchar a=0;
uchar b=0;
reset();
writebyte(0xcc);
writebyte(0x44);
reset();
writebyte(0xcc);
writebyte(0xbe);
a=readbyte();
b=readbyte();
////////////////////////
b<<=4;
b+=(a&0xf0)>>4;
return(b);
}
//////////////////////////////////////////LED数码管显示程序
void shanshi(uchar dat)
{
uchar a,b;
a=dat/10;
b=dat%10;
////////////
D1=0;
D2=1;
P1=table[a];
delay(1000);
P1=0xff;
delay(1000);
/////////////////
D1=1;
D2=0;
P1=table[b];
delay(1000);
P1=0xff;
delay(1000);
}
/******************LCD1602液晶显示****************************/
void LCD1602(uchar dd)
{
uchar e,f,i,nem,t;
e=dd/10;
f=dd%10;
//////////////////////
P2=0x01; //清屏
delay2();
P2=0x38; //显示设定两行
delay2();
P2=0x0f; //打开显示和光标
delay2();
P2=0x06; //光标右移
delay2();
P2=0x80; //光标回到第一行的开头
delay2();
///////////////////////
for(nem=0;nem<13;nem++)
{
P2=table2[nem];
RS=1;
RW=0;
YE=0;
delay2();
}
//////////////////////////////////////
for(t=0;t<1;t++)
{
P2=table1[e];
RS=1;
RW=0;
YE=0;
P2=0x06; //光标右移
delay2();
////////////////////////
P2=table1[f];
RS=1;
RW=0;
YE=0;
}
//////////////////////////////////////
P2=0xc0;
delay2();
for(i=0;i<16;i++)
{
P2=0xc0;
delay2();
P2=table3[i];
RS=1;
RW=0;
YE=0;
}
}
////////////////////////////////////////////主函数
void main()
{
uchar temp;
while(1)
{
temp=readtemp();
shanshi(temp);
delay(10);
LCD1602(temp);
}
}
复制代码
作者:
ly11994
时间:
2017-4-27 09:45
有帮助,先谢过
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1