📄 1820.c
字号:
//#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
///////////////////////////////////////////////////////////////
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^3 ;
sbit led0=P3^1 ;
sbit led1=P3^2 ;
sbit led2=P3^3 ;
sbit led3=P3^4 ;
uchar temp[7];
///////////////////////////////////////////////////////////////
uchar data temp_data[2]={0x00,0x00};
uchar dispaly[6];
void ds_reset(void);
void write_byte(uchar value);
uchar read_byte(void);
void delay(uint i);
void read_temp();
void work_temp();
void StartUART( void );
void work_temp();
void R_S_Byte(uchar R_Byte);
//////////////////////////////////////////////////////////////
uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0~~9段码
uchar seg1[10]={0x40,0x4F,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //0~~9段码
///////////////////////////////////////////////////////////////
delay1(uchar x)
{
uchar i;
while(x--)
{
for(i=0;i++;i<10);
}
}
void StartUART( void )
{ //波特率4800
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFA;
TL1 = 0xFA;
PCON = 0x00;
TR1 = 1;
}
///////////////////////////////////////////////////////
void R_S_Byte(uchar R_Byte)
{
SBUF = R_Byte;
while( TI == 0 ); //查询法
TI = 0;
}
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
void delay(uint i)
{
for(;i>0;i--);
}
///////////////////////////////////////////////////////////////////////////////
void ds_reset(void)
{
char temp=1;
while(temp)
{
while(temp)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay(80);
DQ=1;
delay(9);
temp=DQ;
}
delay(64);
temp=~DQ;
}
DQ=1;
}
/////////////////////////////////////////////////////////////////////////////////
void write_byte(uchar value)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=value&0x01;
delay(9);
value>>=1;
}
DQ=1;
delay(1);
}
///////////////////////////////////////////////////////////////////////////////////////
uchar read_byte(void)
{
uchar i;
uchar value1=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value1>>=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();
DQ=1;
_nop_();_nop_();_nop_();_nop_();
if(DQ)
value1|=0x80;
delay(9);
}
DQ=1;
return(value1);
}
////////////////////////////////////////////////////////////////////////
void read_temp()
{
ds_reset();
write_byte(0xcc);
write_byte(0xbe);
temp_data[0]=read_byte();
temp_data[1]=read_byte();
ds_reset();
write_byte(0xcc);
write_byte(0x44);
}
/////////////////////////////////////////////////////////////////////////////////////
void work_temp()
{
uchar n=0;
if(temp_data[1]>127)
{
temp_data[1]=(256-temp_data[1]);
temp_data[0]=(256-temp_data[0]);
n=1;
}
dispaly[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
dispaly[3]=dispaly[4]/100; //百位
dispaly[2]=dispaly[4]%100; //
dispaly[1]=dispaly[2]/10; //十位
dispaly[0]=dispaly[2]%10; //个位
switch (temp_data[0]&0x0f)
{
case 0x0f:dispaly[5]=9;break;
case 0x0e:dispaly[5]=9;break;
case 0x0d:dispaly[5]=8;break;
case 0x0c:dispaly[5]=8;break;
case 0x0b:dispaly[5]=7;break;
case 0x0a:dispaly[5]=6;break;
case 0x09:dispaly[5]=6;break;
case 0x08:dispaly[5]=5;break;
case 0x07:dispaly[5]=4;break;
case 0x06:dispaly[5]=4;break;
case 0x05:dispaly[5]=3;break;
case 0x04:dispaly[5]=3;break;
case 0x03:dispaly[5]=2;break;
case 0x02:dispaly[5]=1;break;
case 0x01:dispaly[5]=1;break;
case 0x00:dispaly[5]=0;break;
default:break;
}
if(!dispaly[3]) //百位何?时不显示
{
dispaly[2]=0x0a;
if(!dispaly[1]) //十位为0时显示0
{
dispaly[1]=0x0a;
}
}
if(n) //负值时显示-
{
dispaly[3]=0x0B;
}
}
////////////////////////////////////
void disdignit()
{
char i;
for(i=0;i<3;i++)
{
P2=0xC6;
led0=0;
delay1(450);
led0=1;
P2=seg[dispaly[1]];
led1=0;
delay1(450);
led1=1;
P2=seg1[dispaly[0]];
led2=0;
delay1(450);
led2=1;
P2=seg[dispaly[5]];
led3=0;
delay1(450);
led3=1;
}
}
//////////////////////////////////////////////////////////
main()
{
StartUART();
delay(500);
ds_reset();
write_byte(0xcc);
write_byte(0x44);
while(1)
{
// R_S_Byte(0x00);
read_temp();
// R_S_Byte(temp_data[0]);
// R_S_Byte(temp_data[1]);
work_temp();
R_S_Byte( dispaly[1]);
R_S_Byte( dispaly[0]);
R_S_Byte( dispaly[5]);
disdignit();
delay(50000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -