#include <reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
#define DATA_PORT P0 // 共享数据总线
sbit SEG_LE = P2^2; // 段选锁存
sbit DIG_LE = P2^3; // 位选锁存
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);
uchar code seg[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0X80};
// 共阴数码管段码(0-9加小数点)
unsigned char code seg_code[11] = {
0x3F, 0x06, 0x5B, 0x4F, // 0-3
0x66, 0x6D, 0x7D, 0x07, // 4-7
0x7F, 0x6F, 0x80 // 8-9 + 小数点(0x80)
};
// 位选编码(4位数码管)
unsigned char dig_code[4] = {0xFE, 0xFD, 0xFB, 0xF7};
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i=0; i<ms; i++)
for(j=0; j<120; j++);
}
void main()
{
uchar temp;
uchar i;
unsigned char disp_value[10] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; // 10表示带小数点的0
while(1)
{
for(i=0; i<4; i++)
{
temp = retemp();
// 1. 关闭所有位选(防鬼影)
DATA_PORT = 0xFF;
DIG_LE = 1; DIG_LE = 0;
// 2. 发送段选数据
DATA_PORT = seg_code[disp_value[temp]];
SEG_LE = 1; SEG_LE = 0;
// 3. 发送位选数据
DATA_PORT = dig_code[i];
DIG_LE = 1; DIG_LE = 0;
// 4. 保持显示
delay_ms(4);
}
}
}
void delay5(uchar n)
{
do
{
_nop_();
_nop_();
_nop_();
n--;
}
while(n);
}
/*--------------?????--------------------*/
void init_ds18b20(void)
{
uchar x=0;
DQ =0;
delay5(120);
DQ =1;
delay5(16);
delay5(80);
}
/*--------------???????----------------*/
uchar readbyte(void)
{
uchar i=0;
uchar date=0;
for (i=8;i>0;i--)
{
DQ =0;
delay5(1);
DQ =1; //15????????
date>>=1;
if(DQ)
date|=0x80;
delay5(11);
}
return(date);
}
/*--------------??????------------------*/
void writebyte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ =0;
DQ =dat&0x01;//?"1" ?15?????
delay5(12); //?"0" ??60??
DQ = 1;
dat>>=1;
delay5(5);
}
}
/*--------------??????------------------*/
uchar retemp(void)
{
uchar a,b,tt;
uint t;
init_ds18b20();
writebyte(0xCC);
writebyte(0x44);
init_ds18b20();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}怎么让数码管显示出temp对应的数据,包括小数点