#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
bit fiag;
sbit D0=P2^2;
sbit duan=P2^5;
sbit wei=P2^6;
sbit fmq=P3^3;
sbit si=P1^0;//数据输入口
sbit rck=P2^3;//595移位寄存器,数据送输出的时钟
sbit srck=P1^4;//595数据 写进 移位 寄存器时钟输入口
uchar code suzu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
uint temp;
void wo_74_hc595(uchar v)
{
uchar H;
rck=0;
for(H=0;H<8;H++)
{
srck=0;
si=(v<<H)&0x80;
srck=1;
}
rck=1;
si=1;
}
void delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
void delayyanshi(uint t )
{ while(t--);}
void D0_reset(void)
{
D0=1;
delayyanshi(5);
D0=0;
delayyanshi(80);
D0=1;
delayyanshi(14);
if(D0==0)
fiag=1;
else
fiag=0;
delayyanshi(20);
}
bit D0_read_bit()
{
bit dat;
D0=0;
_nop_();
_nop_();
D0=1;
_nop_();
dat=D0;
delayyanshi(10);
return dat;
}
uchar D0_read_byte()
{
uchar i,j,k;
for(i=0;i<8;i++)//循环8次
{
j=D0_read_bit();
k=(j<<7)|(k>>1);
}
return k;
}
void D0_write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
D0=0;
_nop_();
D0=dat&0x01;
delayyanshi(6);
D0=1;
dat=dat>>1;
}
delayyanshi(6);
}
uint read_temperature()
{
uchar a,b;
D0_reset();
D0_write_byte(0xcc);
D0_write_byte(0xbe);
a=D0_read_byte();
b=D0_read_byte();
temp=b;
temp=temp<<8;
temp=temp|a;
temp=temp*0.0625*10+0.5;
return temp;
}
void display(uint temp)
{
wei=1;
P0=0x01;
wei=0;
duan=1;
P0=suzu[temp/100];
duan=0;
delay(4);
wei=1;
P0=0x02;
wei=0;
duan=1;
P0=suzu[temp%100/10]&0x7f;
duan=0;
delay(4);
wei=1;
P0=0x04;
wei=0;
duan=1;
P0=suzu[temp%10];
duan=0;
delay(2);
}
void main(void)
{
while(1)
{
D0_reset();
D0_write_byte(0xcc);
D0_write_byte(0x44);
display(read_temperature());
if(read_temperature()>=290)
wo_74_hc595(0x07);//继电器闭合
else
wo_74_hc595(0x00);//继电器打开
}
}
在数码管上显示温度启动继电器
最新推荐文章于 2024-10-06 11:45:32 发布