中易网

ds18b20,我想改变它的精度,让数码管显示能出小数点后一位,谁能帮我把程序改改?

答案:2  悬赏:80  
解决时间 2021-02-12 20:31
ds18b20,我想改变它的精度,让数码管显示能出小数点后一位,谁能帮我把程序改改?
最佳答案
是八位共阳级的吗? 试试我的程序吧 我自己改的 可以显示小数点后一位。
帮你写了很详细的备注信息,应该看的懂了把?你的悬赏分是0很杯具。。。



#include <reg51.h>

#define XTAL 11059200 // CUP 晶振频率
#define baudrate 9600 // 通信波特率

#define uchar unsigned char
#define uint unsigned int

sbit DQ = P1^7; // 定义DS18B20端口DQ 单片机数据采集口
sbit BEEP = P3^7;

unsigned char presence ;
unsigned char code LEDData1[ ] ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff}; //个位显示代码,因为要显示小数点,所以代码与百位 十位的不同
unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xff}; // 百位 十位显示代码
unsigned char data temp_data[2] = {0x00,0x00}; //采集的温度低八位 ,高八位位存这里
unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00};
unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小数位转化查表,这是重点
void beep();
sbit DIN = P0^7; // 小数点
bit flash=0; // 显示开关标记


void Delay(unsigned int num)// 延时函数
{
while( --num );
}


uchar Init_DS18B20(void) // 初始化ds1820
{

DQ = 1; // DQ复位
Delay(8); // 稍做延时

DQ = 0; // 单片机将DQ拉低
Delay(90); // 精确延时 大于 480us

DQ = 1; // 拉高总线
Delay(8);

presence = DQ; // 如果=0则初始化成功 =1则初始化失败
Delay(100);
DQ = 1;

return(presence); // 返回信号,0=presence,1= no presence
}

uchar ReadOneChar(void) // 读一个字节
{
unsigned char i = 0;
unsigned char dat = 0;

for (i = 8; i > 0; i--)
{
DQ = 0; // 给脉冲信号
dat >>= 1;
DQ = 1; // 给脉冲信号

if(DQ)
dat |= 0x80;
Delay(4);
}

return (dat);
}


void WriteOneChar(unsigned char dat)// 写一个字节
{
unsigned char i = 0;

for (i = 8; i > 0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);

DQ = 1;
dat>>=1;
}
}


void Read_Temperature(void)// 读取温度
{
Init_DS18B20();

if(presence==1)
{
beep();
flash=1;
} // DS18B20不正常,蜂鸣器报警
else
{
flash=0;
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换

Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0xBE); // 读取温度寄存器

temp_data[0] = ReadOneChar(); // 温度低8位
temp_data[1] = ReadOneChar(); // 温度高8位
}
}


void Disp_Temperature()// 显示温度
{
unsigned char n=0;
// temp_data[0]=0x10; // 这里的2行代码可以用于测试,测试温度是17度
// temp_data[1]=0x01;

display[4]=temp_data[0]&0x0f;
display[0]=ditab[display[4]]; // 查表得小数位的值 这里是显示小数位的重点哦~~~!!!

display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); //屏蔽小数位,到这里是整数位了啦~
display[3]=display[4]/100; //百位计算
display[1]=display[4]%100;
display[2]=display[1]/10; //十位计算
display[1]=display[1]%10; //个位计算

if(!display[3]) // 高位为0,不显示
{
display[3]=0x0a;

if(!display[2]) // 次高位为0,不显示
display[2]=0x0a;
}

P0 = 0xc6; // 显示 C
P2 = 0xfe; // 位选线为P2.0口,LED为共阳极显示,当位选线为低电平时选通
Delay(300);

P0 = 0x9c; // 显示 °
P2 =0xfd; // 选中P2.1口
Delay(300);

P0 =LEDData[display[0]] ; // 显示小数位
P2 =0xfb; //p2.2
Delay(300);

P0 =LEDData1[display[1]]; // 显示个位
P2 = 0xf7;
Delay(300);

P0 =LEDData[display[2]]; // 显示十位
P2 = 0xef;
Delay(300);

P0 =LEDData[display[3]]; // 显示百位
P2 = 0xdf;
Delay(300);

P2 = 0xff; // 关闭显示
}


void beep(void)
{
unsigned char i;
for (i=0;i<100;i++)
{
Delay(60);
BEEP=!BEEP; // BEEP取反
}
BEEP=1; // 关闭蜂鸣器
}


void send_char(void)
// 传送十六位的温度数据,低位在前
{
unsigned i=0;

// temp_data[0]=0x10;
// temp_data[1]=0x01;
while (i < 2)
{
SBUF = temp_data[i];
while (!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
i++;
}
}


void main(void)
{
uchar receive;

init();

while(1)
{

;
// temp_data[0]=0x10; //测试温度17度
// temp_data[1]=0x01;
// Read_Temperature(); // 读取温度

Read_Temperature();

Disp_Temperature(); // 显示温度

// flash=0;//模拟



if (RI) // 是否有数据到来 ,向上位机发数据,你也可以不要这一段。。。
{
RI = 0;
receive = SBUF;

if (receive == 49) // 是否开始采集温度
{
send_char(); // 传送采集的温度
}
}
}
}

全部回答
用不用我来帮你改?直接改下你的代码就行了 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
德育中心幼儿园我想知道这个在什么地方
德郎牌电池充电器,可以充SONY牌的充电电池吗
电脑软件适合女生学吗?!会存在性别就业歧视
工业上使用生石灰为什么要进行熟化
麻辣烫用什么调料特香 我路过一家卖麻辣烫的
想在卧室放个鱼缸会湿气重吗
榆林市世康农机销售有限公司怎么去啊,有知道
科目三考试经过人行道必须要踩刹车吗
09 BET颁奖典礼上,LIL WAYNE获奖走上去时放
说英雄谁是英雄 努努书坊在线阅读
干部身份怎么定级?
王新家具商城地址在什么地方,我要处理点事
奎文区广文润洁公寓在哪里啊,我有事要去这个
在安徽淮南平安驾校上着课目二教练已分好,对
德仁药房我想知道这个在什么地方
推荐资讯
博雅幼儿园地址在什么地方,想过去办事
青海师范大学2011年什么时候开学
如何应对吹毛求疵的领导?
e7200可以直接代换e2180吗?
两条锦鲤一天不打氧会不会死
海盐话巴甲是什么意思
机械绘图员,两年工作经验的,私营的工资大约
帮忙查下明天早上从昌图到铁岭的最早车是几点
有什么云服务注册不要手机号的?
传祺ga6手动精英有没有日行灯
帮帮忙看感情线与事业线
iPhone7充电一夜充不满怎么回事?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?