|
單片機(jī)源程序如下:
- //******************溫度采集與控制*******DS18B20芯片*******************//
- #include<stc15f2k60s2.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit DQ = P1^4; //單總線接口
- //數(shù)碼管顯示、按鍵、板子初始化、延時函數(shù)定義
- void delayms(int ms);
- void allinit();
- //void keyscan();
- void keyscan16();
- void Timer0Init(void);
- void display1(uchar yi,uchar er);
- void display2(uchar san,uchar si);
- void display3(uchar wu,uchar liu);
- void display4(uchar qi,uchar ba);
- //溫度轉(zhuǎn)化函數(shù)
- uchar Tempget();
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
- uchar yi,er,san,si,wu,liu,qi,ba;
- uchar wendu,tt=0;
- uchar max=35,min=25,qujian;
- bit S7_Flag=0,S6_Flag=0,S5_Flag=0,S4_Flag=0,fla=0;
- //********************************主函數(shù)******************************//
- void main()
- {
- allinit();
- Timer0Init();
- yi=10;er=1;san=10;si=11;wu=11;liu=11;qi=0;ba=0;
- while(1)
- {
- wendu=Tempget();
- if(wendu<min)
- {
- qujian=0;P2|=0xa0;P2&=0xbf;P0=0x00;
- }
- else if((wendu>=min)&&(wendu<=max))
- {
- qujian=1;P2|=0xa0;P2&=0xbf;P0=0x00;
- }
- else if(wendu>max)
- {
- qujian=2;P2|=0xa0;P2&=0xbf;P0=0x10;
- }
- yi=10;er=qujian,san=10,si=11,wu=11,liu=11,qi=wendu/10;ba=wendu%10;
- //keyscan();
- keyscan16();
- display1(yi,er);
- display2(san,si);
- display3(wu,liu);
- display4(qi,ba);
- }
- }
- //*****************************溫度設(shè)置函數(shù)*************************//
- //void
- //*****************************定時函數(shù)****************************//
- void Timer0Init(void) //5毫秒@11.0592MHz
- {
- AUXR |= 0x80; //定時器時鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時器模式
- TL0 = 0x00; //設(shè)置定時初值
- TH0 = 0x28; //設(shè)置定時初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時器0開始計時
-
- ET0=1;EA=1;//打開定時器
- }
- void timer0() interrupt 1
- {
- tt++;
- if((tt==160)&&(qujian==0))
- {
- tt=0;
- if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
- else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
- }
- if((tt==80)&&(qujian==1))
- {
- tt=0;
- if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
- else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
- }
- if((tt==40)&&(qujian==2))
- {
- tt=0;
- if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
- else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
- }
- }
- //*****************************DS18B20芯片************溫度函數(shù)開始************************//
- //單總線延時函數(shù)
- void Delay_OneWire(unsigned int t)
- {
- unsigned char i;
- while(t--){
- for(i=0; i<8; i++);
- }
- }
- //通過單總線向DS18B20寫一個字節(jié)
- void Write_DS18B20(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DQ = 0;
- DQ = dat&0x01;
- Delay_OneWire(50);
- DQ = 1;
- dat >>= 1;
- }
- Delay_OneWire(50);
- }
- //從DS18B20讀取一個字節(jié)
- unsigned char Read_DS18B20(void)
- {
- unsigned char i;
- unsigned char dat;
-
- for(i=0;i<8;i++)
- {
- DQ = 0;
- dat >>= 1;
- DQ = 1;
- if(DQ)
- {
- dat |= 0x80;
- }
- Delay_OneWire(50);
- }
- return dat;
- }
- //DS18B20設(shè)備初始化
- bit init_ds18b20(void)
- {
- bit initflag = 0;
-
- DQ = 1;
- Delay_OneWire(120);
- DQ = 0;
- Delay_OneWire(800);
- DQ = 1;
- Delay_OneWire(100);
- initflag = DQ;
- Delay_OneWire(50);
-
- return initflag;
- }
- //DS18B20溫度獲取函數(shù)
- uchar Tempget()
- {
- uchar temp,low,high;
- init_ds18b20();
- Write_DS18B20(0xcc);
- Write_DS18B20(0x44);
- Delay_OneWire(200);
-
- init_ds18b20();
- Write_DS18B20(0xcc);
- Write_DS18B20(0xbe);
- low=Read_DS18B20();
- high=Read_DS18B20();
- temp=high<<4;temp|=(low>>4);
-
- return temp;
- }
- //************************DS18B20芯片****************溫度函數(shù)結(jié)束***********************//
- //************************延時函數(shù)***************************//
- void delayms(int ms)
- {
- int i,j;
- for(i=0;i<ms;i++)
- for(j=845;j>0;j--);
- }
- //***********************板子初始化函數(shù)**********************//
- void allinit()
- {
- P2|=0xa0;P2&=0xbf;P0=0x00;
- P2|=0x80;P2&=0x90;P0=0xff;
-
- P2|=0xc0;P2&=0xdf;P0=0xff;
- P2|=0xe0;P2&=0xff;P0=0xff;
- }
- ////***********************獨立按鍵函數(shù)************************//
- //void keyscan()
- //{
- // if(P30==0)
- // {
- // S7_Flag=1;
- // }
- // else if(P31==0)
- // {
- // S6_Flag=1;
- // }
- // else if(P32==0)
- // {
- // S5_Flag=1;
- // }
- // else if(P33==0)
- // {
- // S4_Flag=0;
- // }
- //
- // if((P30==1)&&(S7_Flag==1))
- // {
- // S7_Flag=0;
- // yi=2;san=11;
- // }
- // else if((P31==1)&&(S6_Flag==1))
- // {
- // S6_Flag=0;
- // yi=3;san=10;
- // }
- // else if((P32==1)&&(S5_Flag==1))
- // {
- // S5_Flag=0;
- // yi=4;san=9;
- // }
- // else if((P33==1)&&(S4_Flag==1))
- // {
- // S4_Flag=0;
- // yi=5;san=8;
- // }
- //}
- //***************************矩陣按鍵****************************//
- void keyscan16()
- {
- uchar temp;
- //第一列
- P44=0;P42=1;P3=0x7f;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0x7e:break;
- case 0x7d:break;
- case 0x7b:break;
- case 0x77:break;
- }
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
- }
- //第二列
- P44=1;P42=0;P3=0xbf;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xbe:break;
- case 0xbd:break;
- case 0xbb:break;
- case 0xb7:break;
- }
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
- }
- //第三列
- P44=1;P42=1;P3=0xdf;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xde:break;
- case 0xdd:break;
- case 0xdb:break;
- case 0xd7:break;
- }
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
- }
- //第四列
- P44=1;P42=1;P3=0xef;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xee:break;
- case 0xed:break;
- case 0xeb:break;
- case 0xe7:break;
- }
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
- }
- }
- //********************數(shù)碼管顯示函數(shù)******************//
- //第一、二個數(shù)碼管
- void display1(uchar yi,uchar er)
- {
- P2|=0xc0;P2&=0xdf;P0=0x01;
- P2|=0xe0;P2&=0xff;P0=tab[yi];
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
溫度采集與控制.rar
(41.16 KB, 下載次數(shù): 63)
2018-5-12 21:33 上傳
點擊文件名下載附件
DS18B20 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|