|
這是我的智能多點(diǎn)溫度計(jì) 設(shè)計(jì)指標(biāo): 1)測量三個(gè)點(diǎn)的溫度,測溫范圍均為:0~100℃; 2)每點(diǎn)溫度分辨力:0.0625℃; 3)測量速率:2次/秒自動連續(xù)測量; 4)結(jié)果顯示方式:當(dāng)前溫度顯示及與上一次溫度測量值差值顯示。
QQ圖片20190628104343.png (70.81 KB, 下載次數(shù): 29)
下載附件
2019-6-28 10:45 上傳
QQ圖片20190628104343.png (67.31 KB, 下載次數(shù): 28)
下載附件
2019-6-28 10:44 上傳
這是我的單片機(jī)程序
這是proteus仿真時(shí)的場景,下面一行本該顯示差值一直沒有顯示,只有上面一行。
在百度上查了很久了。。一直沒有找到有用的方法,請各位幫幫我。抱拳!
- #include <reg52.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint temp1;
- uint temp2;
- uint warn_l1=260;
- //??????????????????10????????趨???????1?26???
- uint warn_l2=230;
- //??????????????????10????????趨???????2?23???
- uint warn_h1=290;
- //??????????????????10????????趨???????1?29???
- uint warn_h2=320;
- //??????????????????10????????趨???????2?32???
- uchar code table[]="Difference:";
- sbit DS1=P2^1;
- sbit DS2=P2^2;
- sbit lcden=P3^4;
- sbit rs=P3^5;
- sbit rw=P3^7;
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit beep=P2^3;
- sbit led0=P1^0;
- sbit led1=P1^1;
- //?????????????????2??P1.0??P1.1???led1??led2???
- sbit led2=P1^2;
- sbit led3=P1^3;
- //?????????????????2??P1.2??P1.3???led3??led4???
- void delayms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void write_com(unsigned char com)
- {
- rs=0;
- wr=0;
- P0=com;
- lcden=0;
- delayms(10);
- lcden=1;
- delayms(10);
- lcden=0;
- }
- void write_data(unsigned char dat)
- {
- rs=1;
- wr=0;
- P0=dat;
- lcden=0;
- delayms(10);
- lcden=1;
- delayms(10);
- lcden=0;
- }
- void init_lcd()
- {
- dula=0;
- wela=0;
- write_com(0x01);
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- dula=0;
- wela=0;
- write_com(0x01);
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- }
- void dsreset1(void)
- {
- uint i;
- DS1=0;
- i=103;
- while(i>0)i--;
- DS1=1;
- i=4;
- while(i>0)i--;
- }
- void dsreset2(void)
- {
- uint i;
- DS2=0;
- i=103;
- while(i>0)i--;
- DS2=1;
- i=4;
- while(i>0)i--;
- }
- bit tmpreadbit1(void)
- {
- uint i;
- bit dat1;
- DS1=0;i++;
- DS1=1;i++;i++;
- dat1=DS1;
- i=8;
- while(i>0)i--;
- return (dat1);
- }
- bit tmpreadbit2(void)
- {
- uint i;
- bit dat2;
- DS2=0;i++;
- DS2=1;i++;i++;
- dat2=DS2;
- i=8;
- while(i>0)i--;
- return (dat2);
- }
- uchar tmpread1(void)
- {
- uchar i,j,dat1;
- dat1=0;
- for(i=1;i<=8;i++)
- {
- j=tmpreadbit1();
- dat1=(j<<7)|(dat1>>1);
- //?????????????λ??????棬???????????????DAT
- }
- return(dat1);
- }
- uchar tmpread2(void)
- {
- uchar i,j,dat2;
- dat2=0;
- for(i=1;i<=8;i++)
- {
- j=tmpreadbit2();
- dat2=(j<<7)|(dat2>>1);
- //?????????????λ??????棬???????????????DAT
- }
- return(dat2);
- }
- void tmpwritebyte1(uchar dat1)
- {
- uint i;
- uchar j;
- bit testb;
- for(j=1;j<=8;j++)
- {
- testb=dat1&0x01;
- dat1=dat1>>1;
- if(testb)
- {
- DS1=0;
- i++;i++;
- DS1=1;
- i=8;while(i>0)i--;
- }
- else
- {
- DS1=0;
- i=8;while(i>0)i--;
- DS1=1;
- i++;i++;
- }
- }
- }
- void tmpwritebyte2(uchar dat2)
- {
- uint i;
- uchar j;
- bit testb;
- for(j=1;j<=8;j++)
- {
- testb=dat2&0x01;
- dat2=dat2>>1;
- if(testb)
- {
- DS2=0;
- i++;i++;
- DS2=1;
- i=8;while(i>0)i--;
- }
- else
- {
- DS2=0;
- i=8;while(i>0)i--;
- DS2=1;
- i++;i++;
- }
- }
- }
- void tmpchange1(void)
- {
- dsreset1();
- delayms(2);
- tmpwritebyte1(0xcc);
- tmpwritebyte1(0x44);
- }
- void tmpchange2(void)
- {
- dsreset2();
- delayms(2);
- tmpwritebyte2(0xcc);
- tmpwritebyte2(0x44);
- }
- uint tmp1()
- {
- float tt;
- uchar a,b;
- dsreset1();
- delayms(2);
- tmpwritebyte1(0xcc);
- tmpwritebyte1(0xbe);
- a=tmpread1();
- b=tmpread1();
- temp1=b;
- temp1<<=8;
- temp1=temp1|a;
- tt=temp1*0.0625;
- //?????????????12λ??????????0.0625 ?
- //???????????????λ???????0.0625 ?
- temp1=tt*10+0.5;
- //???????????????????????????????????
- return temp1;
- }
- uint tmp2()
- {
- float tt;
- uchar a,b;
- dsreset2();
- delayms(2);
- tmpwritebyte2(0xcc);
- tmpwritebyte2(0xbe);
- a=tmpread2();
- b=tmpread2();
- temp2=b;
- temp2<<=8;
- temp2=temp2|a;
- tt=temp2*0.0625;
- //?????????????12λ??????????0.0625 ?
- //???????????????λ???????0.0625 ?
- temp2=tt*10+0.5;
- //???????????????????????????????????
- return temp2;
- }
- void display(uint temp1,uint temp2)
- {
- uchar A1,A2,A2t,A3,ser,B1,B2,B2t,B3,C1,C2,C2t,C3,C,num;
- init_lcd();
- ser=temp1/10;
- SBUF=ser;
- A1=temp1/100;
- A2t=temp1%100;
- A2=A2t/10;
- A3=A2t%10;
- write_com(0x80);
- write_data('A');
- write_com(0x81);
- write_data(':');
- write_com(0x82);
- write_data(A1+0x30);
- write_com(0x83);
- write_data(A2+0x30);
- write_com(0x84);
- write_data('.');
- write_com(0x85);
- write_data(A3+0x30);
- ser=temp2/10;
- SBUF=ser;
- B1=temp2/100;
- B2t=temp2%100;
- B2=B2t/10;
- B3=B2t%10;
- write_com(0x80+8);
- write_data('B');
- write_com(0x81+8);
- write_data(':');
- write_com(0x82+8);
- write_data(B1+0x30);
- write_com(0x83+8);
- write_data(B2+0x30);
- write_com(0x84+8);
- write_data('.');
- write_com(0x85+8);
- write_data(B3+0x30);
- //???????????????
- if(temp2>temp1)
- C=temp2-temp1;
- else
- C=temp1-temp2;
- ser=C/10;
- SBUF=ser;
- C1=C/100;
- C2t=C%100;
- C2=C2t/10;
- C3=C2t%10;
- write_com(0x80+40);
- for(num=0;num<11;num++)
- write_data(table[num]);
- write_com(0x80+51);
- write_data(C2+0x30);
- write_com(0x80+52);
- write_data('.');
- write_com(0x80+53);
- write_data(C3+0x30);
- }
- void warn(uint s,uchar led)
- {
- uchar i;
- i=s;
- dula=0;
- wela=0;
- beep=0;
- P1=~(led);
- while(i--)
- {
- display(tmp1(),tmp2());
- }
- beep=1;
- P1=0xFF;
- i=s;
- while(i--)
- {
- display(tmp1(),tmp2());
- }
- }
- void deal(uint t1,uint t2)
- {
- uchar i;
- if((t1<=warn_l2)||(t2<=warn_l2))
- {
- warn(1,0x03);
- }
- else if((t1>=warn_h2)||(t2>=warn_h2))
- {
- warn(1,0x0c);
- }
- else if((t1>warn_l2)&&(t1<=warn_l1))
- //?????????????23??С??????26
- {
- warn(7,0x01);
- }
- else if((t2>warn_l2)&&(t2<=warn_l1))
- //?????????????23??С??????26
- {
- warn(7,0x01);
- }
- else if((t1<warn_h2)&&(t1>=warn_h1))
- //??????????С??32?????????29
- {
- warn(7,0x04);
- }
- else if((t2<warn_h2)&&(t2>=warn_h1))
- //??????????С??32?????????29
- {
- warn(7,0x04);
- }
- else
- {
- i=10;
- while(i--)
- {
- display(tmp1(),tmp2());
- }
- }
- }
-
- void main()
- {
- do
- {
- tmpchange1();
- tmpchange2();
- deal(temp1,temp2);
- display(tmp1(),tmp2());
- }
- while(1);
- }
復(fù)制代碼
|
|