基于51单片机的18b20数码管C语言代码
基于51单片机的18B20温度计C程序

本程序为本人用单片机80c51与18b20做实验时写的,其中有些是汉语拼音,便于咱们中国同胞们理解.仅供参考#include <reg52.h>#define uint unsigned int#define uchar unsigned charuchar tab[]="0123456789WD:C";sbit ds=P2^6;sbit rs=P3^4;sbit rw=P3^5;sbit en=P3^6;uchar s,g,shu;/***延时2tus***/yanshi(uchar t){while(--t){;}}/***延时tms** */delay(uint t){uchar a,b;for(a=t;a>0;a--)for(b=110;b>0;b--);}/***18B20初始化***/chushi(){ds=0;yanshi(250); //延时500usds=1;yanshi(2);}/***等待应答***/yingda(){while(ds);while(~ds);yanshi(2);}/***写一个字节***/w_dat(uchar dat){uchar i;for(i=0;i<8;i++){dat=dat>>1;ds=0;yanshi(8);ds=CY;yanshi(30);ds=1;}}/***读一个字节***/ uchar du_dat(){uchar i,dat;for(i=0;i<8;i++){ dat=dat>>1;ds=0;yanshi(1);ds=1;if(ds==1){dat=dat|0x80;}yanshi(30);}return dat;}/***启动温度转换***/ zhuanhuan(){chushi();yingda();delay(1);w_dat(0xcc);w_dat(0x44);}/***读取温度***/uchar du_wendu(){uchar a,b,dat;chushi();yingda();delay(1);w_dat(0xcc);w_dat(0xbe);a=du_dat(); //低位字节;b=du_dat(); //高位字节;dat=(b<<4)|(a>>4);return dat;}////////////////////////////// 1602液晶/////////////////////////////w_ml(uchar com){rs=0;P0=com;delay(5);en=1;delay(5);en=0;}chushihua(){rw=0;en=0;w_ml(0x38);w_ml(0x0c);w_ml(0x06);w_ml(0x01); }w_1602(uchar date){rs=1;P0=date;delay(5);en=1;delay(5);en=0;}xianshi(){w_ml(0x80);w_1602(tab[10]);w_1602(tab[11]);w_1602(tab[12]);w_1602(tab[s]);w_1602(tab[g]);w_1602(tab[13]);}/***************//** 主函数**//**************/main(){chushihua();while(1){delay(1);zhuanhuan();delay(10);shu=du_wendu();s=shu/10;g=shu%10;xianshi();}}。
温度传感器18B20驱动程序(C语言)

温度传感器18B20驱动程序(C语言)我精心整理的一个温度传感器18B20的程序包,可直接调用这个程序适用于12MHz晶振的51单片机,默认为89C52系列,如果是89C51的话,把头文件改为#include "reg51.h"就可以了,下面是头文件和C文件,大家在工程里加入C文件,在主程序中加入头文件,直接调用read_temp();函数,就可以返回浮点型的温度值,为10进制,可以处理后直接用LCD或数码管显示,很方便,是我做温控的子程序。
/*************头文件******************/#include "reg52.h"#include "intrins.h" //_nop_();延时函数用#define uchar unsigned char#define uint unsigned intsbit DQ="P3"^4; //温度输入口ow_reset(void);//18B20复位void write_byte(uchar val);//写命令uchar read_byte(void);//读数据/***********读出温度函数**********输入:无输出:zs+xs,格式为123.4即为浮点型数的温度格式===================================*/float read_temp();/***************C文件**********************/#include "reg52.h"#include "18B20.h" //_nop_();延时函数用//*******温度小数部分用查表法**********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; /***********11微秒延时函数**********///void delay(uint t){for(;t>0;t--);}///***********18B20复位函数**********/ow_reset(void){char presence="1";while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0; //delay(50); // 550usDQ=1; //delay(6); // 66uspresence=DQ; // presence="0继续下一步"}delay(45); //延时500uspresence = ~DQ;}DQ=1;}/////**********18B20写命令函数*********///向 1-WIRE 总线上写一个字节void write_byte(uchar val){uchar i;for (i=8; i>0; i--) //{DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出delay(6); //66usval=val/2; //右移一位}DQ = 1;delay(1);}///*********18B20读1个字节函数********///从总线上读取一个字节uchar read_byte(void){uchar i;uchar value = 0;for (i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ = 0; //_nop_();_nop_();_nop_();_nop_(); //4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); //4usif(DQ)value|=0x80;delay(6); //66us}DQ=1;return(value);}///***********读出温度函数**********输入:无输出:zs+xs,格式为123.4即为浮点型数的温度格式===================================*/ //float read_temp(){float zs,xs;//存放整数和小数uchar temp_data[2];//读出温度暂存EA=0;//禁止中断,防止读错ow_reset(); //总线复位write_byte(0xCC); // 发Skip ROM命令write_byte(0xBE); // 发读命令temp_data[0]=read_byte(); //温度低8位temp_data[1]=read_byte(); //温度高8位ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令xs=ditab[temp_data[0]&0x0f];//小数位xs=xs/10;zs=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//整数位return (zs+xs);EA=1;//开中断}//结束当然,大家做数字温度计的话直接使用这个程序就可以了,但是如果要做多点温控的话,大家还要自己写查找序列号的程序!加油!/************************************************************ *18B20驱动程序,DQ为数据口,接于P2.1*11.0592M晶振,上拉4.7k电阻*Author:fyb*2005-3-25 11:23,OK!*************************************************************/ #i nclude<reg51.h>#i nclude<intrins.h>#define uchar unsigned char#define uint unsigned intsbit dq = P1^7;bit flag;uint Temperature;uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节uchar id_buff[8];uchar *p;uchar crc_data;uchar code CrcTable [256]={0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62 , 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 12 8, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29 , 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210,48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 2 05,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 2 38,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 1 45, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 2 44, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 2 15, 137, 107, 53};///************************************************************ *Function:延时处理*parameter:*Return:*Modify:*************************************************************/ void TempDelay (uchar us){while(us--);}/************************************************************ *Function:18B20初始化*parameter:*Return:*Modify:*************************************************************/ void Init18b20 (void){dq=1;_nop_();dq=0;TempDelay(86); //delay 530 uS//80_nop_();dq=1;TempDelay(14); //delay 100 uS//14_nop_();_nop_();_nop_();if(dq==0)flag = 1; //detect 1820 success!elseflag = 0; //detect 1820 fail!TempDelay(20); //20_nop_();_nop_();dq = 1;}/************************************************************ *Function:向18B20写入一个字节*parameter:*Return:*************************************************************/ void WriteByte (uchar wr) //单字节写入{uchar i;for (i=0;i<8;i++){dq = 0;_nop_();dq=wr&0x01;TempDelay(5); //delay 45 uS //5_nop_();_nop_();dq=1;wr >>= 1;}}/************************************************************ *Function:读18B20的一个字节*parameter:*Return:*Modify:*************************************************************/ uchar ReadByte (void) //读取单字节{uchar i,u=0;for(i=0;i<8;i++){dq = 0;u >>= 1;if(dq==1)u |= 0x80;TempDelay (4);_nop_();}return(u);}/************************************************************ *Function:读18B20*parameter:*Return:*Modify:*************************************************************/ void read_bytes (uchar j){uchar i;for(i=0;i<j;i++){*p = ReadByte();p++;}}/************************************************************ *Function:CRC校验*parameter:*Return:*Modify:*************************************************************/ uchar CRC (uchar j)uchar i,crc_data=0;for(i=0;i<j;i++) //查表校验crc_data = CrcTable[crc_data^temp_buff[i]];return (crc_data);}/************************************************************ *Function:读取温度*parameter:*Return:*Modify:*************************************************************/ void GemTemp (void){read_bytes (9);if (CRC(9)==0) //校验正确{Temperature = temp_buff[1]*0x100 + temp_buff[0];// Temperature *= 0.625;Temperature /= 16;TempDelay(1);}}/************************************************************ *Function:内部配置*parameter:*Return:*Modify:*************************************************************/ void Config18b20 (void) //重新配置报警限定值和分辨率Init18b20();WriteByte(0xcc); //skip romWriteByte(0x4e); //write scratchpadWriteByte(0x19); //上限WriteByte(0x1a); //下限WriteByte(0x7f); //set 11 bit (0.125)Init18b20();WriteByte(0xcc); //skip romWriteByte(0x48); //保存设定值Init18b20();WriteByte(0xcc); //skip romWriteByte(0xb8); //回调设定值}/************************************************************ *Function:读18B20ID*parameter:*Return:*Modify:*************************************************************/ void ReadID (void)//读取器件 id{Init18b20();WriteByte(0x33); //read romread_bytes(8);}/************************************************************ *Function:18B20ID全处理*parameter:*Return:*Modify:*************************************************************/ void TemperatuerResult(void){p = id_buff;ReadID();Config18b20();Init18b20 ();WriteByte(0xcc); //skip romWriteByte(0x44); //Temperature convertInit18b20 ();WriteByte(0xcc); //skip romWriteByte(0xbe); //read Temperaturep = temp_buff;GemTemp();}。
ds18b20c语言程序

ds18b20c语言程序DS18B20驱动程序(C语言)//#include"reg51.h"sbit DQ =P1^4; //定义通信端口//延时函数/*void delay(unsigned inti){while(i--);}*///初始化函数Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ 复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);}//读一个字节ReadOneChar(void){unsigned chari=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);}//写一个字节WriteOneChar(unsigned chardat){unsigned char i=0;for (i=8; i>;0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ =1;dat>;>;=1;}//delay(4);}//DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsignedchar b=0;unsigned int t=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;t t=t*0.0625;//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用return(t);}//DS18B20主程序main(){unsigned chari=0;while(1){i=ReadTemperature();//读温度}}ds18b20c语言程序完毕。
我的51单片机之 温度传感器18B20 的C语言和汇编编程

{
TCZ=TCZ%100;//只显示小于 100 的整数温度
}
TC[1]=TCZ/10;
TC[0]=TCZ%10;
}
Hale Waihona Puke }void main() {
LEDCODE=0xFF; LED1=0; while(1) {
ReadTemp(); Disp(); } }
四、汇编程序: ;********************************************************************
温度传感器 18B20 实验
一、功能: 插上 18B20,上电后,数码管显示相应的环境温度。
二、电路图:
三、C 程序: //******************************************************************** //读取 18B20 输出的温度数据(2 位)并在数码管上显示;made by luqichao //********************************************************************
unsigned char Reset(); unsigned char ReadByte(); void WriteByte(unsigned char Data); void ReadTemp(); //延时 void delay(unsigned char n) {
unsigned char i; for(i=0;i<n;i++) { } }
Data>>=1; CLK=0; NOP();NOP();NOP();NOP();NOP();NOP();//6us CLK=1; NOP();NOP();NOP();NOP();NOP();//4us Temp=CLK; if(Temp) {
51单片机18b20程序

EA=1;
com_init(9600);
init();
for(num=0;num<15;num++)
{
write_data(table[num]);
delay(20);
}
for(num=0;num<16;num++)
{
write_com(0x18);
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar adc;//定义采样值变量
uchar pq,start,bai,shi,ge,shi1;
uchar code table[]=" Temperature is:";
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
PS=1; //串口中断优先
// PX0=0;
SCON = 0x50; /* 0x52;//SCON */
TMOD = 0x20; /*0x20;// TMOD */
TCON = 0x60; /*0x60;// TCON */
case 38400:
51单片机与ds18b20程序

#include <>#include <>#define uchar unsigned char#define uint unsigned intsbit DQ = P2^2; //数据口define interfacesbit dula = P2^6; //数码管段选sbit wela = P2^7; //数码管位选uint temp; //温度值 variable of temperature//不带小数点unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//带小数点unsigned char code table1[] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*************精确延时函数*****************/void delay(unsigned char i){while(--i);}/******************************************此延时函数针对的是12Mhz的晶振delay(0):延时518us 误差:518-2*256=6delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5delay(20):延时45us 误差:45-40=5delay(100):延时205us 误差:205-200=5delay(200):延时405us 误差:405-400=5*******************************************//*****************DS18B20******************/void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command{DQ = 1; //DQ复位,不要也可行。
51单片机采集18B20温度

51单片机采集18B20温度-----并用7段数码管动态显示#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar table[]={0xc0,0xf9,0xa4,0xb0, //"0","1","2","3"共阳0x99,0x92,0x82,0xf8, //"4","5","6","7"0x80,0x90,0xbf,0xff}; //"8","9",负温度/错误,正温度/消隐uchar shu[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};sbit DQ=P3^7; //定义18B20数据线bit sflag; //正负标志位uchar readdata[2]; //保存温度数值数组uchar test; //保存温度数值中间变量uchar LED[8]; //数码管显示数变量,LED[0]正负标记位,之后依次为百十个十分百分uchar live=0; //18b20存在标记位uchar cnt=0; //中断标记位//************18B20程序***********************************************************//void delayus(uint t) //微秒级延时{while(t--);}void reset(void)//复位18B20{DQ=1; delayus(8);DQ=0; delayus(80);DQ=1; delayus(10);live=DQ; delayus(20);DQ=1; delayus(100);}void writebyte(uchar command)//写字节到18B20{uchar i=0;for(i=8;i>0;i--){DQ=0;DQ=command&0x01;delayus(5);command>>=1;DQ=1;}}uchar readbyte()//从18b20读出字节{uchar i=0;uchar temp=0;for(i=8;i>0;i--){DQ=0; //采样开始DQ=1; //释放总线temp>>=1;if(DQ)temp|=0x80;delayus(5);DQ=1; //总线复位}return(temp);}//************数码管扫描程序***********************************************************//void display(uchar LED[]){uint i;for(i=0;i<8;i++){P0=0X00;if(i==3)P2=table[LED[i]]&0x7f;elseP2=table[LED[i]];P0=shu[i];delayus(250);}}//****************************************************************************/// /void main(){uint i=0;TMOD=0X01;TR0=1;ET0=1;EA=1;while(1){while(cnt){cnt=0;reset();if(live==0) //18B20存在{writebyte(0xcc);writebyte(0x44); //转化温度reset();writebyte(0xcc);writebyte(0xbe); //读取温度readdata[0]=readbyte(); //读取低位温度readdata[1]=readbyte(); //读取高位温度sflag=1; //温度标记位,1为正,0为负if((readdata[1]&0xf8)!=0x00) //如果是负温,将补码转为原码{sflag=0;readdata[1]=~readdata[1]; //负数的补码等于真值按位取反后末位加1readdata[0]=~readdata[0]+1;if(readdata[0]>255) //如果低八位的值转为原码后大于11111111(255),向高八位进1readdata[1]++;}test=((readdata[1]*256)+readdata[0])/16;//把高位与低位的值转成10进制)LED[1]= test/100; //百位LED[2]= test%100/10; //十位LED[3]= test%10; //个位LED[4]= (readdata[0]&0x0f)*6/10; //十分位的值,精确度为0.0625度LED[5]= (readdata[0]&0x0f)*6%10; //百分位的值,精确度为0.0625度}else //18B20不存在for(i=0;i<8;i++)LED[i]=10;LED[6]=11;LED[7]=11;if(sflag==0){LED[0]=10;}else LED[0]=11;display(&LED[0]); //动态显示数码}}}//****************************************************************************// void timer0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;cnt++;}。
C51单片机DS18B20-数码管显示-温度传感器

DQ = 0; //MCU拉低
nops(); //调用_nop_()延时函数要多一些时间,延时1.085+0.235 = 1.32us,数据手册规定大于1us
DQ = dat&0x01;//从低位到高位发送 ,要在15us之前将数据送到总线上
#include <reg52.h>
#include <intrins.h>
#include "def.h"
#define nops(); {_nop_(),_nop_();}
code uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
void WriteByte(uchar dat)//写0或写1共用此函数
{
uchar i;
for(i=0;i<8;i++)// 00000 001,分别写1位的时序
{ // 0000 0000
DQ = 1; //起始状态总线为高
}
/*****************************读一个字节*******************************/
uchar ReadByet()
{
uchar i;
uchar dat = 0;
for(i=0;i<8;i++) //分别读1位的时序
{
DQ = 1; //起始
dat |= 0x01<<i;//最先发送过来的是低位数据
}
delay10us(6); //延时60us,其中包括发送两个时间之间所需的时间间隔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P1^4;sbit bell=P0^6;uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code led_t[]={25,30};uchar led_quan[],led_n=0,t_n=0;bit mim;bit flag;void delay1(uint t){while(t--);}void delay(uchar del){uchar x,y;for(x=0;x<del;x++){for(y=0;y<=148;y++);}}//DS18B20初始化函数bit init_ds18b20(void){bit initflag = 0;DQ = 1;delay1(12);DQ = 0;delay1(80); // 延时大于480usDQ = 1;delay1(10); // 14initflag = DQ; // initflag等于1初始化失败delay1(5);return initflag;}//通过单总线向从器件写一个字节void wr_ds18b20(unsigned char byt){unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = byt&0x01;delay1(5);DQ = 1;byt >>= 1;}delay1(5);}//通过单总线从从器件读一个字节unsigned char rd_ds18b20(void){unsigned char i;unsigned char byt;for(i=0;i<8;i++){DQ = 0;byt >>= 1;DQ = 1;if(DQ){byt |= 0x80;}delay1(5);}return byt;}//温度转换、读取及数据处理器函数unsigned char rd_temperature(void) {unsigned char low,high;char temp;init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0x44); //启动温度转换delay1(200);init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0xBE); //读取寄存器low = rd_ds18b20(); //低字节high = rd_ds18b20(); //高字节temp = high<<4;temp |= (low>>4);return temp;}void dingwen(){if(rd_temperature()>=30){ bell=1;P2|=0xa0;P2&=0x5f;}if(rd_temperature()<=25){ bell=1;P2|=0xa0;P2&=0x5f;}}void tine0(){TMOD=0X01;TH0 = 0xDC; // 定时10msTL0 = 0x00;EA=1;ET0=1;TR0=1;}void time1_isr() interrupt 1{TH0 = 0xDC; // 定时10msTL0 = 0x00;t_n++;if (t_n == 100) // 1s{t_n = 0;flag=~flag;}}void led_shuju(){led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}void flash1(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=0xff;led_quan[3]=0xff;led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}}void flash2(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]= 0xbf;led_quan[5]= 0xff;led_quan[6]= 0xbf;case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xff;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}}void display( uchar *del){switch(led_n){case 0:P0=del[0];P2=0xe0;P2&=0x1f;P0=0x80;P2=0xc0;P2&=0x3f;delay(3);break;case 1:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 2:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 3:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 4:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 5:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 6:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;}if(led_n==7)led_n=0;elseled_n++;}void main(){init_ds18b20();while(1){display();dingwen();}}。