求各位大佬幫忙看看哪里出錯(cuò)了 ,這個(gè)是NTC熱敏電阻查表法測(cè)溫,但是溫度一直對(duì)不上,求大佬幫助幫助,最好請(qǐng)大佬幫我改一下發(fā)過來
用protues仿真一下,拜謝!809417210@qq.com
- #include <reg52.h>
- #include <intrins.h>
- #include <math.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- code uint VOL[]={ 31.11,29.57,28.12,26.74,25.45,24.22,23.06,21.96,20.92,
- 19.93,19.00,18.11,17.28,16.48,15.73,15.01,14.33,13.69,13.08,
- 12.50,11.94,11.42,10.92,10.45,10.00,9.57,9.16,8.77,8.40,
- 8.05,7.71,7.39,7.09,6.79,6.52,6.25,6.00,5.76,5.53,
- 5.31,5.10,4.90,4.71,4.53,4.35,4.18,4.02,3.87,3.72,3.58,
- 3.45,3.32,3.20,3.08,2.97,2.86,2.76,2.66,2.56,2.47,
- 2.38,2.30,2.22,2.14,2.07,1.99,1.93,1.86,1.80,1.74,
- 1.68,1.62,1.57,1.52,1.47,1.42,1.37,1.33,1.28,1.24,
- 1.20,1.16,1.13,1.09,1.06,1.02,0.99,0.96,0.93,0.90,
- 0.88,0.85,0.82,0.80,0.78,0.75,0.73,0.71,0.69,0.67,};
- code uint Temper[]={ 100, 200, 300, 400, 500,
- 600, 700, 800, 900, 1000,
- 1100, 1200, 1300, 1400, 1500,
- 1600, 1700, 1800, 1900, 2000,
- 2100, 2200, 2300, 2400, 2500,
- 2600, 2700, 2800, 2900, 3000,
- 3100, 3200, 3300, 3400, 3500,
- 3600, 3700, 3800, 3900, 4000,
- 4100, 4200, 4300, 4400, 4500,
- 4600, 4700, 4800, 4900, 5000,
- 5100, 5200, 5300, 5400, 5500,
- 5600, 5700, 5800, 5900, 6000,
- 6100, 6200, 6300, 6400, 6500,
- 6600, 6700, 6800, 6900, 7000,
- 7100, 7200, 7300, 7400, 7500,
- 7600, 7700, 7800, 7900, 8000,
- 8100, 8200, 8300, 8400, 8500,
- 8600, 8700, 8800, 8900, 9000,
- 9100, 9200, 9300, 9400, 9500,
- 9600, 9700, 9800, 9900, 10000};
- sbit EOC = P1^4;
- sbit CLOCK = P1^3;
- sbit CS = P1^2;
- sbit DIN = P1^1;
- sbit DOUT = P1^0;
- sbit RS=P1^5 ;
- sbit RW=P1^6 ;
- sbit EN=P1^7 ;
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- unsigned int read2543(uchar port)
- {
- uint ad,i;
- ad=0;
- CLOCK =0;
- CS =0;
- port=port<<4;
- for(i=0;i<12;i++)
- {
- if(DOUT)
- ad|=0x01;
- DIN =(bit)(port&0x80);
- CLOCK=1;
- CLOCK=0;
- port=port<<1;
- ad<<=1;
- }
- CS = 1;
- ad =ad>>1;
- return(ad);
- }
- /*** D′êy¾Y***/
- void w_dat(unsigned char dat)
- {
- RS = 1;
- //EN = 0;
- P2 = dat;
- delay_ms(5);
- RW = 0;
- EN = 1;
- EN = 0;
- }
- /*** D′Ãüáî***/
- void w_cmd(unsigned char cmd)
- {
- RS = 0;
- // EN = 0;
- P2 = cmd;
- delay_ms(5);
- RW = 0;
- EN = 1;
- EN = 0;
- }
- /***
- 求各位大佬幫忙看看哪里出錯(cuò)了 ,這個(gè)是NTC熱敏電阻查表法測(cè)溫,但是溫度一直對(duì)不上,求大佬幫助幫助,最好請(qǐng)大佬幫我改一下發(fā)過來
- 用protues仿真一下,拜謝!***/
- void w_string(unsigned char addr_start, unsigned char *p)
- {
- unsigned char *pp;
-
- pp = p;
- w_cmd(addr_start);
- while (*pp != '\0')
- {
- w_dat(*pp++);
- }
- }
- void Init_LCD1602(void)
- {
- EN = 0;
- w_cmd(0x38);
- w_cmd(0x0C);
- w_cmd(0x06);
- w_cmd(0x01);
- }
- void process(uint date,uchar add)
- {
- uchar A[7];
- A[0]=date/1000%10+'0';
- A[1]=date/100%10+'0';
- A[2]='.';
- A[3]=date/10%10+'0';
- A[4]=date%10+'0';
- A[5]='C';
- w_string(add,A);
- }
- void main()
- {
- uchar i,flag=0;
- uint result,temp1,temp2;
- float res;
- Init_LCD1602();
-
- w_string(0x80,"Temper:");
-
- while (1)
- {
- res=(read2543());
- result=(uint)((10*4096/res)-10);
-
- temp1=abs(result-VOL[0]);
- for(i=1;i<101;i++)
- {
- temp2=abs(result-VOL[i]);
- if(temp1>=temp2)
- {
- temp1=temp2;
- flag=i;
- }
-
- }
- process(Temper[flag],0x80+7);
- }
- }
復(fù)制代碼
|