給你改好了
無標題.jpg (175.43 KB, 下載次數: 26)
下載附件
2019-3-31 21:00 上傳
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- sbit rs=P2^6;
- sbit rw=P2^5;
- sbit en=P2^7;
- sbit DS=P3^7;//溫度傳感器
- uchar TempData[8]; //存儲顯示值的全局變量
- uchar tt,s;
- void delay(uchar z)
- {
- uchar x,y;
- for(x=0;x<z;x++)
- for(y=0;y<110;y++);
- }
- void read_busy()
- {
- uchar busy;
- P0=0xff;
- rs=0;
- rw=1;
- do
- {
- en=1;
- busy=P0;
- en=0;
- }while(busy&0x80);
- }
- void write_cmd(uchar cmd)
- {
- read_busy();
- rs=0;
- rw=0;
- P0=cmd;
- en=1;
- en=0;
- }
- void write_dat(uchar dat)
- {
- read_busy();
- rs=1;
- rw=0;
- P0=dat;
- en=1;
- en=0;
- }
- void inti()
- {
- write_cmd(0x38);
- write_cmd(0x0c);
- write_cmd(0x01);
- write_cmd(0x06);
- write_cmd(0x80);
- }
- void delay_us(uchar us)
- {
- while(--us);
- }
- bit ds_inti()
- {
- bit i;
- DS=1;
- delay_us(5);
- DS=0;
- delay_us(200);
- delay_us(200);
- DS=1;
- delay_us(50);
- i=DS;
- delay_us(25);
- return i;
- }
- void write_byte(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- DS=0;
- DS=dat&0x01;
- delay_us(25);
- DS=1;
- dat>>=1;
- }
- delay_us(25);
- }
- uchar read_byte()
- {
- uchar i,j,dat;
- for(i=0;i<8;i++)
- {
- DS=0;
- DS=1;
- j=DS;
- delay_us(25);
- DS=1;
- dat=(j<<7)|(dat>>1);
- }
- return dat;
- }
- /*
- void wendu_inti(ulong i)
- {
- uchar shiwan,wan,qian,bai,shi,ge;
- shiwan=i/100000;
- wan=i%100000/10000;
- qian=i%10000/1000;
- bai=i%1000/100;
- shi=i%100/10;
- ge=i%10;
- inti();
- write_cmd(0x80|0x05);
-
- if(s==1)
- write_dat(0x2d);
- write_dat(shiwan+'0');
- write_dat(wan+'0');
- write_dat(0x2e);
- write_dat(qian+'0');
- write_dat(bai+'0');
- write_dat(shi+'0');
- write_dat(ge+'0');
- write_dat(0xdf);
- write_dat(0x43);
- }*/
- void timer0inti() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- tt++;
- }
- void timer0()
- {
- EA=1;
- ET0=1;
- TR0=1;
- TMOD=0X01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- }
- void main()
- {
- uchar L,M,i;
- uint Temp;
- long TempM;
- uchar TempH,TempL,TempK;
- timer0();
- inti();
- while(1)
- {
- if(tt==10)
- {
- tt=0;
- ds_inti();
- write_byte(0xcc);
- write_byte(0x44);
- delay(10);
- ds_inti();
- write_byte(0xcc);
- write_byte(0xbe);
- L=read_byte();
- M=read_byte();
- Temp=M;
- Temp<<=8;
- Temp|=L;
- if(Temp&0x8000)
- {
- s=1;
- Temp=~Temp;
- Temp+=1;
- }
- else s=0; //正數
- TempM=Temp*0.0625*100; //換算為10進制溫度值再放大100倍
- TempH=TempM/100; //分解出整數值
- TempL=TempM%100; //分解出小數值
- TempL=(TempL+TempK)/2+0.5; //小數取兩次平均值加四舍五入
- TempK=TempL;
- if(s==1)
- TempData[0]='-';//顯示負號
- else if(TempH/100==0)//小于100
- TempData[0]=' '; //百位消隱
- else
- TempData[0]=TempH/100+'0'; //顯示百位溫度
-
- if((TempH/100==0)&&((TempH%100)/10==0))
- TempData[1]=' '; //十位消隱
- else
- TempData[1]=(TempH%100)/10+'0'; //顯示十位溫度
- TempData[2]=(TempH%100)%10+'0'; //顯示個位溫度
- TempData[3]='.'; //顯示小數點
- TempData[4]=TempL/10+'0'; //顯示溫度小數1位
- TempData[5]=TempL%10+'0'; //顯示溫度小數2位
- TempData[6]=0xdf; //顯示.
- TempData[7]='C'; //顯示C
- write_cmd(0x80+5); //數據指針第一行起始0x80位置
- for(i=0;i<8;i++) //每循環一次寫一個字節數據
- write_dat(TempData[i]); //寫一個字節數據
- }
- }
- }
復制代碼
|