实在么办法了啊,这个程序已经改写了七八遍了,可就是送不了显,向各位高手求助啊,不知道这个版块是否合适发此贴~~:)
——————————————————————————————
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//不带小数点数字列表;
uchar code type[]={0xbf,0x86,0xcb,0xcf,0xe4,0xed,0xfd,0x87,0xff,0xef};//带小数点的数字列表;
uint T;//全局变量;
sbit DQ=P2^3; //位变量定义
/********************************************** 时序定义 ********************************************************/
#define delay1us _nop_();//定义一微妙时间;
#define delay10us _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
#define delay80us delay10us;delay10us;delay10us;delay10us;delay10us;delay10us;delay10us;delay10us;
#define delay240us delay80us;delay80us;delay80us;
/*********************************************************************************************************/
/******** 延时子程序 *******/
void delay(uchar x)
{
uint i;
for(i=x;i>0;i--)
delay80us;
}
void delay1(uchar y)
{
uint n;
for(n=y;n>0;n--)
delay10us;
}
void delay2(uchar s)
{
uint m;
for(m=s;m>0;s--)
delay1us;
}
void delay3(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay4(uint N)
{
int i;
for(i=0; i<N; i++)
;
}
/*************************/
/************* 单总线初始化程序 ************/
/*void reset(void)
{//
uchar received;
//
DQ=1;
uint i;
DQ=0;
//
delay(9);
i=103;
while(i>0)i--;
DQ=1;
//
delay1(4);
i=4;
while(i>0)i--;
/*
if(DQ==0)
{
delay1(26);
DQ=1;
}*/
//
received=DQ;
//
delay(3);
//
return received;
//
}
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay4(3);
deceive_ready = DQ;
delay4(25);
return(deceive_ready);
}
/****************************************/
/***************************读一位数据*****************/
bit readbit(void)
{
uint i;
bit dat;
//
DQ =1;
//
delay2(2);
DQ =0;
//
delay2(6);
i++;
DQ =1;
//
delay2(4);
i++;
i++;
dat=DQ;
//
delay1(3);
i=8;
while(i>0)i--;
return dat;
}
/*******************************************************/
/*************************** 读一个字节数据************************/
uchar readbyte(void)
{
uchar j,cont=0,smark;
//
bit
A;
for(;j<=7;j++)
{//
A=readbit();
smark=readbit();
cont=(smark<<7)|(cont>>1);
}
return (cont);
}
/**************************************************************/
/*******************************************写一个字节*******************************/
void writebyte(uchar dat)
{
uchar k;
uint i;
bit wei;
for(;k<=7;k++)
{
wei=dat&0x01;
dat =dat>>1;
if(wei==1)
{ DQ=0;
//
delay2(3);
i++;
i++;
DQ=1;
//
delay2(45);
i=8;
while(i>0)i--;
//
wei=0;
}
else
{
DQ=0;
//
delay1(6);
i=8;
while(i>0)i--;
DQ=1;
i++;
i++;
//
wei=1;
}
}
}
/*************************************************************************************/
/*************************************************温度开始转换***********************************/
void starttemprature(void)
{
reset();
delay3(1);
writebyte(0xcc);//写跳过读ROM命令;
writebyte(0x44);//启动温度转换指令;
}
/**********************************************************************************************/
/******************************************主函数部分******************************************/
void main()
{
uint a,b,c,d,e,f;
long num1;
while(1)
{ starttemprature();
reset();
delay3(1);
writebyte(0xcc);//写跳过读ROM命令?
writebyte(0xbe);//读取暂存器中得温度数值;
a=readbyte();
b=readbyte();
T=b;
T<<=8;
T=a|T;
num1=T*625;
a=num1/10000/10;
b=num1/10000%10;
c=num1%10000/1000;
d=num1%10000%1000/100;
e=num1%10000%1000%100/10;
f=num1%10000%1000%100%10;
//第一个数码管显示十位;
P0 =table[a];
P2 =0x02;
delay1(20);
P0 =0x00;
//第一个数码管显示个位和小数点;
P0 =type[b];
//带小数点位;
P2 =0x03;
delay1(20);
P0 =0x00;
//第一个数码管显示小数点第一位;
P0 =table[c];
P2 =0x04;
delay1(20);
P0 =0x00;
//第一个数码管显示小数点第二位;
P0 =table[d];
P2 =0x05;
delay1(20);
P0 =0x00;
//第一个数码管显示小数点第三位;
P0 =table[e];
P2 =0x06;
delay1(20);
P0 =0x00;
//第一个数码管显示小数点第四位;
P0 =table[f];
P2 =0x07;
delay1(20);
P0 =0x00;
}
} |