|
功能要求:溫度實時檢測測量
代碼:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DQ=P2^4;
- unsigned char flag;
- uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar code table[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x39,0x00};
- uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
- uchar dispbuf[8];
- uchar temper[2];
- void delay(unsigned int us)
- {
- while(us--);
- }
- void reset(void)
- {
- uchar x=0;
- DQ=1;
- delay(8);
- DQ=0;
- delay(80);
- DQ=1;
- delay(14);
- x=DQ;
- delay(20);
- }
- uchar readbyte(void)
- {
- uchar i=0;
- uchar dat=0;
- for (i=8;i>0;i--)
- {
- DQ=0;
- dat>>=1;
- DQ=1;
- if(DQ)
- dat|=0x80;
- delay(4);
- }
- return(dat);
- }
- void writebyte(unsigned char dat)
- {
- uchar i=0;
- for (i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay(5);
- DQ=1;
- dat>>=1;
- }
- delay(4);
- }
- void readtemp(void)
- {
- uchar a=0,b=0;
- reset();
- writebyte(0xCC);
- writebyte(0x44);
- reset();
- writebyte(0xCC);
- writebyte(0xBE);
- a=readbyte();
- b=readbyte();
- if(b>0x0f)
- {
- if(a==0)
- b=~b+1;
- else b=~b;
- flag=10;
- }
- else flag=12;
- temper[0]=a&0x0f;
- a=a>>4;
- temper[1]=b<<4;
- temper[1]=temper[1]|a;
- }
- void scandisp()
- {
- unsigned char i,value;
- for (i=0;i<8;i++)
- {
- P3=0xff;
- value=table[dispbuf[i]];
- if(i==3)
- value|=0x80;
- P0=value;
- P3=scan[i];
- delay(50);
- }
- }
- void main()
- {
- uchar temp,temp1;
- while(1)
- {
- scandisp();
- readtemp();
- temp1=temper[0];
- temp=temper[1];
- dispbuf[4]=ditab[temp1];
- dispbuf[1]=temp/100;
- dispbuf[3]=temp%10;
- temp=temp/10;
- dispbuf[2]=temp%10;
- dispbuf[0]=flag;
- dispbuf[5]=11;
- }
- }
復制代碼 |
-
仿真.png
(44.53 KB, 下載次數: 74)
下載附件
2023-8-21 10:27 上傳
仿真電路
-
-
6基于DS18B20的測溫電路設計.rar
2023-8-21 10:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
141.8 KB, 下載次數: 11, 下載積分: 黑幣 -5
代碼文件
評分
-
查看全部評分
|