1602顯示溫度計程序.rar
(28.2 KB, 下載次數: 105)
2018-2-25 16:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- #include<AT89x51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- //******************adc0832****************************//
- //AD
- sbit CLK=P2^1;
- sbit CS=P2^2;
- sbit DO=P2^3;
- sbit DI=P2^3;
-
- //繼電器
-
- sbit jidian=P3^3;
- sbit jidguan=P3^0;
-
- //數碼管顯示
- sbit fist=P2^7;
- sbit seconed=P2^6;
- sbit three=P2^5;
- sbit forth=P2^4;
- sbit k1=P3^4;
- sbit k2=P3^5;
- sbit k3=P3^6;
- sbit k4=P3^7;
- //char CC[]="11001001";
- uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- uchar temp;
- int y,a=-13;
- uint vvv,i;
- //通道的選擇:0x02就是單通道0;0x03就是單通道1;
- //0x00就是雙通道ch0="+"; ch0="-"
- //0x01就是雙通道ch0="-"; ch0="+"
- //*****************************************************//
- void delay(int tt)
- {
- while(tt--)
- {for(i=0;i<120;i++);}
- }
- void startADC()
- {
- CS=1;
- _nop_();
- _nop_();
- CLK=0;
- _nop_();
- _nop_();
- CS=0;
- _nop_();
- _nop_();
- DI=1;
- _nop_();
- _nop_();
- CLK=1;
- _nop_();
- _nop_();
- DI=0;
- _nop_();
- _nop_();
- CLK=0;
- _nop_();
- _nop_();
- }
- void choiceADC(uint CH)//CH為0選擇通道ch0,為1,選擇ch1進行AD轉換
- {
- startADC();
- if(CH==0)
- {
- DI=1;
- _nop_();
- CLK=1;//上升沿DI=1
- _nop_();
- CLK=0;//1個下降沿DI=1
- _nop_();
- DI=0;
- _nop_();
- CLK=1;
- _nop_();
- CLK=0;//第3個上升沿DI=0
- _nop_();
- }
- else
- {
- CLK=0;
- _nop_();
- DI=1;
- _nop_();
- CLK=1;//上升沿DI=1
- _nop_();
- CLK=0;//1個下降沿DI=1
- _nop_();
- DI=1;
- _nop_();
- CLK=1;//第3個上升沿DI=0
- _nop_();
- }
- /********通道選擇結束開始讀取轉換后的二進制數****/
- CLK=1;
- _nop_();
- CLK=0;//下降沿讀數,一下進行判斷和處理,共8次
- for(i=0;i<8;i++)
- {
- DI=1;
- if(DO)
- {
- temp |=0x01;
- }
- else
- {
- temp &=0xfe;
- }
- CLK=0;
- _nop_();
- CLK=1;
- temp=temp<<1;
- }
- // vvv=temp;
- // if(temp<62) vvv=30;
- // else if(temp>62&&temp<68) vvv=50;
- // else if(temp>68&&temp<70) vvv=100;
- // else if(temp>70&&temp<80) vvv=101;
- // else if(temp>80) vvv=102;
- y=a/6*(temp+16)+434;
-
- }
- void display(uint dat)
- {
- //P2=0x80;
- fist=0; delay(1); fist=1;
- seconed=0; three=0; forth=0;
- P0=tab[dat/1000];
- //delay(1);
- //P0=0xff;
- //P2=0x40;
- seconed=0; delay(1); seconed=1;
- fist=0; three=0; forth=0;
- P0=tab[dat%1000/100];
- //delay(1);
- //P0=0xff;
- //P2=0x20;
- three=0; delay(1); three=1;
- fist=0; seconed=0; forth=0;
- P0=tab[dat%100/10];
- //delay(1);
- //P0=0xff;
- //P2=0x10;
- forth=0; delay(1); forth=1;
- fist=0; seconed=0; three=0;
- P0=tab[dat%10];
- //delay(1);
- //P0=0xff;
- }
-
- void main()
- { int i;
- jidian=0;jidguan=0;
- P0=0xff;
- while(1){
- choiceADC(0);
- delay(1);
- display(temp);
- if(k3==0){i=1;
- while(i)
- {
- choiceADC(0);
- delay(1);
-
-
-
-
-
- // if(k1==0)
- // {
- // delay(50);
- // if(k1==0)
- // {temp++;
- // if(temp>255) {temp=0;}
- // while(!k1);//
- // }
- // }
- //
- // if(k2==0)
- // {
- // delay(500);
- // if(k2==0)
- // {temp--;
- // if(temp<0) {temp=255;}
- // while(!k2);//
- //
- // }
- // }
-
- display(y);
- if(y<30) { jidian=0;jidguan=0;P1=0xfe; } //慢 1盞綠燈亮
- else if(y>32) {jidian=1;jidguan=1;P1=0xda; } //快 3盞綠燈亮
-
- if(k4==0) {i=0;jidian=0;jidguan=1;P1=0xf7;}//開關停止,紅燈亮
- }
- }
- }
- }
復制代碼
|