📄 ceshi.c
字号:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int;
sbit dula=P2^6;
sbit wela=P2^7;
sbit dq=P2^2;
sbit feng=P2^3;
uint c1_temper;
uint L_temper;
uint H_temper;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};
void init();
/*****************复位*************************/
void delay_ms(uint z)//毫秒级的延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_us()//延时微秒
{
_nop_();
}
void dq_reset()
{
uchar t;
uchar dd;
dq=0;
for(t=250;t>0;t--);
dq=1;
delay_us();delay_us();
dd=dq;
for(t=150;t>0;t--);
}
/******************读位写位**********************/
uchar read_bit()
{
uchar t;
uchar dd;
dq=0;
delay_us();delay_us();
dq=1;
for(t=3;t>0;t--);
dd=dq;//get the signal
for(t=20;t>0;t--);
return dd;
}
void write_bit(uchar dd)
{
uchar t;
if(dd==1)
{
dq=0;
delay_us();
dq=1;
for(t=30;t>0;t--);
}
else
{
dq=0;
for(t=30;t>0;t--);
dq=1;
delay_us();
delay_us();
}
}
void write_cmd(uchar z)//写命令
{
uchar i,t;
uchar temp;
uchar cmd=z;
for(i=0;i<8;i++)
{
temp=cmd&0x01;
if(temp)
{
dq=0;
delay_us();delay_us();//
dq=1;
for(t=40;t>0;t--);
}
else
{
dq=0;
for(t=40;t>0;t--);
dq=1;
delay_us(); delay_us();
}
cmd=_cror_(cmd,1);
}
}
/*****************温度******************************/
uchar read_byte()//读字节
{
uchar i;
uchar temp;
uchar dd;
temp=0x00;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
dd=read_bit();
if(dd==1)
{
temp=temp|0x80;
}
else
{
temp=temp|0x00;
}
}
return(temp);
}
uint get_temper()//get centigrad for the ram
{
uchar LSB_temper;
uchar MSB_temper;
//uchar i;
uint c_temper=0;
float f_temper=0;
dq_reset();
write_cmd(0xcc);
//write_cmd(0x55);
/*if(z==1)
{
for(i=0;i<8;i++)
{
write_date(code1[i]);
}
}
else
{
for(i=0;i<8;i++)
{
write_date(code2[i]);
}
}*/
write_cmd(0xbe);//读存储器内的温度
LSB_temper=read_byte();
MSB_temper=read_byte();
c_temper=MSB_temper;
c_temper=(c_temper<<8);
c_temper=c_temper|LSB_temper;
f_temper=c_temper*0.0625;
c_temper=f_temper*10+0.5;
return (c_temper);
}
/******************温度显示***********************/
void display_temper(uint wengdu,uchar fc)//显示当前温度值
{
uchar xx,yy,zz;
uint temp;
temp=wengdu;
xx=temp/100;
yy=temp%100/10;
zz=temp%10;
wela=1;
P0=0xfe;
wela=0;
P0=0x00;
dula=1;
P0=table[xx];
dula=0;
delay_ms(2);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
P0=0x00;
dula=1;
P0=(table[yy]+0x80);
dula=0;
delay_ms(2);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
P0=0x00;
dula=1;
P0=table[zz];
dula=0;
delay_ms(1);
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
P0=0x00;
dula=1;
P0=table[fc];
dula=0;
delay_ms(1);
}
void init()//初始化
{
L_temper=100;
H_temper=320;
c1_temper=200;
dula=0;
wela=0;
}
void main()
{
init();
uint i;
while(1)
{
dq_reset();
write_cmd(0xcc);
write_cmd(0x44);
c1_temper=get_temper();
for(i=10;i>0;i--)
{
display_temper(get_temper(),1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -