#include<reg52.h>
#include<intrins.h>
#include<wendu.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit led=P3^3;
sbit shenwen=P1^5;
sbit jiangwen=P1^6;
uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00,0x40,0x38,0x76};
uchar code tab3[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xC0,0x00};
uchar yi,er,san,si,san1;
uint shangxian=30,xiaxian=0,flag=0;
void delay(int ma);
void display1(uchar yi,uchar er,uchar san,uchar si);
void display2(uchar yi,uchar er,uchar san1,uchar si);
void keyscan();
void main()
{
float wendu=0;
int wenduzhen=0;
yi=11;er=11;san=11;si=11;
jiangwen=shenwen=1;//繼電器
while(1)
{
keyscan();
if(flag==0)//溫度測試界面
{
wendu=temget();
if(wendu<xiaxian) //升溫
{
shenwen=0;
jiangwen=1;
}
else if((wendu>=xiaxian) && (wendu<=shangxian) ) //實際溫度處于保溫范圍
{
shenwen=1; //繼電器初始化
delay(5);
jiangwen=1;
delay(5);
}
else if(wendu>=shangxian) //降溫開啟,燒水功能關閉
{
shenwen=1;
jiangwen=0;
}
wenduzhen=wendu*10;
yi=wenduzhen/1000;
er=wenduzhen%1000/100;
san=wenduzhen%100/10;
si=wenduzhen%10;
display1(yi,er,san,si);
}
else if(flag==2)//溫度下限設置界面
{
yi=13;er=12;
xiaxian=shangxian-2;
san1=xiaxian%100/10;
si=xiaxian%10;
display2(yi,er,san1,si);
}
else if(flag==1)//溫度上限設置界面
{
yi=14;er=12;
san1=shangxian%100/10;
si=shangxian%10;
display2(yi,er,san1,si);
}
//
// if(xiaxian>=shangxian)led=0;//下限超過上限led亮
// else led=1;
}
}
void keyscan()
{
if(key1==0)//設置界面
{
delay(5);
if(key1==0)
{
flag++;
if(flag>2)flag=0;
}
while(!key1);
}
if(key2==0)//加數值
{
delay(5);
if(key2==0)
{
if(flag==1)
{
shangxian++;
if(shangxian>90)shangxian=0;
}
else if(flag==2)
{
xiaxian++;
if(xiaxian>89)shangxian=0;
}
}
while(!key2);
}
if(key3==0)//減數值
{
delay(5);
if(key3==0)
{
if(flag==1)
{
shangxian--;
if(shangxian<1)xiaxian=1;
}
else if(flag==2)
{
xiaxian--;
if(shangxian<0)xiaxian=0;
}
}
while(!key3);
}
}
void display1(uchar yi,uchar er,uchar san,uchar si)
{
P2=0XBF;
P0=tab[yi];
delay(1);
P2=0XF7;
P0=tab[er];
delay(1);
P2=0XEF;
P0=tab3[san];
delay(1);
P2=0XDF;
P0=tab[si];
delay(1);
}
void display2(uchar yi,uchar er,uchar san1,uchar si)
{
P2=0XBF;
P0=tab[yi];
delay(1);
P2=0XF7;
P0=tab[er];
delay(1);
P2=0XEF;
P0=tab[san1];
delay(1);
P2=0XDF;
P0=tab[si];
delay(1);
}
void delay(int ms)
{
int i,a;
for(i=ms;i>0;i--)
for(a=125;a>0;a--);
}
#include<reg52.h>
#include<intrins.h>
#include<wendu.h>
uchar temget()
{
uchar low,high;
int temp;
float temperature;
dsinit();
write(0xcc);
write(0x44);
Delay_us(100);
dsinit();
write(0xcc);
write(0xbe);
Delay_us(100);
low=read();
high=read();
temp=((high<<8)|low);
temperature=temp*0.0625;//分辨率是0.0625
// temp=high<<4;
// temp|=(low>>4); //顯示整數
return temperature;
}
uchar read()
{
uchar i;
uchar dat;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
dat>>=1;
DQ=1;
if(DQ==1)
{
dat|=0x80;
}
Delay_us(100);
}
return dat;
}
void write(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay_us(70);
DQ=1;
dat>>=1;
}
}
void dsinit()
{
DQ=0;
Delay_us(80);
DQ=1;
Delay_us(80);
}
void Delay_us(uchar us)
{
while(us--);
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^7;
uchar temget();
void write(uchar dat);
uchar read();
void dsinit();
void Delay_us(uchar us);
IMG_20190611_231249.jpg (2.21 MB, 下載次數: 32)
下載附件
2019-6-11 23:16 上傳
|