通過adc0832讀取PT100電壓值數碼管顯示-50——100度的范圍非常準確,程序及仿真。
仿真原理圖如下(proteus7.5仿真工程文件可到本帖附件中下載)
51hei.png (10.89 KB, 下載次數: 98)
下載附件
2019-12-10 00:29 上傳
51hei.png (17.99 KB, 下載次數: 73)
下載附件
2019-12-10 00:30 上傳
51hei.png (14.4 KB, 下載次數: 74)
下載附件
2019-12-10 00:30 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit cs=P1^2;
- sbit clk=P1^0;
- sbit di=P1^1;
- uchar num,num1,i,a,b,c;
- int wendu;
- sbit we = P2^7; //位定義數碼管位選鎖存器接口
- sbit du = P2^6; //位定義數碼管段選鎖存器接口
- //數碼管段選表
- uchar code leddata[]={
-
- 0x3F, //"0"
- 0x06, //"1"
- 0x5B, //"2"
- 0x4F, //"3"
- 0x66, //"4"
- 0x6D, //"5"
- 0x7D, //"6"
- 0x07, //"7"
- 0x7F, //"8"
- 0x6F, //"9"
- 0x40, //"-"
- 0x00, //熄滅
- 0x00 //自定義
-
- };
- void delay(uint x)
- {
- uchar y;
- for(;x>0;x--)
- for(y=110;y>0;y--);
- }
- uchar ADC0832()
- {
- cs=1;
- clk=0;
- cs=0;
- di=1;
-
- clk=1;
- clk=0;
- di=1;
- clk=1;
- clk=0;
- di=0;
- clk=1;
- clk=0;
- di=1;
- for(i=0;i<8;i++)
- {
- clk=1;
- clk=0;
- num=num<<1;
- num|=(uchar)di;
- }
- cs=1;
- return num;
- }
- void main()
- {
- while(1)
- {
- ADC0832();
- if(num<=38)
- wendu=num-69;
- if(num>38&&num<=70)
- wendu=num-70;
- if(num>70)
- wendu=num-71;
-
- if(wendu>=0)
- {
- a=wendu/100;
- b=wendu%100/10;
- c=wendu%10;
- if(a>0)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[a]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(a!=0||b>0)
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[b]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- P0 = 0xf7;//1111 0111 只選通第四位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[c]; //顯示4
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- else
- {
- num1=abs(wendu);
- a=num1/100;
- b=num1%100/10;
- c=num1%10;
- if(num1>9)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[10]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- else
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[10]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(a>0)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[a]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(a!=0||b>0)
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[b]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- P0 = 0xf7;//1111 0111 只選通第四位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[c]; //顯示4
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- }
- }
復制代碼
51hei.png (6.26 KB, 下載次數: 79)
下載附件
2019-12-10 00:31 上傳
Keil代碼與Proteus7.5仿真dsn文件下載:
pt100.zip
(106.81 KB, 下載次數: 427)
2019-12-6 19:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|