4个DS18B20怎么循环显示温度

我用的是Atmega16单片机做的程序,在读序列号上遇到麻烦,不知道怎么匹配序列号,还有就是不知道怎么用数组在Lcd1602上循环显示出来,求高手帮忙解决下,下面就是我写的问题程序了:
#include<iom16v.h>
#define uchar unsigned char
#define uint unsigned int//与单片机连接口
#define RS_1 PORTA|=(1<<3)
#define RS_0 PORTA&=~(1<<3)
#define RW_1 PORTA|=(1<<4)
#define RW_0 PORTA&=~(1<<4)
#define EN_1 PORTA|=(1<<5)
#define EN_0 PORTA&=~(1<<5)
unsigned char str1[]={"temperature1: "};
unsigned char str2[]={"temperature2: "};
unsigned char str3[]={"temperature3: "};
unsigned char str4[]={"temperature4: "};
unsigned char str5[4][8]={{0xfd,0x00,0x00,0x00,0xb8,0xc5,0x45,0x28},{0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28},{0xb9,0x00,0x00,0x00,0xb8,0xc5,0x31,0x28},{0xe0,0x00,0x00,0x00,0xb8,0xc5,0x32,0x28}};
//这里的数组我不知道怎么写,是自己乱写的
uchar adata[5];
uchar n;
uint tvalue;//温度
uchar tflag;//温度正负标志
/************ds1820程序**************/

void ds1820disp()//温度值显示
{
uchar flagdat;
DDRB|=0xFF; /*I/O口方向设置*/
DDRC|=(1<<3)|(1<<4)|(1<<5);
adata[0]=tvalue/1000+0x30;//百位数
adata[1]=tvalue%1000/100+0x30;//十位数
adata[2]=tvalue%100/10+0x30;//个位数
adata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(adata[0]==0x30)
{
adata[0]=0x20;//如果百位为0,不显示
if(adata[1]==0x30)
{
adata[1]=0x20;//如果百位为0,十位为0也不显示
}
}
if(n==0)
{
wr_com(0x80);
display(str1);
}
else if
{
wr_com(0x80);
display(str2);
}
else if
{
wr_com(0x80);
display(str3);
}
else if
{
wr_com(0x80);
display(str4);
}
//这里的就不知道到底要怎么写程序匹配才能循环显示

先显示某一位数值,延时很小的一段时间后再显示下一位,也就是顺序显示再做循环扫描就可以显示
温馨提示:内容为网友见解,仅供参考
无其他回答

4个DS18B20怎么循环显示温度
先显示某一位数值,延时很小的一段时间后再显示下一位,也就是顺序显示再做循环扫描就可以显示

DS18B20温度显示程序、用的是四位共阴极数码管。目前显示的是比如:27.00...
你把最后两个设置成定向的输出字符,,一直显示‘C,

DS18B20测温在串口调试助手中如何显示温度?(51单片机)
1.首先你要读取DS18B20的温度数据,比如保存在变量 temp中 2.其次你要单片机建立串口通信功能(可以看一些单片机书籍和datasheet上资料),假设设置波特率9600,串口号为1(这个可以查看设备管理器)。3.调用刚刚建立的串口通信功能发送温度数据temp。4.设置串口调试助手参数和单片配置的波特率一致,打开串口即...

DS18B20数字温度计
MOV P1,#0FEH MOV P2,#0FFH MOV P3,#0FFH MAIN: LCALL GET_TEMPER ;调用读温度子程序 LCALL DISP ;调用数码管显示子程序 AJMP MAIN ;重复循环 ;--- 读DS18B20传感器的温度值 --- GET_TEMPER:SETB P3.3 LCALL RST18B20 ;复位DS18B20 JB 00H,DSS2 RET DSS2:...

单片机 通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值
dsWait() : 延时函数,因为18B20在温度转换的时候需要一段时间,转换完成之后,单片机才能去读温度值。bit readBit() :这个函数我确定是做什么的,感觉是被unsigned char readByte() 所调用,因为单片机跟18B20是采用一根线通信,读一个字节也是一位一位读,bit readBit() 这个函数应该就是判断是...

ds18b20 采集的值怎么显示啊
可以直接读取温度数据,然后在数码管上显示的 程序中 low = rd_ds18b20(); \/\/低字节 high = rd_ds18b20(); \/\/高字节 temp = high<<4;temp |= (low>>4);return temp;temp的数值就是温度数据,比如,temp为25,那么温度就为25度,用两位数码管就可以显示了 如有不懂,请追问 望采纳 ...

请教关于DS18B20温度传感器的温度读取
三通道18B20温度测量数码管显示。-55-+125℃,用1位数码管显示当前通道号,4位数码管显示18B20当前通道温度值(一位小数),负号位与正温度百位1用同一位数码管显示,该位为0不显示,如:0 27.9、1 123.1、2 -35.6。连接方法:三个18B20均接P3.7,P0口(JP10)接8位数码管段码口(J12...

基于AT89C52和DS18B20的带LCD显示的温度控制器的设计
你好:四个按键,横着数,第一个调节时间时、分、秒,按三次来选择时、分、秒,第三个调节时、分、秒增,第四个调节时、分、秒减,第二个调节温度上下限按两次来选择温度上、下限,第三个调节温度上、下限增,第四个调节温度上、下限减。LED提示温度报警。当调节时间时,不会调节温度,当调节...

DS18B20的工作原理
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的...

谁能告诉我单片机从ds18b20中读取温度的原理,是怎样将ds18b20中输出的...
读取温度伪代码(temperature为保存温度数值的整型变量):for ( i=1; i<=16; i++){ onebit=读取1位数据的函数();temperature=temperature|onebit;if(i!=16)temperature=temperature<<1;} 然后,单片机是如何读取DS18B20输出的某1bit信息的呢?在具体回答前先明确一点,这一过程必须在单片机拉低数据线...

相似回答