|
- #include<reg52.h>
- #include <intrins.h>
- #include"18b20.h"
- #include"18b20_2.h"
- #include"18b20_3.h"
- #include"18b20_4.h"
- #include"18b20_5.h"
- #include"18b20_6.h"
- #include"18b20_7.h"
- #include"18b20_8.h"
- #define uchar unsigned char
- unsigned int code duan[14]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f,0xc6};
- uchar code wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- unsigned char TempData[8]; //存储显示值的全局变量
- unsigned char NUM;
- bit ReadTempFlag1, ReadTempFlag2, ReadTempFlag3, ReadTempFlag4, ReadTempFlag5, ReadTempFlag6, ReadTempFlag7, ReadTempFlag8;//定义读时间标志
- sbit S_clk=P0^0;
- sbit DATA=P0^1;
- sbit R_clk=P0^2;
- /*------------------------------------------------*/
- /*------------------------------------------------*/
- ////////////HC595的传输数据和输入数据////////////////
- void Send_com(uchar dat) //送段选
- {
- unsigned int i;
- for(i=0;i<8;i++)
- {
- S_clk=0;
- DATA=dat&0x80;
- dat<<=1;
- S_clk=1;
- }
- }
- void Outdata()
- {
- R_clk=0;
- _nop_();
- R_clk=1;
- }
- void Dis_one(uchar n,uchar m)
- {
- Send_com(wei[n]);
- Send_com(duan[m]);
- Outdata();
- }
- ///////////////输送位码和段码//////////////////
- void Init_Timer0(void)
- {
- TMOD|=0x01;
- EA=1;
- ET0=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- }
- void Display_all(void)
- {
- Dis_one(0,NUM);
- Dis_one(1,TempData[0]);
- Dis_one(2,TempData[1]);
- Dis_one(3,TempData[2]);
- Dis_one(4,TempData[3]);
- Dis_one(5,12);
- Dis_one(6,TempData[4]);
- Dis_one(7,13);
- }
- void main()
- {
- unsigned int TempH,TempL,temp;
- Init_Timer0();
- while(1)
- {
- if(ReadTempFlag1==1)
- {
- ReadTempFlag1=0;
- NUM=1;
- temp=ReadTemperature_1();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag2==1)
- {
- ReadTempFlag2=0;
- NUM=2;
- temp=ReadTemperature_2();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
- if(ReadTempFlag3==1)
- {
- ReadTempFlag3=0;
- NUM=3;
- temp=ReadTemperature_3();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag4==1)
- {
- ReadTempFlag4=0;
- NUM=4;
- temp=ReadTemperature_4();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag5==1)
- {
- ReadTempFlag5=0;
- NUM=5;
- temp=ReadTemperature_5();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag6==1)
- {
- ReadTempFlag6=0;
- NUM=6;
- temp=ReadTemperature_6();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag7==1)
- {
- ReadTempFlag7=0;
- NUM=7;
- temp=ReadTemperature_7();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- if(ReadTempFlag8==1)
- {
- ReadTempFlag8=0;
- NUM=8;
- temp=ReadTemperature_8();
- if(temp&0x8000)
- {
- TempData[0]=10;//负号标志
- temp=~temp; // 取反加1
- temp +=1;
- }
- else
- TempData[0]=11;
- TempH=temp>>4;
- TempL=temp&0x0F;
- TempL=TempL*6/10;//小数近似处理
-
- if(TempH/100==0)
- TempData[1]=11;
- else
- TempData[1]=TempH/100; //十位温度
- if((TempH/100==0)&&((TempH%100)/10==0))//消隐
- TempData[2]=11;
- else
- TempData[2]=(TempH%100)/10; //十位温度
- TempData[3]=(TempH%100)%10; //个位温度,带小数点
- TempData[4]=TempL;
- // TempData[7]=13; //显示C符号
- }
-
- Display_all();
- }
- }
- /////////////////定时器0 中断程序////////////////////
- /*------------------------------------------------*/
- void Timer0_isr(void) interrupt 1
- {
- static unsigned int num;
- TH0=(65536-50000)/256; //重新赋值 50ms
- TL0=(65536-50000)%256;
- num++;
- if(num==40) //
- {
- ReadTempFlag1=1; //读标志位置1
- }
- if(num==80)
- {
- ReadTempFlag2=1; //读标志位置1
- }
- if(num==120) //
- {
- ReadTempFlag3=1; //读标志位置1
- }
- if(num==160)
- {
- ReadTempFlag4=1; //读标志位置1
- }
- if(num==200) //
- {
- ReadTempFlag5=1; //读标志位置1
- }
- if(num==240)
- {
- ReadTempFlag6=1; //读标志位置1
- }
- if(num==280) //
- {
- ReadTempFlag7=1; //读标志位置1
- }
- if(num==320)
- {
- num=0;
- ReadTempFlag8=1; //读标志位置1
- }
-
- }
复制代码
所有资料打包下载:
DS8B20.zip
(135.67 KB, 下载次数: 16)
|
|